Lepší řešení #3 – uživatel může zadat neomezeně příkazů, které nevracejí výsledek.
1 /** Strom je načítaný AJAXem až po načtení stránky, takže je potřeba funkci zavolat ručně */
2 //pridejUdalost(window,"load",sestavStromy);
4 function pridejUdalost(o, e, f) {
5 if (o.addEventListener) {
6 o.addEventListener(e,f,true);
8 } else if (o.attachEvent) {
9 return o.attachEvent("on" + e, f);
15 function nastavKonstantu(name, val) {
16 if (typeof(window[name]) == "undefined" || window[name] == null) {
21 function rozbalStrom(treeId) {
22 var ul = document.getElementById(treeId);
26 rozbalSbalSeznam(ul, nodeOpenClass);
29 function sbalStrom(treeId) {
30 var ul = document.getElementById(treeId);
34 rozbalSbalSeznam(ul, nodeClosedClass);
37 function rozbalAzNaPolozku(treeId, itemId) {
38 var ul = document.getElementById(treeId);
42 var ret = rozbalSbalSeznam(ul, nodeOpenClass, itemId);
44 var o = document.getElementById(itemId);
45 if (o.scrollIntoView) {
46 o.scrollIntoView(false);
51 function rozbalSbalSeznam(ul, cName, itemId) {
52 if(!ul.childNodes || ul.childNodes.length==0) {
55 for (var itemi = 0; itemi < ul.childNodes.length; itemi++) {
56 var item = ul.childNodes[itemi];
58 if (itemId != null && item.id == itemId) {
62 if (item.nodeName == "LI") {
64 for (var sitemi = 0; sitemi<item.childNodes.length; sitemi++) {
65 var sitem = item.childNodes[sitemi];
66 if (sitem.nodeName=="UL") {
68 var ret = rozbalSbalSeznam(sitem, cName, itemId);
69 if (itemId != null && ret) {
70 item.className = cName;
76 if (subLists && itemId == null) {
77 item.className = cName;
83 function sestavStromy() {
84 nastavKonstantu("treeClass", "strom");
85 nastavKonstantu("nodeClosedClass", "liClosed");
86 nastavKonstantu("nodeOpenClass", "liOpen");
87 nastavKonstantu("nodeBulletClass", "liBullet");
88 nastavKonstantu("nodeLinkClass", "bullet");
89 nastavKonstantu("preProcessTrees", true);
90 if (preProcessTrees) {
91 if (!document.createElement) {
94 uls = document.getElementsByTagName("ul");
95 for (var uli = 0; uli < uls.length; uli++) {
97 if (ul.nodeName == "UL" && ul.className == treeClass) {
99 ul.style.display = "block";
105 function zpracujStrom(ul) {
106 if (!ul.childNodes || ul.childNodes.length==0) {
109 for (var itemi = 0; itemi < ul.childNodes.length; itemi++) {
110 var item = ul.childNodes[itemi];
111 if (item.nodeName == "LI") {
112 var subLists = false;
113 for (var sitemi = 0; sitemi < item.childNodes.length; sitemi++) {
114 var sitem = item.childNodes[sitemi];
115 if (sitem.nodeName == "UL") {
120 var s = document.createElement("span");
122 s.className = nodeLinkClass;
124 if (item.className == null || item.className == "") {
125 item.className = nodeClosedClass;
127 if (item.firstChild.nodeName == "#text") {
128 t = t + item.firstChild.nodeValue;
129 item.removeChild(item.firstChild);
131 s.onclick = function() {
132 this.parentNode.className = (this.parentNode.className==nodeOpenClass) ? nodeClosedClass : nodeOpenClass;
136 item.className = nodeBulletClass;
137 s.onclick = function() {
141 s.appendChild(document.createTextNode(t));
142 item.insertBefore(s, item.firstChild);