//**************************************************************** // 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. // Peter Dolog (peter_dolog@yahoo.com) Jun 2002 //**************************************************************** //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 // 25 Jun 02 - Peter Dolog - Highliting position of user in a tree // Additional symbols for sequencing and different nodes // Collapsing and uncollapsing when clicking the sequencing symbols // Traffic light metaphor for annotating whether resource is ready to enter or not // Definition of class Folder // ***************************************************************** function Folder(folderDescription, hreference, color, id) //constructor { //constant data this.desc = folderDescription this.type = "F" this.hreference = hreference this.id = -1 this.navObj = 0 this.iconImg = 0 this.nodeImg = 0 this.isLastNode = 0 this.userready = color this.stateid = id //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 Conc(folderDescription, hreference, color, id) //constructor { //constant data this.desc = folderDescription this.type = "C" this.hreference = hreference this.id = -1 this.navObj = 0 this.iconImg = 0 this.nodeImg = 0 this.isLastNode = 0 this.userready = color this.stateid = id //dynamic data this.isOpen = true this.iconSrc = "ftv2conc.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 docFolder(folderDescription, hreference, color, id) //constructor { //constant data this.desc = folderDescription this.type = "D" this.hreference = hreference this.id = -1 this.navObj = 0 this.iconImg = 0 this.nodeImg = 0 this.isLastNode = 0 this.userready = color this.stateid = id //dynamic data this.isOpen = true this.iconSrc = "ftv2doc.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 //alert(folder.desc); if (folder.isOpen) { if (folder.nodeImg) if (folder.isLastNode) folder.nodeImg.src = "ftv2mlastnode.gif" else folder.nodeImg.src = "ftv2mnode.gif" if (folder.iconSrc != "ftv2conc.gif"){ if (folder.iconSrc != "ftv2doc.gif"){ folder.iconImg.src = "ftv2folderopen.gif" } else{ folder.iconImg.src = "ftv2doc.gif" } } else{ folder.iconImg.src = "ftv2conc.gif" } folder.navObj.style.background = "silver" setUnselectedForOthers(folder.id) 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("") } doc.write("") doc.write("") doc.write("
") doc.write(leftSide) this.outputLink() doc.write("") doc.write("") if (USETEXTLINKS) { this.outputLink() doc.write(this.desc + "") } else doc.write(this.desc) doc.write("
") if (browserVersion == 2) { 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 } } function outputFolderLink() { if (this.hreference) { doc.write(" 0) doc.write("onClick='javascript:clickOnFolder("+this.id+")'") doc.write(">") } else doc.write("") // 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, itemLink, color, id) // Constructor { // constant data this.desc = itemDescription this.link = itemLink this.type = "i" this.id = -1 //initialized in initalize() this.navObj = 0 //initialized in render() this.iconImg = 0 //initialized in render() this.iconSrc = "ftv2doc.gif" this.userready = color this.stateid = id this.children = new Array this.nChildren = 0 // methods this.initialize = initializeItem this.createIndex = createEntryIndex this.hide = hideItem this.display = display this.renderOb = drawItem this.addChild = addChild this.createIndex = createEntryIndex this.totalHeight = totalHeight this.subEntries = folderSubEntries } function Link(itemDescription, itemLink, target, color, id) // Constructor { // constant data this.desc = itemDescription this.link = itemLink this.type = "link" this.target = target this.id = -1 //initialized in initalize() this.navObj = 0 //initialized in render() this.iconImg = 0 //initialized in render() this.iconSrc = "ftv2lnk.gif" this.userready = color this.stateid = id // methods this.initialize = initializeItem this.createIndex = createEntryIndex this.hide = hideItem this.display = display this.renderOb = drawItem this.totalHeight = totalHeight } function uLink(itemDescription, itemLink, target, color, fnc, id) // Constructor { // constant data this.desc = itemDescription this.link = itemLink this.type = "ulink" this.target = target this.id = -1 //initialized in initalize() this.navObj = 0 //initialized in render() this.iconImg = 0 //initialized in render() this.iconSrc = "ftv2lnk.gif" this.userready = color this.action = fnc this.stateid = id // 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 == "hiden") return this.navObj.visibility = "hiden" } } 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("") doc.write("") doc.write("
") doc.write(leftSide) doc.write("") doc.write("") doc.write("src='"+this.iconSrc+"' border=0 onClick='javascript:clickOnDoc("+this.id+")'>") doc.write("") doc.write("") if (USETEXTLINKS) doc.write("" + this.desc + "") else doc.write(this.desc) doc.write("
") if (browserVersion == 2) 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 } } // Methods common to both objects (pseudo-inheritance) // ******************************************************** function get_topic() { return this.desc } function display() { if (browserVersion == 1) { //this.navObj.style.background = "silver" this.navObj.style.display = "block" } else { this.navObj.style.background = "silver" 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 clickOnFolderWithoutPost(folderId) { var clicked = indexOfEntries[folderId] if (!clicked.isOpen){ clickOnNodeWithoutPost(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 //if(handleUser==1) //{ handleUser=0; document.forms[0].elements[0].value = clickedFolder.hreference; document.forms[0].elements[1].value = clickedFolder.desc; document.forms[0].elements[2].value = folderId; document.forms[0].submit(); //alert(folderId); //currentPossition=folderId; //} //window.alert("forms" + document.forms[0].elements[1].value); ClickNeededAncestors(folderId); } function clickOnNodeWithoutPost(folderId) { var clickedFolder = 0 var state = 0 clickedFolder = indexOfEntries[folderId] state = clickedFolder.isOpen clickedFolder.setState(!state) //open<->close //window.alert("forms" + document.forms[0].elements[0].value); //if(handleUser==1) //{ handleUser=0; document.forms[0].elements[0].value = clickedFolder.hreference; document.forms[0].elements[1].value = clickedFolder.desc; document.forms[0].elements[2].value = folderId; //alert(folderId); //currentPossition=folderId; //} ClickNeededAncestors(folderId); } //function resubmit() //{ // alert("Submitting"); // document.forms[0].submit(); //} function ClickNeededAncestors(myid) { var ancestor=0 //window.alert(myid + "||" + indexOfEntries[myid].id+ "|" + indexOfEntries[myid].id) for(j=0; j 0) { doc.write(" ") // close the whole tree fromInit=1 clickOnNodeWithoutPost(0) // open the root folder //alert(id) clickOnNodeWithoutPost(0) //to uncollapse previous state //if(id!=0) //ClickNeededAncestors(id) } handleUser=1; dynamicSubmit=1; } // Auxiliary Functions for Folder-Treee backward compatibility // ********************************************************* function gFld(description, hreference, clr, sid) { folder = new Folder(description, hreference, clr, sid) return folder } function gFldConc(description, hreference, clr, sid) { folder = new Conc(description, hreference, clr, sid) return folder } function gFldDoc(description, hreference, clr, sid) { folder = new docFolder(description, hreference, clr, sid) return folder } function gLnk(target, description, linkData, clr, sid) { fullLink = "" if (target==0) { fullLink = "'"+linkData+"' target=\"basefrm\"" } else { if (target==1) fullLink = "'"+linkData+"' target=_blank" else fullLink = "'"+linkData+"' target=\"basefrm\"" } linkItem = new Item(description, fullLink, clr, sid) return linkItem } function gLnkLnk(target, description, linkData, trgt, clr, sid) { fullLink = "" if (target==0) { fullLink = "'"+linkData+"' target=\"basefrm\"" } else { if (target==1) fullLink = "'"+linkData+"' target=_blank" else fullLink = "'"+linkData+"' target=\"basefrm\"" } linkItem = new Link(description, fullLink, trgt, clr, sid) return linkItem } function gLnkLnkUser(target, description, linkData, trgt, clr, func) { fullLink = "" if (target==0) { fullLink = "'"+linkData+"' target=\"basefrm\"" } else { if (target==1) fullLink = "'"+linkData+"' target=_blank" else fullLink = "'"+linkData+"' target=\"basefrm\"" } linkItem = new uLink(description, fullLink, trgt, clr, func) return linkItem } function insFld(parentFolder, childFolder) { return parentFolder.addChild(childFolder) } function insDoc(parentFolder, document) { return parentFolder.addChild(document) } // Global variables // **************** USETEXTLINKS = 0 indexOfEntries = new Array nEntries = 0 doc = document browserVersion = 0 selectedFolder=0 handleUser=0 dynamicSubmit=0 fromInit=0 //currentPossition=0