in optaplanner-docs/src/modules/ROOT/images/website/jstree/jstree.js [2419:2628]
redraw_node : function (node, deep, is_callback, force_render) {
var obj = this.get_node(node),
par = false,
ind = false,
old = false,
i = false,
j = false,
k = false,
c = '',
d = document,
m = this._model.data,
f = false,
s = false,
tmp = null,
t = 0,
l = 0,
has_children = false,
last_sibling = false;
if(!obj) { return false; }
if(obj.id === $.jstree.root) { return this.redraw(true); }
deep = deep || obj.children.length === 0;
node = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + ("0123456789".indexOf(obj.id[0]) !== -1 ? '\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\$&') : obj.id.replace($.jstree.idregex,'\\$&')) ); //, this.element);
if(!node) {
deep = true;
//node = d.createElement('LI');
if(!is_callback) {
par = obj.parent !== $.jstree.root ? $('#' + obj.parent.replace($.jstree.idregex,'\\$&'), this.element)[0] : null;
if(par !== null && (!par || !m[obj.parent].state.opened)) {
return false;
}
ind = $.inArray(obj.id, par === null ? m[$.jstree.root].children : m[obj.parent].children);
}
}
else {
node = $(node);
if(!is_callback) {
par = node.parent().parent()[0];
if(par === this.element[0]) {
par = null;
}
ind = node.index();
}
// m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage
if(!deep && obj.children.length && !node.children('.jstree-children').length) {
deep = true;
}
if(!deep) {
old = node.children('.jstree-children')[0];
}
f = node.children('.jstree-anchor')[0] === document.activeElement;
node.remove();
//node = d.createElement('LI');
//node = node[0];
}
node = this._data.core.node.cloneNode(true);
// node is DOM, deep is boolean
c = 'jstree-node ';
for(i in obj.li_attr) {
if(obj.li_attr.hasOwnProperty(i)) {
if(i === 'id') { continue; }
if(i !== 'class') {
node.setAttribute(i, obj.li_attr[i]);
}
else {
c += obj.li_attr[i];
}
}
}
if(!obj.a_attr.id) {
obj.a_attr.id = obj.id + '_anchor';
}
node.setAttribute('aria-selected', !!obj.state.selected);
node.setAttribute('aria-level', obj.parents.length);
node.setAttribute('aria-labelledby', obj.a_attr.id);
if(obj.state.disabled) {
node.setAttribute('aria-disabled', true);
}
for(i = 0, j = obj.children.length; i < j; i++) {
if(!m[obj.children[i]].state.hidden) {
has_children = true;
break;
}
}
if(obj.parent !== null && m[obj.parent] && !obj.state.hidden) {
i = $.inArray(obj.id, m[obj.parent].children);
last_sibling = obj.id;
if(i !== -1) {
i++;
for(j = m[obj.parent].children.length; i < j; i++) {
if(!m[m[obj.parent].children[i]].state.hidden) {
last_sibling = m[obj.parent].children[i];
}
if(last_sibling !== obj.id) {
break;
}
}
}
}
if(obj.state.hidden) {
c += ' jstree-hidden';
}
if (obj.state.loading) {
c += ' jstree-loading';
}
if(obj.state.loaded && !has_children) {
c += ' jstree-leaf';
}
else {
c += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed';
node.setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) );
}
if(last_sibling === obj.id) {
c += ' jstree-last';
}
node.id = obj.id;
node.className = c;
c = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : '');
for(j in obj.a_attr) {
if(obj.a_attr.hasOwnProperty(j)) {
if(j === 'href' && obj.a_attr[j] === '#') { continue; }
if(j !== 'class') {
node.childNodes[1].setAttribute(j, obj.a_attr[j]);
}
else {
c += ' ' + obj.a_attr[j];
}
}
}
if(c.length) {
node.childNodes[1].className = 'jstree-anchor ' + c;
}
if((obj.icon && obj.icon !== true) || obj.icon === false) {
if(obj.icon === false) {
node.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden';
}
else if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) {
node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom';
}
else {
node.childNodes[1].childNodes[0].style.backgroundImage = 'url("'+obj.icon+'")';
node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center';
node.childNodes[1].childNodes[0].style.backgroundSize = 'auto';
node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom';
}
}
if(this.settings.core.force_text) {
node.childNodes[1].appendChild(d.createTextNode(obj.text));
}
else {
node.childNodes[1].innerHTML += obj.text;
}
if(deep && obj.children.length && (obj.state.opened || force_render) && obj.state.loaded) {
k = d.createElement('UL');
k.setAttribute('role', 'group');
k.className = 'jstree-children';
for(i = 0, j = obj.children.length; i < j; i++) {
k.appendChild(this.redraw_node(obj.children[i], deep, true));
}
node.appendChild(k);
}
if(old) {
node.appendChild(old);
}
if(!is_callback) {
// append back using par / ind
if(!par) {
par = this.element[0];
}
for(i = 0, j = par.childNodes.length; i < j; i++) {
if(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) {
tmp = par.childNodes[i];
break;
}
}
if(!tmp) {
tmp = d.createElement('UL');
tmp.setAttribute('role', 'group');
tmp.className = 'jstree-children';
par.appendChild(tmp);
}
par = tmp;
if(ind < par.childNodes.length) {
par.insertBefore(node, par.childNodes[ind]);
}
else {
par.appendChild(node);
}
if(f) {
t = this.element[0].scrollTop;
l = this.element[0].scrollLeft;
node.childNodes[1].focus();
this.element[0].scrollTop = t;
this.element[0].scrollLeft = l;
}
}
if(obj.state.opened && !obj.state.loaded) {
obj.state.opened = false;
setTimeout($.proxy(function () {
this.open_node(obj.id, false, 0);
}, this), 0);
}
return node;
},