1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
var collapseClass = "AspNet-TreeView-Collapse";
var expandClass = "AspNet-TreeView-Expand";
var showClass = "AspNet-TreeView-Show";
var hideClass = "AspNet-TreeView-Hide";
function IsExpanded__AspNetTreeView(element)
{
return (HasClass__CssFriendlyAdapters(element, collapseClass));
}
function TogglePlusMinus__AspNetTreeView(element, showPlus)
{
if (HasAnyClass__CssFriendlyAdapters(element))
{
var showPlusLocal = IsExpanded__AspNetTreeView(element);
if ((typeof(showPlus) != "undefined") && (showPlus != null))
{
showPlusLocal = showPlus;
}
var oldClass = showPlusLocal ? collapseClass : expandClass;
var newClass = showPlusLocal ? expandClass : collapseClass;
SwapClass__CssFriendlyAdapters(element, oldClass, newClass);
}
}
function ToggleChildrenDisplay__AspNetTreeView(element, collapse)
{
if ((element != null) && (element.parentNode != null) && (element.parentNode.getElementsByTagName != null))
{
var childrenToHide = element.parentNode.getElementsByTagName("ul");
var oldClass = collapse ? showClass : hideClass;
var newClass = collapse ? hideClass : showClass;
for (var i=0; i<childrenToHide.length; i++)
{
if ((childrenToHide[i].parentNode != null) && (childrenToHide[i].parentNode == element.parentNode))
{
SwapOrAddClass__CssFriendlyAdapters(childrenToHide[i], oldClass, newClass);
}
}
}
}
function ExpandCollapse__AspNetTreeView(sourceElement)
{
if (HasAnyClass__CssFriendlyAdapters(sourceElement))
{
var expanded = IsExpanded__AspNetTreeView(sourceElement);
TogglePlusMinus__AspNetTreeView(sourceElement, expanded);
ToggleChildrenDisplay__AspNetTreeView(sourceElement, expanded);
}
}
function GetViewState__AspNetTreeView(id)
{
var retStr = "";
if ((typeof(id) != "undefined") && (id != null) && (document.getElementById(id) != null))
{
var topUL = document.getElementById(id);
retStr = ComposeViewState__AspNetTreeView(topUL, "");
}
return retStr;
}
function ComposeViewState__AspNetTreeView(element, state)
{
var child = element.firstChild;
var bConsiderChildren = true;
// The following line must be changed if you alter the TreeView adapters generation of
// markup such that the first child within the LI no longer is the expand/collapse <span>.
if ((element.tagName == "LI") && (child != null))
{
var expandCollapseSPAN = null;
var currentChild = child;
while (currentChild != null)
{
if ((currentChild.tagName == "SPAN") &&
(currentChild.className != null) &&
((currentChild.className.indexOf(collapseClass) > -1) ||
(currentChild.className.indexOf(expandClass) > -1)))
{
expandCollapseSPAN = currentChild;
break;
}
currentChild = currentChild.nextSibling;
}
if (expandCollapseSPAN != null)
{
if (expandCollapseSPAN.className.indexOf(collapseClass) > -1)
{
// If the "collapse" class is currently being used then the "collapse" icon is, presumably, being shown.
// In other words, the node itself is actually expanded at the present moment (which is why you now
// have the option of collapsing it. So we mark it as an "expanded" node for purposes of the view state
// we are now accumulating.
state += "e";
}
else if (expandCollapseSPAN.className.indexOf(expandClass) > -1)
{
// This part of the tree is collapsed so we don't need to consider its children.
bConsiderChildren = false;
state += "n";
}
}
}
if (bConsiderChildren && (child != null))
{
state = ComposeViewState__AspNetTreeView(child, state);
}
if (element.nextSibling != null)
{
state = ComposeViewState__AspNetTreeView(element.nextSibling, state);
}
return state;
}
|