uikit
Version:
UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.
73 lines (55 loc) • 1.75 kB
JavaScript
import { $, apply, isString, mergeOptions, parents, toNode } from 'uikit-util';
export default function (UIkit) {
const DATA = UIkit.data;
UIkit.use = function (plugin) {
if (plugin.installed) {
return;
}
plugin.call(null, this);
plugin.installed = true;
return this;
};
UIkit.mixin = function (mixin, component) {
component = (isString(component) ? UIkit.component(component) : component) || this;
component.options = mergeOptions(component.options, mixin);
};
UIkit.extend = function (options) {
options = options || {};
const Super = this;
const Sub = function UIkitComponent(options) {
this._init(options);
};
Sub.prototype = Object.create(Super.prototype);
Sub.prototype.constructor = Sub;
Sub.options = mergeOptions(Super.options, options);
Sub.super = Super;
Sub.extend = Super.extend;
return Sub;
};
UIkit.update = function (element, e) {
element = element ? toNode(element) : document.body;
for (const parentEl of parents(element).reverse()) {
update(parentEl[DATA], e);
}
apply(element, (element) => update(element[DATA], e));
};
let container;
Object.defineProperty(UIkit, 'container', {
get() {
return container || document.body;
},
set(element) {
container = $(element);
},
});
function update(data, e) {
if (!data) {
return;
}
for (const name in data) {
if (data[name]._connected) {
data[name]._callUpdate(e);
}
}
}
}