Umbrella JS — это лёгкая библиотека для работы с DOM, предоставляющая удобный API для манипуляций с элементами, событиями, AJAX и анимациями. Одним из ключевых аспектов расширяемости Umbrella является система плагинов, позволяющая добавлять новые методы и функциональность без изменения исходного кода библиотеки.
Плагин в Umbrella JS представляет собой функцию, которая расширяет
прототип объекта u(). Все методы, добавляемые через плагин,
становятся доступными для коллекций элементов, возвращаемых
u(). Основная идея заключается в том, что каждый плагин
получает объект u.fn, где хранятся методы для расширения, и
добавляет к нему новые функции.
Пример базовой структуры плагина:
u.fn.myPlugin = function(options) {
// Логика плагина
this.each(function(el) {
el.textContent = options.text || 'Default';
});
return this; // для цепочек вызовов
};
Ключевые моменты:
each.this обеспечивает поддержку цепочек
вызовов.Umbrella JS не имеет встроенного менеджера плагинов, поэтому распространение и подключение производится как обычный JavaScript-модуль. Существует два основных подхода:
Прямое подключение через
<script> Файл плагина размещается после
подключения Umbrella JS:
<script src="umbrella.min.js"></script>
<script src="myPlugin.js"></script>
После этого методы плагина становятся сразу доступными для всех
объектов u().
Использование модулей ES6 или CommonJS Плагин можно оформить как экспортируемую функцию, которую затем импортируют в основном скрипте:
// myPlugin.js
export default function(u) {
u.fn.highlight = function(color = 'yellow') {
this.each(el => el.style.backgroundColor = color);
return this;
};
}
// main.js
import u from 'umbrella-js';
import addHighlight from './myPlugin.js';
addHighlight(u);
u('p').highlight('lightblue');
Этот подход удобен для проектов с модульной архитектурой, позволяя изолировать плагины и контролировать их загрузку.
Для систематического создания плагинов рекомендуется придерживаться стандартной структуры:
u.fn.this — обязательный для
цепочек вызовов.Пример расширенного плагина:
u.fn.tooltip = function(options = {}) {
const defaults = { color: 'black', background: 'yellow', delay: 300 };
const settings = { ...defaults, ...options };
this.each(el => {
el.addEventListener('mouseenter', () => {
const tooltip = document.createElement('div');
tooltip.textContent = el.getAttribute('data-tooltip');
tooltip.style.position = 'absolute';
tooltip.style.color = settings.color;
tooltip.style.background = settings.background;
tooltip.style.transition = `opacity ${settings.delay}ms`;
document.body.appendChild(tooltip);
// позиционирование
});
el.addEventListener('mouseleave', () => {
const tooltip = document.querySelector('div.tooltip');
if (tooltip) document.body.removeChild(tooltip);
});
});
return this;
};
При разработке плагинов важно проверять их совместимость с различными версиями Umbrella JS. Рекомендуется:
each, on,
off, addClass из базового API.u('nonexistent')).Тестирование можно проводить как через простые HTML-страницы, так и через фреймворки для unit-тестирования (например, Jest), создавая виртуальный DOM.
Для масштабного использования плагины можно публиковать как npm-пакеты. В этом случае они могут быть импортированы в проект напрямую:
npm install umbrella-tooltip
И подключены:
import u from 'umbrella-js';
import 'umbrella-tooltip';
u('.has-tooltip').tooltip({ background: 'blue' });
Для более быстрой интеграции возможно размещение плагина на CDN,
позволяя подключать его через <script> без установки
npm.
this в конце
метода.Эти правила делают плагины Umbrella JS удобными для распространения, масштабирования и повторного использования в проектах любой сложности.