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