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.
franta-hg@49
     1
/** Strom je načítaný AJAXem až po načtení stránky, takže je potřeba funkci zavolat ručně */
franta-hg@49
     2
//pridejUdalost(window,"load",sestavStromy);
franta-hg@49
     3
franta-hg@49
     4
function pridejUdalost(o, e, f) {
franta-hg@49
     5
    if (o.addEventListener) {
franta-hg@49
     6
        o.addEventListener(e,f,true);
franta-hg@49
     7
        return true;
franta-hg@49
     8
    } else if (o.attachEvent) {
franta-hg@49
     9
        return o.attachEvent("on" + e, f);
franta-hg@49
    10
    } else {
franta-hg@49
    11
        return false;
franta-hg@49
    12
    }
franta-hg@49
    13
}
franta-hg@49
    14
franta-hg@49
    15
function nastavKonstantu(name, val) {
franta-hg@49
    16
    if (typeof(window[name]) == "undefined" || window[name] == null) {
franta-hg@49
    17
        window[name] = val;
franta-hg@49
    18
    }
franta-hg@49
    19
}
franta-hg@49
    20
franta-hg@49
    21
function rozbalStrom(treeId) {
franta-hg@49
    22
    var ul = document.getElementById(treeId);
franta-hg@49
    23
    if (ul == null) {
franta-hg@49
    24
        return false;
franta-hg@49
    25
    }
franta-hg@49
    26
    rozbalSbalSeznam(ul, nodeOpenClass);
franta-hg@49
    27
}
franta-hg@49
    28
franta-hg@49
    29
function sbalStrom(treeId) {
franta-hg@49
    30
    var ul = document.getElementById(treeId);
franta-hg@49
    31
    if (ul == null) {
franta-hg@49
    32
        return false;
franta-hg@49
    33
    }
franta-hg@49
    34
    rozbalSbalSeznam(ul, nodeClosedClass);
franta-hg@49
    35
}
franta-hg@49
    36
franta-hg@49
    37
function rozbalAzNaPolozku(treeId, itemId) {
franta-hg@49
    38
    var ul = document.getElementById(treeId);
franta-hg@49
    39
    if (ul == null) {
franta-hg@49
    40
        return false;
franta-hg@49
    41
    }
franta-hg@49
    42
    var ret = rozbalSbalSeznam(ul, nodeOpenClass, itemId);
franta-hg@49
    43
    if (ret) {
franta-hg@49
    44
        var o = document.getElementById(itemId);
franta-hg@49
    45
        if (o.scrollIntoView) {
franta-hg@49
    46
            o.scrollIntoView(false);
franta-hg@49
    47
        }
franta-hg@49
    48
    }
franta-hg@49
    49
}
franta-hg@49
    50
franta-hg@49
    51
function rozbalSbalSeznam(ul, cName, itemId) {
franta-hg@49
    52
    if(!ul.childNodes || ul.childNodes.length==0) {
franta-hg@49
    53
        return false;
franta-hg@49
    54
    }
franta-hg@49
    55
    for (var itemi = 0; itemi < ul.childNodes.length; itemi++) {
franta-hg@49
    56
        var item = ul.childNodes[itemi];
franta-hg@49
    57
franta-hg@49
    58
        if (itemId != null && item.id == itemId) {
franta-hg@49
    59
            return true;
franta-hg@49
    60
        }
franta-hg@49
    61
franta-hg@49
    62
        if (item.nodeName == "LI") {
franta-hg@49
    63
            var subLists = false;
franta-hg@49
    64
            for (var sitemi = 0; sitemi<item.childNodes.length; sitemi++) {
franta-hg@49
    65
                var sitem = item.childNodes[sitemi];
franta-hg@49
    66
                if (sitem.nodeName=="UL") {
franta-hg@49
    67
                    subLists = true;
franta-hg@49
    68
                    var ret = rozbalSbalSeznam(sitem, cName, itemId);
franta-hg@49
    69
                    if (itemId != null && ret) {
franta-hg@49
    70
                        item.className = cName;
franta-hg@49
    71
                        return true;
franta-hg@49
    72
                    }
franta-hg@49
    73
                }
franta-hg@49
    74
            }
franta-hg@49
    75
franta-hg@49
    76
            if (subLists && itemId == null) {
franta-hg@49
    77
                item.className = cName;
franta-hg@49
    78
            }
franta-hg@49
    79
        }
franta-hg@49
    80
    }
franta-hg@49
    81
}
franta-hg@49
    82
franta-hg@49
    83
function sestavStromy() {
franta-hg@49
    84
    nastavKonstantu("treeClass", "strom");
franta-hg@49
    85
    nastavKonstantu("nodeClosedClass", "liClosed");
franta-hg@49
    86
    nastavKonstantu("nodeOpenClass", "liOpen");
franta-hg@49
    87
    nastavKonstantu("nodeBulletClass", "liBullet");
franta-hg@49
    88
    nastavKonstantu("nodeLinkClass", "bullet");
franta-hg@49
    89
    nastavKonstantu("preProcessTrees", true);
franta-hg@49
    90
    if (preProcessTrees) {
franta-hg@49
    91
        if (!document.createElement) {
franta-hg@49
    92
            return;
franta-hg@49
    93
        }
franta-hg@49
    94
        uls = document.getElementsByTagName("ul");
franta-hg@49
    95
        for (var uli = 0; uli < uls.length; uli++) {
franta-hg@49
    96
            var ul = uls[uli];
franta-hg@49
    97
            if (ul.nodeName == "UL" && ul.className == treeClass) {
franta-hg@49
    98
                zpracujStrom(ul);
franta-hg@49
    99
                ul.style.display = "block";
franta-hg@49
   100
            }
franta-hg@49
   101
        }
franta-hg@49
   102
    }
franta-hg@49
   103
}
franta-hg@49
   104
franta-hg@49
   105
function zpracujStrom(ul) {
franta-hg@49
   106
    if (!ul.childNodes || ul.childNodes.length==0) {
franta-hg@49
   107
        return;
franta-hg@49
   108
    }
franta-hg@49
   109
    for (var itemi = 0; itemi < ul.childNodes.length; itemi++) {
franta-hg@49
   110
        var item = ul.childNodes[itemi];
franta-hg@49
   111
        if (item.nodeName == "LI") {
franta-hg@49
   112
            var subLists = false;
franta-hg@49
   113
            for (var sitemi = 0; sitemi < item.childNodes.length; sitemi++) {
franta-hg@49
   114
                var sitem = item.childNodes[sitemi];
franta-hg@49
   115
                if (sitem.nodeName == "UL") {
franta-hg@49
   116
                    subLists = true;
franta-hg@49
   117
                    zpracujStrom(sitem);
franta-hg@49
   118
                }
franta-hg@49
   119
            }
franta-hg@49
   120
            var s = document.createElement("span");
franta-hg@49
   121
            var t = '\u00A0';
franta-hg@49
   122
            s.className = nodeLinkClass;
franta-hg@49
   123
            if (subLists) {
franta-hg@49
   124
                if (item.className == null || item.className == "") {
franta-hg@49
   125
                    item.className = nodeClosedClass;
franta-hg@49
   126
                }
franta-hg@49
   127
                if (item.firstChild.nodeName == "#text") {
franta-hg@49
   128
                    t = t + item.firstChild.nodeValue;
franta-hg@49
   129
                    item.removeChild(item.firstChild);
franta-hg@49
   130
                }
franta-hg@49
   131
                s.onclick = function() {
franta-hg@49
   132
                    this.parentNode.className = (this.parentNode.className==nodeOpenClass) ? nodeClosedClass : nodeOpenClass;
franta-hg@49
   133
                    return false;
franta-hg@49
   134
                }
franta-hg@49
   135
            } else {
franta-hg@49
   136
                item.className = nodeBulletClass;
franta-hg@49
   137
                s.onclick = function() {
franta-hg@49
   138
                    return false;
franta-hg@49
   139
                }
franta-hg@49
   140
            }
franta-hg@49
   141
            s.appendChild(document.createTextNode(t));
franta-hg@49
   142
            item.insertBefore(s, item.firstChild);
franta-hg@49
   143
        }
franta-hg@49
   144
    }
franta-hg@49
   145
}