root/java/sql-vyuka/web/strom.js @ 49:083966fa9d9d

Revision 49:083966fa9d9d, 4.4 KB (checked in by František Kučera <franta-hg@…>, 15 years ago)

Model databáze: javascript, css a obrázky pro zobrazování stromové struktury.

Line 
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);
3
4function pridejUdalost(o, e, f) {
5    if (o.addEventListener) {
6        o.addEventListener(e,f,true);
7        return true;
8    } else if (o.attachEvent) {
9        return o.attachEvent("on" + e, f);
10    } else {
11        return false;
12    }
13}
14
15function nastavKonstantu(name, val) {
16    if (typeof(window[name]) == "undefined" || window[name] == null) {
17        window[name] = val;
18    }
19}
20
21function rozbalStrom(treeId) {
22    var ul = document.getElementById(treeId);
23    if (ul == null) {
24        return false;
25    }
26    rozbalSbalSeznam(ul, nodeOpenClass);
27}
28
29function sbalStrom(treeId) {
30    var ul = document.getElementById(treeId);
31    if (ul == null) {
32        return false;
33    }
34    rozbalSbalSeznam(ul, nodeClosedClass);
35}
36
37function rozbalAzNaPolozku(treeId, itemId) {
38    var ul = document.getElementById(treeId);
39    if (ul == null) {
40        return false;
41    }
42    var ret = rozbalSbalSeznam(ul, nodeOpenClass, itemId);
43    if (ret) {
44        var o = document.getElementById(itemId);
45        if (o.scrollIntoView) {
46            o.scrollIntoView(false);
47        }
48    }
49}
50
51function rozbalSbalSeznam(ul, cName, itemId) {
52    if(!ul.childNodes || ul.childNodes.length==0) {
53        return false;
54    }
55    for (var itemi = 0; itemi < ul.childNodes.length; itemi++) {
56        var item = ul.childNodes[itemi];
57
58        if (itemId != null && item.id == itemId) {
59            return true;
60        }
61
62        if (item.nodeName == "LI") {
63            var subLists = false;
64            for (var sitemi = 0; sitemi<item.childNodes.length; sitemi++) {
65                var sitem = item.childNodes[sitemi];
66                if (sitem.nodeName=="UL") {
67                    subLists = true;
68                    var ret = rozbalSbalSeznam(sitem, cName, itemId);
69                    if (itemId != null && ret) {
70                        item.className = cName;
71                        return true;
72                    }
73                }
74            }
75
76            if (subLists && itemId == null) {
77                item.className = cName;
78            }
79        }
80    }
81}
82
83function 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) {
92            return;
93        }
94        uls = document.getElementsByTagName("ul");
95        for (var uli = 0; uli < uls.length; uli++) {
96            var ul = uls[uli];
97            if (ul.nodeName == "UL" && ul.className == treeClass) {
98                zpracujStrom(ul);
99                ul.style.display = "block";
100            }
101        }
102    }
103}
104
105function zpracujStrom(ul) {
106    if (!ul.childNodes || ul.childNodes.length==0) {
107        return;
108    }
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") {
116                    subLists = true;
117                    zpracujStrom(sitem);
118                }
119            }
120            var s = document.createElement("span");
121            var t = '\u00A0';
122            s.className = nodeLinkClass;
123            if (subLists) {
124                if (item.className == null || item.className == "") {
125                    item.className = nodeClosedClass;
126                }
127                if (item.firstChild.nodeName == "#text") {
128                    t = t + item.firstChild.nodeValue;
129                    item.removeChild(item.firstChild);
130                }
131                s.onclick = function() {
132                    this.parentNode.className = (this.parentNode.className==nodeOpenClass) ? nodeClosedClass : nodeOpenClass;
133                    return false;
134                }
135            } else {
136                item.className = nodeBulletClass;
137                s.onclick = function() {
138                    return false;
139                }
140            }
141            s.appendChild(document.createTextNode(t));
142            item.insertBefore(s, item.firstChild);
143        }
144    }
145}
Note: See TracBrowser for help on using the browser.