zhaojs
2023-07-04 94a3257eff0174732c09f220b30d538cbe89776a
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
/**
 * ### Changed plugin
 *
 * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes.
 */
/*globals jQuery, define, exports, require, document */
(function (factory) {
    "use strict";
    if (typeof define === 'function' && define.amd) {
        define('jstree.changed', ['jquery','./jstree.js'], factory);
    }
    else if(typeof exports === 'object') {
        factory(require('jquery'), require('./jstree.js'));
    }
    else {
        factory(jQuery, jQuery.jstree);
    }
}(function ($, jstree, undefined) {
    "use strict";
 
    if($.jstree.plugins.changed) { return; }
 
    $.jstree.plugins.changed = function (options, parent) {
        var last = [];
        this.trigger = function (ev, data) {
            var i, j;
            if(!data) {
                data = {};
            }
            if(ev.replace('.jstree','') === 'changed') {
                data.changed = { selected : [], deselected : [] };
                var tmp = {};
                for(i = 0, j = last.length; i < j; i++) {
                    tmp[last[i]] = 1;
                }
                for(i = 0, j = data.selected.length; i < j; i++) {
                    if(!tmp[data.selected[i]]) {
                        data.changed.selected.push(data.selected[i]);
                    }
                    else {
                        tmp[data.selected[i]] = 2;
                    }
                }
                for(i = 0, j = last.length; i < j; i++) {
                    if(tmp[last[i]] === 1) {
                        data.changed.deselected.push(last[i]);
                    }
                }
                last = data.selected.slice();
            }
            /**
             * triggered when selection changes (the "changed" plugin enhances the original event with more data)
             * @event
             * @name changed.jstree
             * @param {Object} node
             * @param {Object} action the action that caused the selection to change
             * @param {Array} selected the current selection
             * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event
             * @param {Object} event the event (if any) that triggered this changed event
             * @plugin changed
             */
            parent.trigger.call(this, ev, data);
        };
        this.refresh = function (skip_loading, forget_state) {
            last = [];
            return parent.refresh.apply(this, arguments);
        };
    };
}));