UNPKG

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
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;