Featherlight — это легковесная библиотека для создания модальных окон на JavaScript. Одной из ключевых возможностей является поддержка расширений, которые позволяют добавлять дополнительные функции и изменять поведение модальных окон без модификации ядра библиотеки. Расширения в Featherlight строятся по принципу объектного наследования, что обеспечивает гибкость и масштабируемость.
Расширение в Featherlight представляет собой объект с набором свойств и методов. Основные моменты:
ext.Объект расширения обычно включает следующие элементы:
Методы жизненного цикла:
beforeOpen: вызывается до открытия модального окна.
Можно использовать для проверки условий или подготовки контента.afterOpen: вызывается сразу после открытия.
Используется для инициализации динамического контента или анимаций.beforeClose: вызывается перед закрытием окна. Позволяет
отменить закрытие при необходимости.afterClose: вызывается после закрытия окна. Полезно для
очистки ресурсов или выполнения логики завершения.Методы событий: Featherlight позволяет
расширениям подписываться на стандартные события, такие как
open, close или resize.
Свойства конфигурации: Расширение может определять свои опции по умолчанию. Они могут быть переопределены при инициализации модального окна.
Пример базовой структуры расширения:
$.featherlight.extensions.myExtension = {
name: 'myExtension',
beforeOpen: function(event) {
console.log('Модальное окно готово к открытию');
},
afterOpen: function(event) {
console.log('Модальное окно открыто');
},
beforeClose: function(event) {
console.log('Закрытие модального окна');
},
afterClose: function(event) {
console.log('Модальное окно закрыто');
},
/* Пользовательские методы */
highlight: function() {
this.$content.css('border', '2px solid red');
}
};
Для активации расширения используется ключ ext в
настройках Featherlight. Значение может быть строкой с именем расширения
или массивом для подключения нескольких расширений одновременно.
Пример подключения одного расширения:
$.featherlight('#myContent', {
ext: 'myExtension'
});
Пример подключения нескольких расширений:
$.featherlight('#myContent', {
ext: ['myExtension', 'anotherExtension']
});
Порядок в массиве важен: расширения вызываются в том порядке, в котором они перечислены.
Расширения могут переопределять стандартные методы
Featherlight, сохраняя при этом возможность вызывать оригинальные методы
через this._super(). Это позволяет добавлять логику без
нарушения базового поведения.
Пример переопределения метода afterOpen:
$.featherlight.extensions.customOpen = {
afterOpen: function() {
this._super(); // Вызов стандартного метода
console.log('Дополнительная логика после открытия');
this.$content.css('background-color', '#f0f0f0');
}
};
Расширения могут содержать собственные методы и свойства, которые становятся доступными через объект модального окна:
$.featherlight.extensions.analytics = {
afterOpen: function() {
this.trackOpen();
},
trackOpen: function() {
console.log('Отправка данных в систему аналитики');
}
};
var fl = $.featherlight('#myContent', { ext: 'analytics' });
fl.trackOpen(); // Вызов метода расширения напрямую
ext.Расширения в Featherlight позволяют создавать гибкие, модульные решения для модальных окон, интегрируя дополнительные функции без изменения исходного кода библиотеки. Они обеспечивают расширяемость и повторное использование кода, что критично для крупных проектов с разнообразными требованиями к интерфейсу.