diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2000-11-26 14:55:14 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2000-11-26 14:55:14 (GMT) |
commit | a1995ea7b217edfe0a6ddf3d60ea7bde1e23c1d7 (patch) | |
tree | 0bbfa006a4c63e8fe48b3d0022699cffaea24b47 /src/treeview.js | |
parent | ecaf7fbfed68c23e118e564d01a405db24ca9124 (diff) | |
download | Doxygen-a1995ea7b217edfe0a6ddf3d60ea7bde1e23c1d7.zip Doxygen-a1995ea7b217edfe0a6ddf3d60ea7bde1e23c1d7.tar.gz Doxygen-a1995ea7b217edfe0a6ddf3d60ea7bde1e23c1d7.tar.bz2 |
Release-1.2.3-20001126
Diffstat (limited to 'src/treeview.js')
-rw-r--r-- | src/treeview.js | 472 |
1 files changed, 472 insertions, 0 deletions
diff --git a/src/treeview.js b/src/treeview.js new file mode 100644 index 0000000..8fd91b1 --- /dev/null +++ b/src/treeview.js @@ -0,0 +1,472 @@ +//**************************************************************** +// You are free to copy the "Folder-Tree" script as long as you +// keep this copyright notice: +// Script found in: http://www.geocities.com/Paris/LeftBank/2178/ +// Author: Marcelino Alves Martins (martins@hks.com) December '97. +//**************************************************************** + +//Log of changes: +// 17 Feb 98 - Fix initialization flashing problem with Netscape +// +// 27 Jan 98 - Root folder starts open; support for USETEXTLINKS; +// make the ftien4 a js file +// + +// Definition of class Folder +// ***************************************************************** + +function Folder(folderDescription, hreference) //constructor +{ + //constant data + this.desc = folderDescription + this.hreference = hreference + this.id = -1 + this.navObj = 0 + this.iconImg = 0 + this.nodeImg = 0 + this.isLastNode = 0 + + //dynamic data + this.isOpen = true + this.iconSrc = "ftv2folderopen.gif" + this.children = new Array + this.nChildren = 0 + + //methods + this.initialize = initializeFolder + this.setState = setStateFolder + this.addChild = addChild + this.createIndex = createEntryIndex + this.hide = hideFolder + this.display = display + this.renderOb = drawFolder + this.totalHeight = totalHeight + this.subEntries = folderSubEntries + this.outputLink = outputFolderLink +} + +function setStateFolder(isOpen) +{ + var subEntries + var totalHeight + var fIt = 0 + var i=0 + + if (isOpen == this.isOpen) + return + + if (browserVersion == 2) + { + totalHeight = 0 + for (i=0; i < this.nChildren; i++) + totalHeight = totalHeight + this.children[i].navObj.clip.height + subEntries = this.subEntries() + if (this.isOpen) + totalHeight = 0 - totalHeight + for (fIt = this.id + subEntries + 1; fIt < nEntries; fIt++) + indexOfEntries[fIt].navObj.moveBy(0, totalHeight) + } + this.isOpen = isOpen + propagateChangesInState(this) +} + +function propagateChangesInState(folder) +{ + var i=0 + + if (folder.isOpen) + { + if (folder.nodeImg) + if (folder.isLastNode) + folder.nodeImg.src = "ftv2mlastnode.gif" + else + folder.nodeImg.src = "ftv2mnode.gif" + folder.iconImg.src = "ftv2folderopen.gif" + for (i=0; i<folder.nChildren; i++) + folder.children[i].display() + } + else + { + if (folder.nodeImg) + if (folder.isLastNode) + folder.nodeImg.src = "ftv2plastnode.gif" + else + folder.nodeImg.src = "ftv2pnode.gif" + folder.iconImg.src = "ftv2folderclosed.gif" + for (i=0; i<folder.nChildren; i++) + folder.children[i].hide() + } +} + +function hideFolder() +{ + if (browserVersion == 1) { + if (this.navObj.style.display == "none") + return + this.navObj.style.display = "none" + } else { + if (this.navObj.visibility == "hidden") + return + this.navObj.visibility = "hidden" + } + + this.setState(0) +} + +function initializeFolder(level, lastNode, leftSide) +{ +var j=0 +var i=0 +var numberOfFolders +var numberOfDocs +var nc + + nc = this.nChildren + + this.createIndex() + + var auxEv = "" + + if (browserVersion > 0) + auxEv = "<a href='javascript:clickOnNode("+this.id+")'>" + else + auxEv = "<a>" + + if (level>0) + if (lastNode) //the last 'brother' in the children array + { + this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='ftv2mlastnode.gif' width=16 height=22 border=0></a>") + leftSide = leftSide + "<img src='ftv2blank.gif' width=16 height=22>" + this.isLastNode = 1 + } + else + { + this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='ftv2mnode.gif' width=16 height=22 border=0></a>") + leftSide = leftSide + "<img src='ftv2vertline.gif' width=16 height=22>" + this.isLastNode = 0 + } + else + this.renderOb("") + + if (nc > 0) + { + level = level + 1 + for (i=0 ; i < this.nChildren; i++) + { + if (i == this.nChildren-1) + this.children[i].initialize(level, 1, leftSide) + else + this.children[i].initialize(level, 0, leftSide) + } + } +} + +function drawFolder(leftSide) +{ + if (browserVersion == 2) { + if (!doc.yPos) + doc.yPos=8 + doc.write("<layer id='folder" + this.id + "' top=" + doc.yPos + " visibility=hidden>") + } + + doc.write("\n<table ") + if (browserVersion == 1) + doc.write(" id='folder" + this.id + "' style='position:block;' ") + doc.write(" border=0 cellspacing=0 cellpadding=0>") + doc.write("\n<tr><td>") + doc.write(leftSide) + this.outputLink() + doc.write("<img name='folderIcon" + this.id + "' ") + doc.write("src='" + this.iconSrc+"' border=0></a>") + doc.write("</td>\n<td valign=middle nowrap>") + if (USETEXTLINKS) + { + this.outputLink() + doc.write(this.desc + "</a>") + } + else + doc.write(this.desc) + doc.write("</td>") + doc.write("\n</table>\n") + + if (browserVersion == 2) { + doc.write("</layer>") + } + + if (browserVersion == 1) { + this.navObj = doc.all["folder"+this.id] + this.iconImg = doc.all["folderIcon"+this.id] + this.nodeImg = doc.all["nodeIcon"+this.id] + } else if (browserVersion == 2) { + this.navObj = doc.layers["folder"+this.id] + this.iconImg = this.navObj.document.images["folderIcon"+this.id] + this.nodeImg = this.navObj.document.images["nodeIcon"+this.id] + doc.yPos=doc.yPos+this.navObj.clip.height + } +} + +function outputFolderLink() +{ + if (this.hreference) + { + doc.write("<a href='" + this.hreference + "' TARGET=\"basefrm\" ") + if (browserVersion > 0) + doc.write("onClick='javascript:clickOnFolder("+this.id+")'") + doc.write(">") + } + else + doc.write("<a>") +} + +function addChild(childNode) +{ + this.children[this.nChildren] = childNode + this.nChildren++ + return childNode +} + +function folderSubEntries() +{ + var i = 0 + var se = this.nChildren + + for (i=0; i < this.nChildren; i++){ + if (this.children[i].children) //is a folder + se = se + this.children[i].subEntries() + } + + return se +} + + +// Definition of class Item (a document or link inside a Folder) +// ************************************************************* + +function Item(itemDescription, itemLink) // Constructor +{ + // constant data + this.desc = itemDescription + this.link = itemLink + this.id = -1 //initialized in initalize() + this.navObj = 0 //initialized in render() + this.iconImg = 0 //initialized in render() + this.iconSrc = "ftv2doc.gif" + + // methods + this.initialize = initializeItem + this.createIndex = createEntryIndex + this.hide = hideItem + this.display = display + this.renderOb = drawItem + this.totalHeight = totalHeight +} + +function hideItem() +{ + if (browserVersion == 1) { + if (this.navObj.style.display == "none") + return + this.navObj.style.display = "none" + } else { + if (this.navObj.visibility == "hidden") + return + this.navObj.visibility = "hidden" + } +} + +function initializeItem(level, lastNode, leftSide) +{ + this.createIndex() + + if (level>0) + if (lastNode) //the last 'brother' in the children array + { + this.renderOb(leftSide + "<img src='ftv2lastnode.gif' width=16 height=22>") + leftSide = leftSide + "<img src='ftv2blank.gif' width=16 height=22>" + } + else + { + this.renderOb(leftSide + "<img src='ftv2node.gif' width=16 height=22>") + leftSide = leftSide + "<img src='ftv2vertline.gif' width=16 height=22>" + } + else + this.renderOb("") +} + +function drawItem(leftSide) +{ + if (browserVersion == 2) + doc.write("<layer id='item" + this.id + "' top=" + doc.yPos + " visibility=hidden>") + + doc.write("\n<table ") + if (browserVersion == 1) + doc.write(" id='item" + this.id + "' style='position:block;' ") + doc.write(" border=0 cellspacing=0 cellpadding=0>\n") + doc.write("<tr><td>") + doc.write(leftSide) + if (this.link!="") + { + doc.write("<a href=" + this.link + ">") + } + doc.write("<img id='itemIcon"+this.id+"' ") + doc.write("src='"+this.iconSrc+"' border=0>") + if (this.link!="") + { + doc.write("</a>") + } + doc.write("</td>\n<td valign=middle nowrap>") + if (USETEXTLINKS && this.link!="") + doc.write("<a href=" + this.link + ">" + this.desc + "</a>") + else + doc.write(this.desc) + doc.write("\n</table>\n") + + if (browserVersion == 2) + doc.write("</layer>") + + if (browserVersion == 1) { + this.navObj = doc.all["item"+this.id] + this.iconImg = doc.all["itemIcon"+this.id] + } else if (browserVersion == 2) { + this.navObj = doc.layers["item"+this.id] + this.iconImg = this.navObj.document.images["itemIcon"+this.id] + doc.yPos=doc.yPos+this.navObj.clip.height + } +} + + +// Methods common to both objects (pseudo-inheritance) +// ******************************************************** + +function display() +{ + if (browserVersion == 1) + this.navObj.style.display = "block" + else + this.navObj.visibility = "show" +} + +function createEntryIndex() +{ + this.id = nEntries + indexOfEntries[nEntries] = this + nEntries++ +} + +// total height of subEntries open +function totalHeight() //used with browserVersion == 2 +{ + var h = this.navObj.clip.height + var i = 0 + + if (this.isOpen) //is a folder and _is_ open + for (i=0 ; i < this.nChildren; i++) + h = h + this.children[i].totalHeight() + + return h +} + + +// Events +// ********************************************************* + +function clickOnFolder(folderId) +{ + var clicked = indexOfEntries[folderId] + + if (!clicked.isOpen) + clickOnNode(folderId) + + return + + if (clicked.isSelected) + return +} + +function clickOnNode(folderId) +{ + var clickedFolder = 0 + var state = 0 + + clickedFolder = indexOfEntries[folderId] + state = clickedFolder.isOpen + + clickedFolder.setState(!state) //open<->close +} + +function initializeDocument() +{ + doc = document; + if (doc.all) + browserVersion = 1 //IE4 + else + if (doc.layers) + browserVersion = 2 //NS4 + else + browserVersion = 0 //other + + foldersTree.initialize(0, 1, "") + foldersTree.display() + + if (browserVersion > 0) + { + doc.write("<layer top="+indexOfEntries[nEntries-1].navObj.top+"> </layer>") + + // close the whole tree + clickOnNode(0) + // open the root folder + clickOnNode(0) + } +} + +// Auxiliary Functions for Folder-Treee backward compatibility +// ********************************************************* + +function gFld(description, hreference) +{ + folder = new Folder(description, hreference) + return folder +} + +function gLnk(target, description, linkData) +{ + fullLink = "" + + if (linkData!="") + { + if (target==0) + { + fullLink = "'"+linkData+"' target=\"basefrm\"" + } + else + { + if (target==1) + fullLink = "'http://"+linkData+"' target=_blank" + else + fullLink = "'http://"+linkData+"' target=\"basefrm\"" + } + } + + linkItem = new Item(description, fullLink) + return linkItem +} + +function insFld(parentFolder, childFolder) +{ + return parentFolder.addChild(childFolder) +} + +function insDoc(parentFolder, document) +{ + parentFolder.addChild(document) +} + +// Global variables +// **************** + +USETEXTLINKS = 1 +indexOfEntries = new Array +nEntries = 0 +doc = document +browserVersion = 0 +selectedFolder=0 |