Класс TaskSuite

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

«Класс-обертка» для страницы заданий, создает экземпляры классов заданий. Вы можете переопределить этот класс, например, чтобы отобразить общий элемент на странице с заданиями или получить больший контроль над заданиями (нестандартные горячие клавиши или т.п.).

Основная задача класса TaskSuite — отрисовать задания на странице ( render() ). Через него также происходит сбор ответов ( getSolutions() ), валидация ( validate(solutions) ) и управление горячими клавишами ( focusNextTask() , onKey(key) и т.д.).

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

Методы:

constructor(options)
Конструктор базового класса страницы заданий. Параметры:
  • options.task — массив моделей задания Task.
  • options.specs — параметры входных и выходных данных, интерфейса заданий. См. формат объекта task_spec .
  • options.assignmentId — идентификаторы заданий на странице.
  • options.workspaceOptions — параметры инициализации песочницы {{isReadOnly: boolean}}
  • options.TaskClass — массив классов создаваемых заданий.
  • options.solutions — массив ответов Solution . Может быть пуст.
destroy()
Уничтожает все задания страницы. Освобождает занятые в глобальном пространстве ресурсы, сервисы, обработчики событий. Вызывает onDestroy() .
focusNextTask()
Устанавливает фокус на следующее задание.
focusPreviousTask()
Устанавливает фокус на предыдущее задание.
focusTask(index)
Устанавливает фокус на задание по индексу. Параметр:
  • index — индекс задания на странице.
getAssignment()

Возвращает ссылку на экземпляр класса TolokaAssignment. После этого вы можете использовать все свойства и методы экземпляра класса.

Пример
// skip current assignment
this.getAssignment().skip();
Скопировано
getDOMElement()

Возвращает DOM-элемент страницы (до отрисовки пустой, после — инициализированный, содержащий интерфейс).

getFocusedTask()

Возвращает ссылку на активное задание. Получает индекс активного задания из приватного свойства _focusedTaskIndex и возвращает ссылку на это задание с помощью getTasks() .

Пример
// remove the class .some_class from all elements of the active task
let elements = Array.from(this.getFocusedTask().getDOMElement().querySelectorAll('.some_class'));
elements.forEach(el => el.classList.remove('some_class'));
Скопировано
getOptions()

Возвращает параметры, переданные методу constructor() .

getProxyUrl(path)
Возвращает полный URL для доступа к данным на прокси-сервере. Параметр:
  • path — относительный путь к файлу.
getSolutions()

Возвращает массив ответов Solution .

getStyleDOMElement()

Возвращает DOM-элемент стилей страницы.

getTasks()

Возвращает массив инициализированных моделей задания Task .

getTasksDOMElement()

Возвращает DOM-элемент набора заданий (div.task-suite). Если DOM-элемент отсутствует, то метод создает его.

getTasksIndexed()
Возвращает задания, индексированные по идентификаторам: "<taskId>": Task, …
getWorkspaceOptions()

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

initHotkeys()
Инициализатор обработчиков горячих клавиш:
  • Устанавливает фокус на предыдущее задание по стрелке влево/вверх.
  • Устанавливает фокус на следующее задание по стрелке вправо/вниз.
  • Передает нажимаемые клавиши активному заданию.
  • Устанавливает фокус на первое задание.
onDestroy()
Метод, который вы можете переопределить, чтобы выполнить свой код при уничтожении набора заданий. Вызывается после уничтожения страницы ( destroy() ). Наиболее подходящий метод для очистки занятой памяти, удаления глобальных обработчиков событий, DOM-элементов и т. п.
onKey(key)
Передает нажатую клавишу активному заданию.
onPause()
Метод, который вы можете переопределить, чтобы выполнить свой код при остановке работы страницы заданий.
onRender()
Метод, который вы можете переопределить, чтобы выполнить свой код при отрисовке страницы заданий. Вызывается после отрисовки страницы ( render() ). Все манипуляции с DOM-элементом задания следует производить здесь.
onResume()
Метод, который вы можете переопределить, чтобы выполнить свой код при возобновлении работы страницы заданий.
onValidationFail(errors)
Вызывается после неудачной валидации с описанием ошибок в параметре. Параметр:
pause()
Вызывает метод pause() для каждого задания в наборе. Также вызывает метод onPause() .
proxy(path, options)
Делает GET/POST запрос через прокси. Возвращает результат запроса в виде объекта. Параметры:
Внимание. Некоторые возможности (например, таймауты или кастомные заголовки) не поддерживаются.
Пример
// we need to find usernames starting with 'ivanov' and 'egorov' (no more than 10 of each)
// we make two POST requests to the search service
// then wait for results

let promises = [],
patterns = ['jones*', 'smith*'];

patterns.forEach(pattern => promises.push(Promise.resolve(this.proxy('myproxy/search', {
   type: 'POST',
   contentType: 'application/json',
   dataType: 'json',
   data: JSON.stringify({
      query: pattern,
      limit: 10
   }),
   processData: false
}))));

Promise.all(promises)
.then(results => console.log(results))
.catch(error => console.error(error));
Скопировано
render()

Формирует DOM-представление страницы заданий: отрисовывает все задания на странице — вызывает render() класса Task для каждого задания. Вызывает onRender() . Возвращает this.

validate(solutions)
Валидирует ответы согласно параметрам выходных данных. Возращает объект promise с массивом ошибок SolutionValidationError , если ответы некорректные, или null. Параметр:
  • solutions — массив ответ исполнителя на задания. Если не передан, то используются текущие ( getSolutions() ).