java/sql-vyuka/web/strom.js
author František Kučera <franta-hg@frantovo.cz>
Thu May 24 15:47:48 2012 +0200 (2012-05-24)
changeset 80 d900e5a112cc
parent 49 083966fa9d9d
permissions -rw-r--r--
Lepší odsazení JavaScriptu (tabulátory).
     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 }
   146