Перейти к основному содержимому

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 банков вопросов, которые должны быть пройдены
  • 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