/**
|
* ### 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);
|
};
|
};
|
}));
|