java/sql-vyuka/web/strom.js
author František Kučera <franta-hg@frantovo.cz>
Tue Jul 14 16:51:24 2009 +0200 (2009-07-14)
changeset 49 083966fa9d9d
child 80 d900e5a112cc
permissions -rw-r--r--
Model databáze: javascript, css a obrázky pro zobrazování stromové struktury.
     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 
     4 function 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 
    15 function nastavKonstantu(name, val) {
    16     if (typeof(window[name]) == "undefined" || window[name] == null) {
    17         window[name] = val;
    18     }
    19 }
    20 
    21 function rozbalStrom(treeId) {
    22     var ul = document.getElementById(treeId);
    23     if (ul == null) {
    24         return false;
    25     }
    26     rozbalSbalSeznam(ul, nodeOpenClass);
    27 }
    28 
    29 function sbalStrom(treeId) {
    30     var ul = document.getElementById(treeId);
    31     if (ul == null) {
    32         return false;
    33     }
    34     rozbalSbalSeznam(ul, nodeClosedClass);
    35 }
    36 
    37 function 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 
    51 function 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 
    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) {
    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 
   105 function 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 }