Библиотека Featherlight представляет собой лёгкий и гибкий инструмент
для создания модальных окон (lightbox) в JavaScript. Одним из ключевых
элементов, обеспечивающих адаптивное отображение содержимого, является
параметр contentFilters. Он позволяет определить, каким
образом Featherlight должен интерпретировать и обрабатывать источник
контента перед его вставкой в модальное окно.
contentFilterscontentFilters отвечает за фильтрацию и трансформацию
контента, получаемого по ссылке или из DOM-элемента. Он принимает
объект, в котором ключи — это условия, а значения — функции фильтров.
Каждая функция фильтра проверяет контент на соответствие условию и
возвращает обработанный результат.
Основная задача параметра — корректно определить тип контента (HTML, изображение, iframe, AJAX) и преобразовать его так, чтобы Featherlight мог корректно его отобразить.
contentFiltersОбъект contentFilters состоит из пар ключ–значение:
$.featherlight.defaults.contentFilters = {
filterName: function (link, $link) {
// Логика фильтрации
return transformedContent;
}
};
image, ajax, iframe,
html.image Определяет, является ли
ссылка изображением по расширению (.jpg, .png,
.gif и т.д.). Если фильтр срабатывает, Featherlight создаёт
<img> с указанным источником.
$.featherlight.defaults.contentFilters.image = function (link) {
if (link.match(/\.(png|jpg|jpeg|gif|bmp|webp)$/i)) {
return $('<img>').attr('src', link);
}
};ajax Используется для подгрузки
содержимого с сервера через AJAX-запрос. Возвращает результат запроса в
формате HTML.
$.featherlight.defaults.contentFilters.ajax = function (link) {
if (link.indexOf('#') === -1) {
return $.ajax({url: link, type: 'GET', dataType: 'html'});
}
};iframe Применяется для встраивания
внешних страниц через <iframe>. Обычно фильтр
срабатывает, если ссылка указывает на URL, начинающийся с
http.
$.featherlight.defaults.contentFilters.iframe = function (link) {
if (link.match(/^https?:\/\//)) {
return $('<iframe>', {src: link, frameborder: 0, width: '100%', height: '100%'});
}
};html Обрабатывает внутренние
элементы страницы, например, блоки, определённые селекторами. Возвращает
jQuery-объект выбранного содержимого.
$.featherlight.defaults.contentFilters.html = function (link, $link) {
if (link[0] === '#') {
return $(link).clone().show();
}
};contentFilters можно расширять собственными функциями
для обработки нестандартных типов данных, например, видео или SVG.
Важный момент: фильтры вызываются последовательно в порядке перечисления
в объекте. Featherlight использует первый фильтр, который возвращает
ненулевое значение.
Пример фильтра для видео:
$.featherlight.defaults.contentFilters.video = function (link) {
if (link.match(/\.(mp4|webm|ogg)$/i)) {
return $('<video>', {controls: true, src: link, width: '100%'});
}
};
После добавления этого фильтра, любые ссылки на видеофайлы автоматически будут открываться внутри модального окна с HTML5-плеером.
Порядок ключей в объекте contentFilters влияет на
приоритет фильтров. Featherlight проверяет их последовательно: первый
подходящий фильтр блокирует выполнение последующих. Это позволяет
реализовать точную логику отображения контента.
$('a.lightbox').featherlight({
contentFilters: {
image: $.featherlight.defaults.contentFilters.image,
video: $.featherlight.defaults.contentFilters.video,
html: $.featherlight.defaults.contentFilters.html
}
});
$.featherlight.defaults.contentFilters.image = function (link) {
// Добавлена обработка WebP и аватарок
if (link.match(/\.(png|jpg|jpeg|gif|webp|avatar)$/i)) {
return $('<img>').attr('src', link).addClass('lightbox-image');
}
};
$.featherlight.defaults.contentFilters.ajax = function (link) {
return $.get(link);
};
undefined или null,
Featherlight продолжает проверку следующих фильтров.contentFilters управляет преобразованием контента перед
отображением.Эффективное использование contentFilters обеспечивает
гибкость Featherlight и позволяет создавать лёгкие, адаптивные модальные
окна для любых типов контента.