Featherlight — это легковесная библиотека для реализации модальных окон и всплывающих элементов в JavaScript. Одним из ключевых аспектов её гибкости является возможность создавать собственные фильтры для обработки контента перед его отображением. Фильтры позволяют изменять или подготавливать данные, формировать динамический HTML, подставлять шаблоны и интегрировать сторонние источники.
Фильтр в Featherlight представляет собой функцию, которая принимает
исходный контент и возвращает модифицированное значение. Основная точка
подключения фильтров — это объект $.featherlight.filters.
Каждое свойство этого объекта является отдельным фильтром, доступным по
имени при инициализации окна.
Пример структуры фильтра:
$.featherlight.filters.myFilter = function(content) {
// content — исходные данные, переданные в open()
let modifiedContent = "<div class='custom'>" + content + "</div>";
return modifiedContent;
};
Ключевые моменты работы фильтров:
$.Deferred()).Фильтр подключается через параметр iframe,
ajax, image или собственное имя фильтра при
инициализации:
$.featherlight('Пример контента', {
filter: 'myFilter'
});
Если фильтр отсутствует, Featherlight по умолчанию использует стандартный обработчик, который просто выводит текст или HTML.
Асинхронные фильтры позволяют получать данные из удалённого источника перед отображением модального окна. Например, загрузка контента с API:
$.featherlight.filters.asyncData = function(content) {
let deferred = $.Deferred();
$.getJSON(content.url, function(data) {
deferred.resolve("<div class='api-content'>" + data.html + "</div>");
}).fail(function() {
deferred.reject("Ошибка загрузки данных");
});
return deferred.promise();
};
Применение:
$.featherlight({ url: '/api/content' }, { filter: 'asyncData' });
Такой подход позволяет динамически подставлять данные без перезагрузки страницы и обеспечивает поддержку цепочек фильтров.
Фильтры можно комбинировать, создавая цепочки обработки контента. Для этого каждый фильтр вызывается последовательно, а результат передаётся следующему. Пример:
$.featherlight.filters.addWrapper = function(content) {
return "<div class='wrapper'>" + content + "</div>";
};
$.featherlight.filters.highlight = function(content) {
return content.replace(/(важно)/gi, '<span class="highlight">$1</span>');
};
При открытии окна:
$.featherlight('Текст с важно отметкой', { filter: 'addWrapper' });
Для последовательного применения нескольких фильтров можно вручную обернуть вызовы:
let content = 'Текст с важно отметкой';
content = $.featherlight.filters.highlight(content);
content = $.featherlight.filters.addWrapper(content);
$.featherlight(content);
Фильтры могут быть использованы для:
Благодаря гибкости фильтров Featherlight превращается из простого модального окна в универсальный инструмент для отображения любых интерактивных и динамических элементов на веб-странице.