2026-03-17 13:31:18 -07:00

142 lines
2.9 KiB
JavaScript
Executable File

/*
* Copyright 2005 Tridium, Inc. All Rights Reserved.
*/
/**
* Tree.
*
* @author Andy Frank
* @creation 26 Jul 06
* @version $Revision$ $Date$
* @since Baja 1.0
*/
// Image locations
var imgFolderClosed = "/ord?file:^tree/folderClosed.png";
var imgFolderOpen = "/ord?file:^tree/folderOpen.png";
var imgExpand = "/ord?file:^tree/expand.png";
var imgCollapse = "/ord?file:^tree/collapse.png";
/**
* Node is used to build the initial tree structure.
*/
function Node(name, href, target)
{
this.name = name;
this.href = href;
this.target = target;
this.kids = new Array();
}
/**
* Initialize the tree in the DOM using this node structure.
*/
function initTree(root)
{
var tree = document.getElementById("tree");
addTreeNode(0, tree, root);
}
/**
* Add a new node to the tree under this parent.
*/
function addTreeNode(level, parent, node)
{
var elem = createTreeNode(level, node)
parent.appendChild(elem);
for (var i=0; i<node.kids.length; i++)
addTreeNode(level+1, elem, node.kids[i]);
}
/**
* Return a new DOMElement for this Node.
*/
function createTreeNode(level, node)
{
var html = "";
if (level > 0)
{
html += "<img src='" + imgExpand + "' class='expander' ";
html += " onclick='toggle(event);' alt='' />";
html += "<img src='" + imgFolderClosed + "' alt='' /> ";
}
else
{
html += "<img src='" + imgFolderOpen + "' alt='' /> ";
}
html += "<a href='" + node.href + "'"
if (node.target != null)
html += " target='" + node.target + "'";
html += ">" + node.name + "</a>";
var elem = document.createElement("div");
elem.innerHTML = html;
if (level > 1)
{
elem.style.display = "none";
elem.style.visibility = "hidden";
elem.style.paddingLeft = "16px";
}
return elem;
}
/**
* Toggle the expansion state for this node.
*/
function toggle(event)
{
var target = (event.target) ? event.target: window.event.srcElement;
var img = target;
var fol = img.nextSibling;
var div = img.parentNode;
var kids = div.childNodes;
if (endsWith(target.src, imgExpand))
{
// Expand
img.src = imgCollapse;
fol.src = imgFolderOpen;
for (var i=0; i<kids.length; i++)
{
if (kids[i].nodeName != "DIV") continue;
kids[i].style.display = "block";
kids[i].style.visibility = "visible";
}
}
else
{
// Collapse
img.src = imgExpand;
fol.src = imgFolderClosed;
for (var i=0; i<kids.length; i++)
{
if (kids[i].nodeName != "DIV") continue;
kids[i].style.display = "none";
kids[i].style.visibility = "hidden";
}
}
}
/**
* Return true if str ends with suffix.
*/
function endsWith(str, suffix)
{
// If suffix is longer, not possible
if (str.length < suffix.length) return false;
// Cut off and compare
var sub = str.substring(str.length - suffix.length);
return (sub == suffix);
}