0
|
1 /**
|
|
2 * ### Changed plugin
|
|
3 *
|
|
4 * 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.
|
|
5 */
|
|
6 /*globals jQuery, define, exports, require, document */
|
|
7 (function (factory) {
|
|
8 "use strict";
|
|
9 if (typeof define === 'function' && define.amd) {
|
|
10 define('jstree.changed', ['jquery','jstree'], factory);
|
|
11 }
|
|
12 else if(typeof exports === 'object') {
|
|
13 factory(require('jquery'), require('jstree'));
|
|
14 }
|
|
15 else {
|
|
16 factory(jQuery, jQuery.jstree);
|
|
17 }
|
|
18 }(function ($, jstree, undefined) {
|
|
19 "use strict";
|
|
20
|
|
21 if($.jstree.plugins.changed) { return; }
|
|
22
|
|
23 $.jstree.plugins.changed = function (options, parent) {
|
|
24 var last = [];
|
|
25 this.trigger = function (ev, data) {
|
|
26 var i, j;
|
|
27 if(!data) {
|
|
28 data = {};
|
|
29 }
|
|
30 if(ev.replace('.jstree','') === 'changed') {
|
|
31 data.changed = { selected : [], deselected : [] };
|
|
32 var tmp = {};
|
|
33 for(i = 0, j = last.length; i < j; i++) {
|
|
34 tmp[last[i]] = 1;
|
|
35 }
|
|
36 for(i = 0, j = data.selected.length; i < j; i++) {
|
|
37 if(!tmp[data.selected[i]]) {
|
|
38 data.changed.selected.push(data.selected[i]);
|
|
39 }
|
|
40 else {
|
|
41 tmp[data.selected[i]] = 2;
|
|
42 }
|
|
43 }
|
|
44 for(i = 0, j = last.length; i < j; i++) {
|
|
45 if(tmp[last[i]] === 1) {
|
|
46 data.changed.deselected.push(last[i]);
|
|
47 }
|
|
48 }
|
|
49 last = data.selected.slice();
|
|
50 }
|
|
51 /**
|
|
52 * triggered when selection changes (the "changed" plugin enhances the original event with more data)
|
|
53 * @event
|
|
54 * @name changed.jstree
|
|
55 * @param {Object} node
|
|
56 * @param {Object} action the action that caused the selection to change
|
|
57 * @param {Array} selected the current selection
|
|
58 * @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
|
|
59 * @param {Object} event the event (if any) that triggered this changed event
|
|
60 * @plugin changed
|
|
61 */
|
|
62 parent.trigger.call(this, ev, data);
|
|
63 };
|
|
64 this.refresh = function (skip_loading, forget_state) {
|
|
65 last = [];
|
|
66 return parent.refresh.apply(this, arguments);
|
|
67 };
|
|
68 };
|
|
69 })); |