zhaojs
2023-06-28 ae644863e2549627c9762604ed72d6b3a1d9374c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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;
    }
};