blob: 280e6de160550743ccdff53ff17af6846b7c4a7c [file] [log] [blame]
// Copyright (c) 2000-2019 Ericsson Telecom AB Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function JsTreeUtils() {
"use strict";
this.getPath = function(node) {
var path = [];
var strpath = "";
if (node.parents == undefined) {
return {"path": path, "strpath": strpath};
}
var level = node.parents.length;
var parent = $("#" + node.id);
path.unshift(parent.parent().children().index(parent[0]));
strpath = node.text;
for (var i = 0; i < level; ++i) {
parent = parent.parent().parent();
if (parent.children()[1] != undefined) {
path.unshift(parent.parent().children().index(parent[0]));
strpath = parent.children()[1].text + "." + strpath;
}
}
return {"path": path, "strpath": strpath};
};
function findOpenNodesInList(tree, nodes, open, path) {
for (var i = 0; i < nodes.length; ++i) {
path.push(i);
if (tree.jstree("is_open", nodes[i])) {
open.push(mcopy(path));
findOpenNodesInList(tree, tree.jstree("get_node", nodes[i]).children, open, path);
}
path.pop();
}
}
this.findOpenNodes = function(tree) {
var id = "#";
var open = [];
var path = [];
var children = tree.jstree("get_node", "#").children;
if (children != undefined) {
findOpenNodesInList(tree, children, open, path);
}
return open;
};
this.openNodes = function(tree, pathList) {
if (pathList != undefined) {
for (var i = 0; i < pathList.length; ++i) {
var path = mcopy(pathList[i]);
path.push(0);
this.expandPath(tree, path);
}
}
};
this.getNodeIdFromPath = function(tree, path) {
var id = "#";
for (var i = 0; i < path.length; ++i) {
var children = tree.jstree("get_node", id).children;
if ((id !== "#" && tree.jstree("is_closed", id)) || children == undefined || children[path[i]] == undefined) {
return false;
}
id = children[path[i]];
}
return id;
};
this.getLastNodeIdFromPath = function(tree, path) {
var id = "#";
for (var i = 0; i < path.length; ++i) {
var children = tree.jstree("get_node", id).children;
if ((id !== "#" && tree.jstree("is_closed", id)) || children == undefined || children[path[i]] == undefined) {
break;
}
id = children[path[i]];
}
return id;
};
this.expandPath = function(tree, path) {
var id = "#";
for (var i = 0; i < path.length; ++i) {
if (id !== "#" && tree.jstree("is_closed", id)) {
tree.jstree("open_node", id);
}
var children = tree.jstree("get_node", id).children;
if ((id !== "#" && tree.jstree("is_closed", id)) || children == undefined || children[path[i]] == undefined) {
break;
}
id = children[path[i]];
}
return id;
};
this.getPathOfSelection = function(tree) {
return this.getPath(tree.jstree("get_node", tree.jstree("get_selected"))).path;
};
this.isNodeFromTree = function(node, tree) {
return tree.jstree("get_node", node.id);
};
this.isNodeIdFromTree = function(id, tree) {
return tree.jstree("get_node", id);
};
this.isRoot = function(node) {
return node.id === "#";
};
this.getDepth = function(node, tree) {
return this.getPath(tree.jstree("get_node", node.id)).path.length;
};
this.hasSameParentInTree = function(node1, node2, tree) {
var path1 = this.getPath(tree.jstree("get_node", node1.id)).path;
var path2 = this.getPath(tree.jstree("get_node", node2.id)).path;
return this.isNodeFromTree(node1, tree) && this.isNodeFromTree(node2, tree) && ((path1.length === 1 && path2.length === 1) || (path1[path1.length - 2] === path2[path2.length - 2]));
};
this.isTheParentOfNode = function(node, parent, tree) {
// we could do something similar in the function above... does it work if the parent is "#"?
return $("#" + node.id).parent().parent()[0].id === parent.id;
};
this.getIndexOfNode = function(node, tree) {
var path = this.getPath(tree.jstree("get_node", node.id)).path;
return path[path.length - 1];
};
}