I am using this code from that was downloaded from a contributor. It displays nicely except, when the plus/minus is pressed, the first subfolder is the only one that toggles, all its sibling folders remain visible.
Has anyone had this similar problem?
Here is the main page.
================================
<html>
<head>
<title>TreeView</title>
<link rel=stylesheet href='treeview.css'></link>
</head>
</html>
<script language=javascript src='treeview.js'></script>
<!--#include file='treeviewFunctions.asp'-->
<%
set fso = CreateObject("Scripting.FileSystemObject")
vDir = "/foo/"
root = Server.MapPath("datasets") & "\"
set fold = fso.getFolder(root)
' we'll assume that the starting point is not empty
' (has at least one subfolder or one file)
response.write getfoldlink("r0", "r0", fold, vDir)
if fold.subfolders.count > 0 then
' counter
r1c = 0
'loop through all subfolders in starting folder
for each f in fold.subfolders
' another counter
r1c = r1c + 1
' concatenate local/relative path once
sfoldname = root & f.name & "\"
fpath = vDir & f.name & "/"
set cfold = fso.getFolder(sfoldname)
if cfold.subfolders.count > 0 or cfold.files.count > 0 then
' we need to make the folder a tree node
response.Write getfoldlink("r1" & r1c, "r1", cfold, fpath)
' reset counter
r2c = 0
for each sf in cfold.subfolders
' keep track to identify nodes by id
r2c = r2c + 1
' concatenate local/relative path once
sfoldname = root & f.name & "\" & sf.name & "\"
path = vDir & f.name & "/" & sf.name & "/"
' build an identifier for this node
id = "r2" & r1c & "_" & r2c
set sfold = fso.getFolder(sfoldname)
if sfold.files.count > 0 then
' we need to make the folder a tree node
response.Write getfoldlink(id, "r2", sfold, path)
for each fil in sfold.files
response.write getfilelink("r2a", path, fil)
next
response.Write "</div>"
else
' this folder is not an expandable node
response.write getfoldlink("", "r2", sfold, path)
end if
next
for each fil in cfold.files
' show each file in this subfolder
response.write getfilelink("r1a", fpath, fil)
next
response.Write "</div>"
else
' this folder is not an expandable node
response.Write getfoldlink("", "r1", cfold, fpath)
end if
next
end if
for each fil in fold.files
' show the files in the starting folder
response.write getfilelink("r0a", vDir, fil)
next
response.Write "</div>"
set fso = nothing
%>
================================
Then here is the 'treeviewFunctions.asp'
================================
<%
function getfoldlink(d, c, f, p)
if d <> "" then
' needs to be clickable
getfoldlink = "<a href='#' style='cursor:hand' " & _
"onclick='flip(""" & d & """);" & _
"this.blur();return false;'>" & _
"<img id='i" & d & "' class=" & c & _
" src=plus.gif vspace=0 hspace=2 border=0>" & _
"<img src=folder.gif hspace=2 border=0></a> " & _
"<a target=_blank href=" & p & getsftitle(f) & _
">" & f.name & "</a></div><div id='" & d & "'" & _
" display=none style='display:none'>"
else
' can't be clickable
getfoldlink = "<div><img id='i" & d & "' " & _
"class=" & c & " src=plus.gif vspace=0 " & _
"hspace=2 visibility=hidden style='visibility:hidden'>" & _
"<img src=folder.gif hspace=2> <a " & _
"target=_blank href=" & p & getsftitle(f) & _
">" & f.name & "</a></div>"
end if
end function
function getfilelink(c, fold, file)
getfilelink = "<div><img class=" & c & " src=file.gif" & _
" hspace=2> <a href=" & fold & file.name & _
getfiletitle(file) & ">" & file.name & "</a></div>"
end function
function getfiletitle(file)
getfiletitle = " title='Size: " & _
formatnumber(file.size/1024, 2, -1, 0, -1) & _
" kb" & vbCrLf & getDL(file) & "'"
end function
function getsftitle(fold)
getsftitle = " title='" & getsfc(fold) & _
vbCrLf & getfc(fold) & _
vbCrLf & getfs(fold) & _
vbCrLf & getDL(fold) & "'"
end function
function getDL(o)
d = o.dateLastModified
getDL = "Last mod: " & formatdatetime(d, 2) & _
" " & formatdatetime(d, 3)
end function
function getfc(fold)
getfc = fCount(fold.files.count)
end function
function getsfc(fold)
getsfc = sfCount(fold.subfolders.count)
end function
function getfs(fold)
getfs = "Size: " & bToMB(fold.size)
end function
function bToMB(b)
bToMB = formatnumber(b/1024/1024, 2, -1, 0, -1) & " MB"
end function
function fCount(c)
fCount = formatnumber(c, 0, -1, 0, -1) & " file" & _
suffix(c)
end function
function sfCount(c)
sfCount = formatnumber(c, 0, -1, 0, -1) & _
" subfolder" & suffix(c)
end function
function suffix(c)
if c <> 1 then suffix = "s"
end function
%>
=====================================
and the treeview.js
=====================================
function flip(l)
{
if (document.getElementById)
{
var on = (document.getElementById(l).style.display == 'none') ? 1 : 0;
document.getElementById(l).style.display = (on) ? 'block' : 'none';
document.images['i'+l].src = (on) ? 'minus.gif' : 'plus.gif';
}
}
Has anyone had this similar problem?
Here is the main page.
================================
<html>
<head>
<title>TreeView</title>
<link rel=stylesheet href='treeview.css'></link>
</head>
</html>
<script language=javascript src='treeview.js'></script>
<!--#include file='treeviewFunctions.asp'-->
<%
set fso = CreateObject("Scripting.FileSystemObject")
vDir = "/foo/"
root = Server.MapPath("datasets") & "\"
set fold = fso.getFolder(root)
' we'll assume that the starting point is not empty
' (has at least one subfolder or one file)
response.write getfoldlink("r0", "r0", fold, vDir)
if fold.subfolders.count > 0 then
' counter
r1c = 0
'loop through all subfolders in starting folder
for each f in fold.subfolders
' another counter
r1c = r1c + 1
' concatenate local/relative path once
sfoldname = root & f.name & "\"
fpath = vDir & f.name & "/"
set cfold = fso.getFolder(sfoldname)
if cfold.subfolders.count > 0 or cfold.files.count > 0 then
' we need to make the folder a tree node
response.Write getfoldlink("r1" & r1c, "r1", cfold, fpath)
' reset counter
r2c = 0
for each sf in cfold.subfolders
' keep track to identify nodes by id
r2c = r2c + 1
' concatenate local/relative path once
sfoldname = root & f.name & "\" & sf.name & "\"
path = vDir & f.name & "/" & sf.name & "/"
' build an identifier for this node
id = "r2" & r1c & "_" & r2c
set sfold = fso.getFolder(sfoldname)
if sfold.files.count > 0 then
' we need to make the folder a tree node
response.Write getfoldlink(id, "r2", sfold, path)
for each fil in sfold.files
response.write getfilelink("r2a", path, fil)
next
response.Write "</div>"
else
' this folder is not an expandable node
response.write getfoldlink("", "r2", sfold, path)
end if
next
for each fil in cfold.files
' show each file in this subfolder
response.write getfilelink("r1a", fpath, fil)
next
response.Write "</div>"
else
' this folder is not an expandable node
response.Write getfoldlink("", "r1", cfold, fpath)
end if
next
end if
for each fil in fold.files
' show the files in the starting folder
response.write getfilelink("r0a", vDir, fil)
next
response.Write "</div>"
set fso = nothing
%>
================================
Then here is the 'treeviewFunctions.asp'
================================
<%
function getfoldlink(d, c, f, p)
if d <> "" then
' needs to be clickable
getfoldlink = "<a href='#' style='cursor:hand' " & _
"onclick='flip(""" & d & """);" & _
"this.blur();return false;'>" & _
"<img id='i" & d & "' class=" & c & _
" src=plus.gif vspace=0 hspace=2 border=0>" & _
"<img src=folder.gif hspace=2 border=0></a> " & _
"<a target=_blank href=" & p & getsftitle(f) & _
">" & f.name & "</a></div><div id='" & d & "'" & _
" display=none style='display:none'>"
else
' can't be clickable
getfoldlink = "<div><img id='i" & d & "' " & _
"class=" & c & " src=plus.gif vspace=0 " & _
"hspace=2 visibility=hidden style='visibility:hidden'>" & _
"<img src=folder.gif hspace=2> <a " & _
"target=_blank href=" & p & getsftitle(f) & _
">" & f.name & "</a></div>"
end if
end function
function getfilelink(c, fold, file)
getfilelink = "<div><img class=" & c & " src=file.gif" & _
" hspace=2> <a href=" & fold & file.name & _
getfiletitle(file) & ">" & file.name & "</a></div>"
end function
function getfiletitle(file)
getfiletitle = " title='Size: " & _
formatnumber(file.size/1024, 2, -1, 0, -1) & _
" kb" & vbCrLf & getDL(file) & "'"
end function
function getsftitle(fold)
getsftitle = " title='" & getsfc(fold) & _
vbCrLf & getfc(fold) & _
vbCrLf & getfs(fold) & _
vbCrLf & getDL(fold) & "'"
end function
function getDL(o)
d = o.dateLastModified
getDL = "Last mod: " & formatdatetime(d, 2) & _
" " & formatdatetime(d, 3)
end function
function getfc(fold)
getfc = fCount(fold.files.count)
end function
function getsfc(fold)
getsfc = sfCount(fold.subfolders.count)
end function
function getfs(fold)
getfs = "Size: " & bToMB(fold.size)
end function
function bToMB(b)
bToMB = formatnumber(b/1024/1024, 2, -1, 0, -1) & " MB"
end function
function fCount(c)
fCount = formatnumber(c, 0, -1, 0, -1) & " file" & _
suffix(c)
end function
function sfCount(c)
sfCount = formatnumber(c, 0, -1, 0, -1) & _
" subfolder" & suffix(c)
end function
function suffix(c)
if c <> 1 then suffix = "s"
end function
%>
=====================================
and the treeview.js
=====================================
function flip(l)
{
if (document.getElementById)
{
var on = (document.getElementById(l).style.display == 'none') ? 1 : 0;
document.getElementById(l).style.display = (on) ? 'block' : 'none';
document.images['i'+l].src = (on) ? 'minus.gif' : 'plus.gif';
}
}