Документация Толоки

Класс Assignment

    Обратите внимание

    Документация на русском языке может быть устаревшей. Самые последние изменения доступны в документации на английском языке.

    Примечание

    Справочник по настройке интерфейса описывает работу редактора HTML/JS/CSS. Вы также можете попробовать создать интерфейс задания в Конструкторе шаблонов.

    Этот класс управляет ходом выполнения задания, обрабатывает команды страницы заданий на отправку ответов, пропуск, приостановку задания и т. п. Также он создает экземпляр класса TaskSuite.

    Базовый класс Assignment доступен в глобальной переменной window.TolokaAssignment.

    Методы:

    constructor(options)

    Конструктор базового класса списка заданий.

    Параметры:

    • options.assignment — модель списка задания Assignment.

    • options.specs — параметры входных и выходных данных, интерфейса заданий.

    • options.workspaceOptions — параметры инициализации рабочего пространства исполнителя.

    destroy()

    Вызывает TaskSuite.destroy(), удаляет из DOM все элементы шаблона, закрывает канал обмена сообщениями, останавливает опрос горячих клавиш и геолокацию, вызывает onDestroy.

    initHotkeys()

    Инициализатор обработчиков горячих клавиш:

    • Сбрасывает все горячие клавиши (hotkeys.reset).

    • При нажатии клавиши Enter вызывает метод submit().

    getId()

    Возвращает assignmentId в виде строки или undefined, если вы отлаживаете задание в режиме превью или открыли предпросмотр пула.

    getOptions()

    Возвращает объект с набором параметров, переданных методу constructor() при инициализации.

    Пример
    // getting specifications for all required fields:
    let outputSpec = this.getOptions().specs.output_spec,
         requiredFields = Object.keys(outputSpec)
                                .filter(key => outputSpec[key].required)
                                .reduce((item, key) => (item[key] = outputSpec[key], item), {});
    

    getSandboxChannel()

    Возвращает ссылку на активный канал для обмена сообщениями между родительской страницей и фреймом задания. Если канала нет, создает его.

    Пример
    // subscribe to all messages and show them
    this.getSandboxChannel().on('*', (name, message) => console.log(message));
    
    // ask the parent page to show task instructions
    // there is also a separate service for this TaskInterface
    this.getSandboxChannel().triggerOut('task:interface:show:instruction');
    

    getTaskSuite()

    Возвращает ссылку на экземпляр TaskSuite.

    getTaskSuiteContainer()

    Возвращает document.body рабочего пространства исполнителя.

    getWorkspaceOptions()

    Возвращает объект с настройками рабочего пространства исполнителя.

    Наиболее важные настройки:

    • agent — для заданий в полной версии принимает значение FRONTEND, в мобильном приложении для Android — ANDROID и т. д.

    • isReadOnly — флаг режима «только для чтения» (например, просмотр истории выполненных заданий).

    • isReviewMode — флаг режима ревью (например, приемка выполненных заданий). Этой настройкой и isReadOnly удобно пользоваться, если вы, например, захотите изменить компоновку шаблона в режиме просмотра истории.

    • language — двухбуквенный код языка, выбранного исполнителем в настройках Толоки. Им удобно пользоваться для создания многоязычных шаблонов.

    • origin — FQDN родительской страницы.

    pause()

    Приостанавливает выполнение задания (например, по команде request:assignment:pause от головной страницы), вызывает onPause.

    provideSolutions(strategy)

    Собирает ответы на все задания (TolokaTaskSuite.getSolutions()), валидирует их (TolokaTaskSuite.validate()). При успешной валидации вызывает strategy, при неуспешной — отправляет запрос assignment:validation:fail и объект со списком ошибок, который вернул валидатор. Параметр:

    • strategy: функция, которая отправляет в родительскую страницу сообщение об отправке результатов (assignment:submit), массив ответов и assignmentId.
    Пример
    provideSolutions(strategy = function(solutions) {
            this.getSandboxChannel().triggerOut('assignment:submit', { solutions, assignmentId: this.getId() });
        }, errorCallback = function(errors) {
            //do nothing by default
        }) {
            const solutions = this.getTaskSuite().getSolutions();
    
            Promise.resolve(this.getTaskSuite().validate(solutions))
                .then((errors) => {
                    if (!errors) {
                        strategy.call(this, solutions);
                    } else {
                        this.getSandboxChannel().triggerOut('assignment:validation:fail', errors);
                        errorCallback.call(this, errors);
                    }
                });
        }
    

    resume()

    Продолжает выполнение задания, вызывает onResume и start.

    skip()

    Позволяет пропустить текущее задание, эквивалентно нажатию кнопки Пропустить.

    start()

    Выполняет все необходимые действия при запуске набора заданий — добавляет в document.body отрендеренный интерфейс заданий, инициализирует горячие клавиши для всего интерфейса исполнителя (InitHotkeys), вызывает onStart.

    submit

    Собирает, валидирует и отправляет выполненные задания, для этого вызывается provideSolutions.

    Пример

    // in some scenarios, you might need to set delayed sending
    // in that case, you can programmatically hide the send button in the project settings
    // for example, from TolokaTask
    this.getDOMElement().querySelector('.my_submit_button').addEventListener('click', (event) => this.getAssignment().submit());