baseframe-js
Version:
A suite of useful Javascript plugins and functions to help with Front-end Development on websites
59 lines (58 loc) • 2.14 kB
JavaScript
import $ from 'cash-dom';
import { lowercaseFirstLetter } from '../util/helpers';
import Store from './Store';
const checkIfParamsExist = (setParams, params, notify = true) => {
for (let k in params) {
if (!({}).hasOwnProperty.call(setParams, k)) {
notify && console.log(k, 'is not a property that can be used');
delete params[k];
}
}
return params;
};
const extendPlugin = (Plugin, notify, Lib) => {
const DataName = Plugin.pluginName;
const pluginName = lowercaseFirstLetter(DataName);
Plugin.Constructor = Plugin;
Lib.fn.extend({
[pluginName]: function (params) {
const s = this;
return s.each(function (index) {
const instance = Store(this, DataName);
if (!instance) {
const plugin = new Plugin(this, params, index);
Store(this, DataName, plugin);
}
else {
const canUpdate = instance.handleUpdate && typeof instance.handleUpdate === 'function';
if (typeof params === 'string') {
if (params === 'remove') {
Plugin.remove(this);
}
if (params === 'update' && canUpdate) {
instance.handleUpdate();
}
return;
}
checkIfParamsExist(instance.params, params, notify);
Lib.extend(instance.params, params);
if (canUpdate) {
instance.handleUpdate();
}
notify && console.log(`Params updated`, instance.params);
}
});
}
});
};
const libraryExtend = (Plugins, notify = false, Lib = $) => {
if (Plugins instanceof Array) {
for (let i = 0, l = Plugins.length; i < l; i++) {
extendPlugin(Plugins[i], notify, Lib);
}
}
else {
extendPlugin(Plugins, notify, Lib);
}
};
export default libraryExtend;