WidgetBase.js
Класс assets\src\js\components\WidgetBase.js - это основа всех elearning виджетов. Вот пример регистрации HorizontalFrameset виджета:
class SberHorizontalFrameSet extends WidgetBase {
constructor(settings) {
super(settings, new HorizontalDirection, new FrameSet);
}
}
document.addEventListener('alpine:init', () => {
Alpine.data('sberHorizontalFrameSet', (settings) => new SberHorizontalFrameSet(settings))
Alpine.bind('sberHorizontalFrameSet', () => widgetActions)
})
Настройки
В каждый виджет передаются настройки из редактора Elementor, они сохраняются в свойстве settings. Ниже рассмотрены общие настройки, так же есть отдельные настройки для Frameset и QuestionBank.
- isEditor -
trueесли виджет запущен в редакторе,falseесли на сайте - pageId - id текущей страницы
- postType - тип записи. Курс поддерживает типы
pageиmodal - scrollToFrame -
trueнужно включить скролл до фрейма,false- поведение по умолчанию - addSwiper -
trueнужно включить swiper карусель,false- поведение по умолчанию
Конструктор
С помощью композиции классов уточняется поведение виджета. Композиция реализована с помощью di классов в конструкторе, принимаются классы components/widget_parts/type/Base.js и components/widget_parts/direction/Base.js а дочерний класс от components/widget_parts/display/Base.js выбирается автоматически на основе настройки swiper. Далее все эти классы будут называться "частями"
Init
Init функция вызывается Alpine.js для инициализации виджета. Регистрация происходит для каждого виджета отдельно, по общему шаблону
Alpine.data('widget_type', (settings) => new WidgetType(settings))
Таким образом все HTML элементы с атрибутом [x-data="widget_type"] будут инициализированы как Alpine виджеты.
При инициализации elearning виджета происходит настройка начал ьных значений, начального внешнего вида и инициализация всех частей
Данный метод также принимает параметр resetFrames=false, если передать true на его место. то прогресс виджета будет полностью сброшен
Остальные методы
Оставшиеся методы WidgetBase класса используются в частях, и при обработке событий
События
С помощью Alpine.js так же регистрируется обработчики событий вместе с инициализацией виджета
Alpine.bind('widget_type', (settings) => {/*attributes*/})
Таким образом все HTML элементы с атрибутом [x-bind="widget_type"] получат указанные атрибуты, среди которых и будут обработчики событий. Подробнее об этом способе в документации bind Alpine.js