Интерфейс из бандла
Иногда возникает необходимость использовать разрабатываемые вне платформы интерфейсы разметки. Такие интерфесы могу быть созданы с использованием любых технологий.
Бандл — это html-файл, внутри которого находится содержимое файлов css и js.
Подготовка бандла
Для сборки html-файла со всеми ресурсами вы можете использовать любой удобный способ или воспользоваться скриптом:
-
Для использования скрипта вам потребуется node.js.
-
Разместите скрипт в той же директории, что и папка build.
-
Запустите в консоли команду
node prepareBuild.js
.
После успешного выполнения скрипта в той же директории, где находится скрипт, будет сгенерирован файл index.html со всеми ресурсами внутри.
|
Загрузка бандла
Чтобы загрузить бандл, нажмите на кнопку Загрузить Bundle:

Перед вами появится модальное окно, в котором вы можете:
-
загрузить новый html-файл. В этом случае произойдет обновление всех полей интерфейса
-
обновить существующий html-файл. В таком случае обновления полей интерфейса не произойдет. Обновится лишь содержимое по ссылке указанной в поле
bundleSrc
в секцииCONFIG

Все бандлы загружаются в датасет с именем |
Использования API в бандлах
Для удобства отладки бандлов можно задавать примеры данных в блоке Example data. При запуске задачи ожидается, что аналогичные примеры входных данных будут поданы на вход вашего шаблона разметки.
{
"context": [...]
}
Поскольку интерфейс привязан к проекту, в котором может быть много задач, то для управления задачами предусмотрена возможность конфигурирования.
{
"entities": [...]
}
Для общения основного приложения TagMe со сторонним приложением используется внутренний API, который будет доступен через window.parent.tmAPI
. API используется для получения данных задачи, валидации и отправке результат разметки и показа ошибок.
Свойства
-
task
— содержит данные задания: из реальных данных с платформы или из Example data.
Параметр | Обязательность | Описание |
---|---|---|
data |
Да |
Данные для задания. Уникальное для каждого задания |
config |
Да |
Конфигурация интерфейса проекта. Заполняется в поле |
meta |
Да |
Дополнительная информация о задании |
token |
Нет |
Токен задания. Используется для запросов к стораджу. Имеет значение только на экране разметки. |
premarkup |
Да |
Предразметка задания. Уникальное для каждого задания |
-
task.meta
Параметр | Обязательность | Описание |
---|---|---|
userId |
Да |
id пользователя |
taskId |
Нет |
id задачи |
stage |
Да |
Экран разметки. Возможные значения "preview", "preview_task", "prepare_task", "result", "markup" |
isControlAnswer |
Нет |
На экране "result" показывает контрольное это задание или нет. |
Методы
-
onSubmit
- функция, которая вызывается перед отправкой результата для получения данных из бандла. Ожидает объект в качестве возвращаемого значения. -
onValidate
- функция, которая вызывается перед отправкой результата. Проверяет валидность результирующих данных. Ожидаемые занчения:true
если данные валидные,string
если данные не валидные и есть текст ошибки валидации,false
если данные не валидные (будет показана дефолтная ошибка валидации) -
saveMarkupToStorage
- функция, сохраняющая текущий результат разметки в localStorage. Сохраненный результат будет использоваться в качестве предразметки.
window.parent.tmAPI.onValidate = () => {
if (typeof values !== 'object') return "Не верный формат данных"
if (Object.values(values).some((value) => value === undefined)) {
return "Вы оценили не все параметры!"
}
return true
}
window.parent.tmAPI.onSubmit = () => {
return result_from_bundle
}
-
setError(error)
— устанавливает ошибку, в качестве параметра принимает объект, содержащий 3 поля:-
message — заголовок ошибки;
-
description — описание ошибки;
-
details — дополнительные данные об ошибке.
-
stack — stack trace ошибки.
-
window.parent.tmAPI.setError({
message: 'При формировании задания произошла ошибка',
description:
'Мы пометим, что это задание привело к ошибке, и проигнорируем его в результатах.\n Пожалуйста, перейдите к следующему заданию',
stack: error.stack,
details: {
name: error.name,
message: error.message,
componentStack: error.componentStack
}
})

{
"result": {
"error": {
"message": "При формировании задания произошла ошибка",
"description": "Мы пометим, что это задание привело к ошибке, и проигнорируем его в результатах.\n Пожалуйста, перейдите к следующему заданию",
"details": {
"name": "Error",
"message": "Synthetic error",
"componentStack": "\n at Bi (about:srcdoc:62:57436)\n at Md (about:srcdoc:62:58715)\n at div\n at Od (about:srcdoc:62:57519)"
},
"stack": "Error: Synthetic error\n at about:srcdoc:62:57457\n at al (about:srcdoc:62:24194)\n at Jn (about:srcdoc:62:42084)\n at wd (about:srcdoc:62:40937)\n at Sn (about:srcdoc:62:39999)\n at Fi (about:srcdoc:62:36680)\n at vn (about:srcdoc:60:3267)\n at about:srcdoc:62:34080"
}
},
"status": "error"
}
Все не перехваченные ошибки внутри приложения перехватываются на уровне iframe. |