type
Base
Базовый класс, наследующийся от BaseWidgetPart.js
class Base extends BaseWidgetPart {
static courseControllerDataName;
init(resetFrames = false) {/*...*/}
initFramesArray() {/*...*/}
initActiveFrames(resetFrames = false) {/*...*/}
getDataForSaving() {/*...*/}
triggerEventMax() {}
triggerEventMin() {}
}
Данная часть отвечает за работы с данными elearning виджетов:
static courseControllerDataName- отвечает за имя переменной в CourseControllerData.js, это свойство должно быть определено в дочерних классахinitFramesArray- устанавливает массивthis.widgetBase.$framesиз которого по id фрейма можно получить html element фреймаinitActiveFrames- устанавливает массивыthis.widgetBase.activeFramesиthis.widgetBase.activeFramesForProgressна основе среды (фронтенд или редактор), сохраненных в оболочке данных и запроса на сброс прогрессаgetDataForSaving- возвращает объект с общими данными для сохранения в оболочке. Может быть переопределено в дочерних классах для сохранения дополнительной информацииtriggerEventMaxиtriggerEventMin- методы без реализации, но с их помощью можно определить поведение при достижении максимального или минимального фрейма в дочерних классах
Дефолтные данные для сохранения:
- active - массив активных для отображения фреймов
- activeForProgress - массив фреймов для подсчета прогресса
- length - количество фреймов
FrameSet
Основная задача FrameSet elearning виджетов - это подсчет прогресса. Передача прогресса в оболочку работает с помощью класса PageProgressController, поэтому прогресс всех фреймов восстанавливается после перезагрузки страницы.
В дополнение к базовым настройкам во FrameSet передаются следующие опции:
- progress - объект с настройками передачи прогресса каждого фрейма
- type - тип прогресса из объекта
PROGRESS_TYPE - amount - количество прогресса, которое должно быть передано в оболочку при полном прохождении фрейма
- questionBankFinishedIds - только для типа
QUESTION_BANK_FINISHED, список id банков вопросов, которые должны быть пройдены
- type - тип прогресса из объекта
- progressTypes - массив со всеми типами прогресса, которые заданы в виджете. Нужно для небольшой оптимизации, чтобы постоянно не перебирать массив progress
- frameSwitchType - настройка типа перехода к следующему фрейму
Для каждого фрейма прогресс задается отдельно. Подсчет может основываться на:
- Открытие фрейма - при открытии фрейма весь его прогресс сразу передается в оболочку
- Измен ение переменной - при изменении какой-либо переменной курса прогресс будет засчитан. Имеет смысл использовать с булевскими переменными или в связки с условием того, какое значение должна получить переменная. Условия добавляются с помощью ConditionManager в настройках фрейма
- Прохождении банка вопросов - вызывается когда успешно пройден банк вопросов с заданным id
- Окончании проигрывании медиа файла - медиа файлы добавляются с помощью плагина Sber Media Player
- Скролле фрейма - только для вертикальных фреймов
Все виды прогресса перечислены в объекте
PROGRESS_TYPE
Также для вертикальных фреймсетов можно настроить условие при котором будет открываться следующий фрейм:
- По триггеру - ручное переключение с помощью вызова функции controlElearningWidget или с помощью триггеров
- Предыдущий фрейм пройден - когда прогресс предыдущего фрейма достигает 100%, открывается следующий фрейм
- Показа ть все - все фреймы отображаются сразу на странице. Полезно со связкой прогресса по скроллу, таким образом можно получить обработчик скролла всей страницы с нелинейной передачей прогресса
Все варианты открытия фреймов перечислены в объекте
FRAME_SWITCH_TYPE
Данные для сохранения:
- framesProgress - объект с прогрессом каждого фрейма
- finishedFrames - массив пройденных фреймов
- startedValues - объект со значениями переменных, за изменениями которых нужно следить
Для передачи прогресса есть метод setProgress, который получает прогресс каждого фрейма из метода _getFramesProgress и передает его в PageProgressController
QuestionBank
Главная задача банка вопросов / квизов - показ вопросов и сбор результатов.
Есть возможность показывать фреймы в случайном порядке для усложнения прохождения квизов. Это удачно работает с настройкой на ограничение максимального количества фреймов. Таким образом при настройке на показ 10 из 20 фреймов-вопросов в случайном порядке, отвечающие будут получать очень разные наборы фреймов
Для управления данными в банке вопросов используются функции changeQuizScore.js
В дополнение к базовым настройкам в QuestionBank передаются следующие опции:
- randomOrderEnabled - включен ли случайный порядок фреймов
- maxFramesAmount - максимальное количество фреймов
- passPoints - количество баллов, которые нужно набрать, чтобы банк вопросов считался пройденным
- maxPoints - максимальное количество вопросов, которые можно набрать в банке вопросов
Данные для сохранения:
- length - заменяет базовое значение на настройку maxFramesAmount
- passPoints - копия настройки passPoints для получения из оболочки в других виджетах
- maxPoints - копия настройки maxPoints для получения из оболочки в других виджетах
- scorePercent - процент прогресса, устанавливается функциями из changeQuizScore.js
- scorePoints - количество набранных баллов, устанавливается функциями из changeQuizScore.js
- finished - пройден ли банк вопросов, устанавливается функциями из changeQuizScore.js
- receivedAnswersCounter - счетчик количества полученных ответов, устанавливается функциями из changeQuizScore.js
- framesOrder - массив с id фреймов в порядке отображения на странице, нужно сохранять так как важно сохранить порядок перемешанных вопросов после перезагрузки страницы
- passedQuestionIds - массив пройденных фреймов-вопросов, нужно сохранять так как триггер прохождения вопроса должен срабатывать только один раз и даже после перезагрузки страницы
Перемешивание фреймов происходит при соблюдении нескольких условий:
- Виджет открыт во фронтенде, а не в редакторе
- Настройка
randomOrderEnabledвключена - И одно из
- Не было получено ни одного ответа и открыт первый фрейм
- Происходит происходит рестарт фрейма
Если перемешиван ие произошло ранее, то при перезагрузке страницы будет восстановлен порядок на основе массива из свойства framesOrder