mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-28 02:10:35 +05:00
506 lines
12 KiB
JavaScript
506 lines
12 KiB
JavaScript
//****************************************************************
|
|
// 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<folder.nChildren; i++)
|
|
folder.children[i].display()
|
|
}
|
|
else
|
|
{
|
|
if (folder.nodeImg)
|
|
if (folder.isLastNode)
|
|
folder.nodeImg.src = "ftv2plastnode.png"
|
|
else
|
|
folder.nodeImg.src = "ftv2pnode.png"
|
|
folder.iconImg.src = "ftv2folderclosed.png"
|
|
for (i=0; i<folder.nChildren; i++)
|
|
folder.children[i].hide()
|
|
}
|
|
}
|
|
|
|
function hideFolder()
|
|
{
|
|
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"
|
|
}
|
|
|
|
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.png' width=16 height=22 border=0></a>")
|
|
// leftSide = leftSide + "<img src='ftv2blank.png' width=16 height=22>"
|
|
this.isLastNode = 1
|
|
}
|
|
else
|
|
{
|
|
this.renderOb(leftSide + auxEv + "<img name='nodeIcon" + this.id + "' src='ftv2mnode.png' width=16 height=22 border=0></a>")
|
|
leftSide = leftSide + "<img src='ftv2vertline.png' 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>")
|
|
}
|
|
if (browserVersion == 3)
|
|
{
|
|
doc.write("<div id='folder" + this.id + "' style='visibility:hide;'>")
|
|
}
|
|
|
|
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)
|
|
|
|
/*!
|
|
if (this.tagName!="")
|
|
{
|
|
doc.write(" [external]")
|
|
}
|
|
*/
|
|
doc.write("</td>")
|
|
doc.write("\n</table>\n")
|
|
|
|
if (browserVersion == 2) {
|
|
doc.write("</layer>")
|
|
}
|
|
if (browserVersion == 3) {
|
|
doc.write("</div>")
|
|
}
|
|
|
|
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("<a ")
|
|
if (this.tagName)
|
|
{
|
|
doc.write("doxygen='" + this.tagName + "' ");
|
|
}
|
|
doc.write("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, 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 + "<img src='ftv2lastnode.png' width=16 height=22>")
|
|
leftSide = leftSide + "<img src='ftv2blank.png' width=16 height=22>"
|
|
}
|
|
else
|
|
{
|
|
this.renderOb(leftSide + "<img src='ftv2node.png' width=16 height=22>")
|
|
leftSide = leftSide + "<img src='ftv2vertline.png' 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>")
|
|
if (browserVersion == 3)
|
|
doc.write("<div id='item" + this.id + "' style='display:block;'>")
|
|
|
|
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)
|
|
/*!
|
|
if (this.tagName!="")
|
|
{
|
|
doc.write(" [external]");
|
|
}
|
|
*/
|
|
doc.write("\n</table>\n")
|
|
|
|
if (browserVersion == 2)
|
|
doc.write("</layer>")
|
|
if (browserVersion == 3)
|
|
doc.write("</div>")
|
|
|
|
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("<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, 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
|