Featherlight — лёгкая и гибкая библиотека для создания модальных окон на JavaScript, которая предлагает встроенные механизмы фильтрации содержимого. Встроенные фильтры позволяют управлять типом контента, определять поведение при открытии модального окна и обеспечивать совместимость с различными источниками данных.
В Featherlight фильтры применяются через опцию filter
при инициализации или вызове модального окна. Они действуют как
промежуточный слой, проверяющий переданный селектор или контент и
определяющий, допустим ли он для отображения.
$.featherlight(element, {
filter: 'img'
});
В этом примере фильтр разрешает отображение только элементов
<img>. Любой другой контент будет проигнорирован, что
позволяет ограничивать тип отображаемых данных без дополнительных
проверок.
Featherlight предоставляет несколько предопределённых фильтров, которые охватывают основные сценарии:
'iframe' — фильтрует контент, создавая
встроенный <iframe>. Используется для внешних
страниц, видео и документов.$.featherlight('https://example.com', {
iframe: true,
iframeWidth: 600,
iframeHeight: 400
});
'image' — автоматически определяет
элементы <img> или URL изображений. При открытии
выполняется проверка расширения файла и формируется соответствующий
тег.$.featherlight('image.jpg', {
type: 'image'
});
'ajax' — загружает контент по
AJAX-запросу. Фильтр полезен при динамическом наполнении модального окна
из серверных источников.$.featherlight('/content.html', {
type: 'ajax'
});
'html' — для локального HTML-контента.
Применяется, когда нужно открыть существующий элемент DOM без переноса
его в другую структуру.$.featherlight($('#popup-content'), {
type: 'html'
});
Featherlight позволяет создавать собственные фильтры, расширяя
стандартное поведение. Для этого используется метод
$.featherlight.defaults.filter. Новый фильтр — это функция,
которая получает переданный контент и должна возвращать
true, если элемент допустим, или false для
блокировки.
$.featherlight.defaults.filter = function(content) {
return content.hasClass('allow-lightbox');
};
В этом примере разрешаются только элементы с классом
allow-lightbox. Такой подход обеспечивает высокую гибкость
и возможность интеграции с любыми системами валидации контента.
filter или кастомный фильтр перед созданием окна.image, ajax,
html и т.д.).Если фильтр возвращает false, окно не создаётся, что
предотвращает ошибки и лишние запросы к серверу.
Фильтры тесно связаны с событиями Featherlight:
beforeOpen — выполняется после
проверки фильтра, можно отменить открытие окна.afterContent — срабатывает после
загрузки и рендеринга контента, полезно для дополнительных
манипуляций.$.featherlight('#myPopup', {
filter: '.allowed',
beforeOpen: function(event) {
console.log('Проверка фильтра завершена');
}
});
Фильтры в сочетании с этими событиями позволяют строить сложные модальные интерфейсы с динамическим и безопасным контентом.