Umbrella JS — легковесная библиотека для работы с DOM, предоставляющая удобные методы для селекторов, манипуляций с элементами, событий и AJAX. Несмотря на свою компактность, она легко расширяется с помощью сторонних плагинов, позволяющих добавлять новые функции и интегрироваться с существующими инструментами.
Сторонний плагин для Umbrella JS обычно представляет собой модуль,
который расширяет прототип объекта u(). Стандартная
структура выглядит так:
(function(u){
u.fn.pluginName = function(options){
// логика плагина
return this.each(function(el){
// работа с элементом el
});
};
})(u);
Особенности:
u.fn — объект, содержащий методы для всех экземпляров
Umbrella.this для сохранения цепочек
вызовов.each гарантирует работу с каждым
элементом коллекции.u.fn.slider = function(options){
var settings = Object.assign({
interval: 3000,
autoplay: true
}, options);
return this.each(function(el){
var slides = u(el).children();
var index = 0;
function showSlide(i){
slides.forEach(function(slide, j){
slide.style.display = (i === j) ? 'block' : 'none';
});
}
if(settings.autoplay){
setInterval(function(){
index = (index + 1) % slides.length;
showSlide(index);
}, settings.interval);
}
showSlide(index);
});
};
u.fn.modal = function(options){
var settings = Object.assign({
overlay: true,
closeButton: '.close'
}, options);
return this.each(function(el){
var modal = el;
if(settings.overlay){
var overlay = document.createElement('div');
overlay.className = 'u-overlay';
document.body.appendChild(overlay);
overlay.addEventListener('click', function(){
modal.style.display = 'none';
overlay.style.display = 'none';
});
}
u(modal).find(settings.closeButton).on('click', function(){
modal.style.display = 'none';
if(settings.overlay) overlay.style.display = 'none';
});
});
};
Umbrella JS предоставляет встроенный метод u.ajax, но
для расширенной функциональности часто используют плагины. Пример —
плагин для обработки JSON с поддержкой промисов:
u.fn.loadJSON = function(url){
return u.ajax(url, { method: 'GET', responseType: 'json' })
.then(function(response){
return this.each(function(el){
el.innerHTML = JSON.stringify(response, null, 2);
});
}.bind(this));
};
Ключевые моменты:
.each можно безопасно манипулировать
DOM-элементами.bind(this) сохраняет контекст текущей коллекции.Umbrella JS совместима с большинством vanilla JS-плагинов благодаря
простой структуре. Для интеграции достаточно передавать элементы
коллекции через u():
var elements = u('.tooltip');
elements.each(function(el){
tippy(el, { content: 'Подсказка', placement: 'top' });
});
Преимущества:
Object.assign или деструктуризация позволяют задать
стандартные настройки.this после операций для возможности вызова нескольких
методов подряд.u(el).on('event', handler) обеспечивает совместимость с
Umbrella Event API.Umbrella JS версии 1.0+ гарантирует стабильное расширение плагинами,
если методы добавляются через u.fn. Новые версии могут
расширять внутренний функционал, поэтому рекомендуется:
if(!u.fn.pluginName) { ... }.Плагины для Umbrella JS идеально подходят для небольших UI-компонентов: слайдеров, модальных окон, табов, tooltip’ов и AJAX-загрузки контента. Они позволяют создавать легкие, модульные и легко расширяемые интерфейсы без привлечения громоздких библиотек.
С таким подходом код остается компактным, читабельным и полностью управляемым через Umbrella API.