in optaplanner-docs/src/modules/ROOT/images/website/jstree/jstree.js [3827:3909]
create_node : function (par, node, pos, callback, is_loaded) {
if(par === null) { par = $.jstree.root; }
par = this.get_node(par);
if(!par) { return false; }
pos = pos === undefined ? "last" : pos;
if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) {
return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); });
}
if(!node) { node = { "text" : this.get_string('New node') }; }
if(typeof node === "string") {
node = { "text" : node };
} else {
node = $.extend(true, {}, node);
}
if(node.text === undefined) { node.text = this.get_string('New node'); }
var tmp, dpc, i, j;
if(par.id === $.jstree.root) {
if(pos === "before") { pos = "first"; }
if(pos === "after") { pos = "last"; }
}
switch(pos) {
case "before":
tmp = this.get_node(par.parent);
pos = $.inArray(par.id, tmp.children);
par = tmp;
break;
case "after" :
tmp = this.get_node(par.parent);
pos = $.inArray(par.id, tmp.children) + 1;
par = tmp;
break;
case "inside":
case "first":
pos = 0;
break;
case "last":
pos = par.children.length;
break;
default:
if(!pos) { pos = 0; }
break;
}
if(pos > par.children.length) { pos = par.children.length; }
if(!node.id) { node.id = true; }
if(!this.check("create_node", node, par, pos)) {
this.settings.core.error.call(this, this._data.core.last_error);
return false;
}
if(node.id === true) { delete node.id; }
node = this._parse_model_from_json(node, par.id, par.parents.concat());
if(!node) { return false; }
tmp = this.get_node(node);
dpc = [];
dpc.push(node);
dpc = dpc.concat(tmp.children_d);
this.trigger('model', { "nodes" : dpc, "parent" : par.id });
par.children_d = par.children_d.concat(dpc);
for(i = 0, j = par.parents.length; i < j; i++) {
this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc);
}
node = tmp;
tmp = [];
for(i = 0, j = par.children.length; i < j; i++) {
tmp[i >= pos ? i+1 : i] = par.children[i];
}
tmp[pos] = node.id;
par.children = tmp;
this.redraw_node(par, true);
/**
* triggered when a node is created
* @event
* @name create_node.jstree
* @param {Object} node
* @param {String} parent the parent's ID
* @param {Number} position the position of the new node among the parent's children
*/
this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos });
if(callback) { callback.call(this, this.get_node(node)); }
return node.id;
},