/**
|
* ### Sort plugin
|
*
|
* Automatically sorts all siblings in the tree according to a sorting function.
|
*/
|
/*globals jQuery, define, exports, require */
|
(function (factory) {
|
"use strict";
|
if (typeof define === 'function' && define.amd) {
|
define('jstree.sort', ['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.sort) { return; }
|
|
/**
|
* the settings function used to sort the nodes.
|
* It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`.
|
* @name $.jstree.defaults.sort
|
* @plugin sort
|
*/
|
$.jstree.defaults.sort = function (a, b) {
|
//return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b);
|
return this.get_text(a) > this.get_text(b) ? 1 : -1;
|
};
|
$.jstree.plugins.sort = function (options, parent) {
|
this.bind = function () {
|
parent.bind.call(this);
|
this.element
|
.on("model.jstree", function (e, data) {
|
this.sort(data.parent, true);
|
}.bind(this))
|
.on("rename_node.jstree create_node.jstree", function (e, data) {
|
this.sort(data.parent || data.node.parent, false);
|
this.redraw_node(data.parent || data.node.parent, true);
|
}.bind(this))
|
.on("move_node.jstree copy_node.jstree", function (e, data) {
|
this.sort(data.parent, false);
|
this.redraw_node(data.parent, true);
|
}.bind(this));
|
};
|
/**
|
* used to sort a node's children
|
* @private
|
* @name sort(obj [, deep])
|
* @param {mixed} obj the node
|
* @param {Boolean} deep if set to `true` nodes are sorted recursively.
|
* @plugin sort
|
* @trigger search.jstree
|
*/
|
this.sort = function (obj, deep) {
|
var i, j;
|
obj = this.get_node(obj);
|
if(obj && obj.children && obj.children.length) {
|
obj.children.sort(this.settings.sort.bind(this));
|
if(deep) {
|
for(i = 0, j = obj.children_d.length; i < j; i++) {
|
this.sort(obj.children_d[i], false);
|
}
|
}
|
}
|
};
|
};
|
|
// include the sort plugin by default
|
// $.jstree.defaults.plugins.push("sort");
|
}));
|