123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /**
- * ### 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'], factory);
- }
- else if(typeof exports === 'object') {
- factory(require('jquery'), require('jstree'));
- }
- 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);
- };
- };
- }));
|