//**************************************************************** // 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 // // DvH: Dec 2000 - Made some minor changes to support external // references // Definition of class Folder // ***************************************************************** function Folder(folderDescription, tagName, hreference) //constructor { //constant data this.desc = folderDescription this.tagName = tagName 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.png" 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.png" else folder.nodeImg.src = "ftv2mnode.png" folder.iconImg.src = "ftv2folderopen.png" for (i=0; i 0) auxEv = "" else auxEv = "" if (level>0) if (lastNode) //the last 'brother' in the children array { this.renderOb(leftSide + auxEv + "") // leftSide = leftSide + "" this.isLastNode = 1 } else { this.renderOb(leftSide + auxEv + "") leftSide = leftSide + "" 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("") } if (browserVersion == 3) { doc.write("
") } doc.write("\n") doc.write("\n\n") doc.write("\n
") doc.write(leftSide) this.outputLink() doc.write("") doc.write("") if (USETEXTLINKS) { this.outputLink() doc.write(this.desc + "") } else doc.write(this.desc) /*! if (this.tagName!="") { doc.write(" [external]") } */ doc.write("
\n") if (browserVersion == 2) { doc.write("") } if (browserVersion == 3) { doc.write("
") } 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 } else if (browserVersion == 3) { this.navObj = doc.getElementById("folder"+this.id) this.iconImg = doc.images.namedItem("folderIcon"+this.id) this.nodeImg = doc.images.namedItem("nodeIcon"+this.id) } } function outputFolderLink() { if (this.hreference) { doc.write(" 0) doc.write("onClick='javascript:clickOnFolder("+this.id+")'") doc.write(">") } else doc.write("") } 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, tagName, itemLink) // Constructor { // constant data this.desc = itemDescription this.tagName = tagName this.link = itemLink this.id = -1 //initialized in initalize() this.navObj = 0 //initialized in render() this.iconImg = 0 //initialized in render() this.iconSrc = "ftv2doc.png" // methods this.initialize = initializeItem this.createIndex = createEntryIndex this.hide = hideItem this.display = display this.renderOb = drawItem this.totalHeight = totalHeight } function hideItem() { if (browserVersion == 1 || browserVersion == 3) { 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 + "") leftSide = leftSide + "" } else { this.renderOb(leftSide + "") leftSide = leftSide + "" } else this.renderOb("") } function drawItem(leftSide) { if (browserVersion == 2) doc.write("") if (browserVersion == 3) doc.write("
") doc.write("\n\n") doc.write("\n
") doc.write(leftSide) if (this.link!="") { doc.write("") } doc.write("") if (this.link!="") { doc.write("") } doc.write("") if (USETEXTLINKS && this.link!="") doc.write("" + this.desc + "") else doc.write(this.desc) /*! if (this.tagName!="") { doc.write(" [external]"); } */ doc.write("\n
\n") if (browserVersion == 2) doc.write("") if (browserVersion == 3) doc.write("
") 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 } else if (browserVersion == 3) { this.navObj = doc.getElementById("item"+this.id) this.iconImg = doc.images.namedItem("itemIcon"+this.id) } } // Methods common to both objects (pseudo-inheritance) // ******************************************************** function display() { if (browserVersion == 1 || browserVersion == 3) 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 if(navigator.userAgent.toLowerCase().indexOf('gecko') != -1) browserVersion = 3 //mozilla else browserVersion = 0 //other foldersTree.initialize(0, 1, "") foldersTree.display() if (browserVersion > 0) { if(browserVersion != 3) doc.write(" ") // close the whole tree clickOnNode(0) // open the root folder clickOnNode(0) } } // Auxiliary Functions for Folder-Treee backward compatibility // ********************************************************* function gFld(description, tagName, hreference) { folder = new Folder(description, tagName, hreference) return folder } function gLnk(description, tagName, linkData) { fullLink = "" if (linkData!="") { fullLink = "'"+linkData+"' target=\"basefrm\"" } linkItem = new Item(description, tagName, 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