123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- let plugins = [];
- const defaults = {
- initializeByDefault: true
- };
- export default {
- mount(plugin) {
- // Set default static properties
- for (let option in defaults) {
- if (defaults.hasOwnProperty(option) && !(option in plugin)) {
- plugin[option] = defaults[option];
- }
- }
- plugins.push(plugin);
- },
- pluginEvent(eventName, sortable, evt) {
- this.eventCanceled = false;
- evt.cancel = () => {
- this.eventCanceled = true;
- };
- const eventNameGlobal = eventName + 'Global';
- plugins.forEach(plugin => {
- if (!sortable[plugin.pluginName]) return;
- // Fire global events if it exists in this sortable
- if (
- sortable[plugin.pluginName][eventNameGlobal]
- ) {
- sortable[plugin.pluginName][eventNameGlobal]({ sortable, ...evt });
- }
- // Only fire plugin event if plugin is enabled in this sortable,
- // and plugin has event defined
- if (
- sortable.options[plugin.pluginName] &&
- sortable[plugin.pluginName][eventName]
- ) {
- sortable[plugin.pluginName][eventName]({ sortable, ...evt });
- }
- });
- },
- initializePlugins(sortable, el, defaults, options) {
- plugins.forEach(plugin => {
- const pluginName = plugin.pluginName;
- if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;
- let initialized = new plugin(sortable, el, sortable.options);
- initialized.sortable = sortable;
- initialized.options = sortable.options;
- sortable[pluginName] = initialized;
- // Add default options from plugin
- Object.assign(defaults, initialized.defaults);
- });
- for (let option in sortable.options) {
- if (!sortable.options.hasOwnProperty(option)) continue;
- let modified = this.modifyOption(sortable, option, sortable.options[option]);
- if (typeof(modified) !== 'undefined') {
- sortable.options[option] = modified;
- }
- }
- },
- getEventProperties(name, sortable) {
- let eventProperties = {};
- plugins.forEach(plugin => {
- if (typeof(plugin.eventProperties) !== 'function') return;
- Object.assign(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));
- });
- return eventProperties;
- },
- modifyOption(sortable, name, value) {
- let modifiedValue;
- plugins.forEach(plugin => {
- // Plugin must exist on the Sortable
- if (!sortable[plugin.pluginName]) return;
- // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin
- if (plugin.optionListeners && typeof(plugin.optionListeners[name]) === 'function') {
- modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);
- }
- });
- return modifiedValue;
- }
- };
|