if (typeof jgdoc == 'undefined') { jgdoc = {} jgdoc._dataHandlers = []; jgdoc.setData = function(data) { for (var i = 0; i < jgdoc._dataHandlers.length; i++) { jgdoc._dataHandlers[i](data); } } } jgdoc.TreeItem = function(nodeName, item) { this._nodeName = nodeName; this._data = item; this._children = []; } jgdoc.Common = { addClass : function(element, className) { var s = element.className; var a = s.split(' '); for (var i = 0; i < a.length; i++) { if (a[i] == className) { return; } } a.push(className); element.className = a.join(' '); }, removeClass : function(element, className) { var s = element.className; var a = s.split(' '); var found = false; for (var i = 0; i < a.length; i++) { if (a[i] == className) { a.splice(i, 1); found = true; break; } } element.className = a.join(' '); return found; }, addListener : function(element, eventName, handler) { if (element.addEventListener) { element.addEventListener(eventName, handler, false); } else { element.attachEvent('on' + eventName, handler); } }, removeListener : function(element, eventName, handler) { if (element.removeEventListener) { element.removeEventListener(eventName, handler, false); } else { element.detachEvent('on' + eventName, handler); } } } jgdoc.NavPanel = { clicked : function(e) { e = window.event? window.event : e; var target = e.target || e.srcElement; var node = target; while (node != null && node.tagName != 'UL') { node = node.parentNode; } if (node) { var parent = node.parentNode; var current = parent.firstChild; while (current) { if (current != node && current.nodeType === 1) { jgdoc.Common.addClass(current, "closed"); } current = current.nextSibling; } jgdoc.Common.removeClass(node, "closed"); } }, dummy : function() { } } /* jgdoc.App = { initialize : function() { this._container = document.getElementById("startup"); this._banner = document.getElementById("banner"); this._content = document.getElementById("docContent"); this._navigation = document.getElementById("navigation"); this._docScroll = document.getElementById("docScroll"); this._html = document.getElementsByTagName('html')[0]; this._body = document.getElementsByTagName("body")[0]; this._searchBlock = document.getElementById("searchBlock"); this._html.style.overflowY = "hidden"; } }*/ jgdoc.NavTree = { initialize : function(defaultName) { this._defaultName = defaultName; }, setData : function(data) { this._data = data; this.processItems(); this.render(); this.openItem(this._defaultName); }, sorter: function(o1, o2) { var l1 = o1.localName; var l2 = o2.localName; return l1 < l2? -1 : (l1 > l2 ? 1 : 0); }, processItems : function() { var root; // Pass 1: Build index by fullName, and locate the root element this._byName = {}; for (var i = 0; i < this._data.length; i++) { var d = this._data[i]; if (d.fullName == "GLOBAL") { root = this._root = d; } this._byName[d.fullName] = d; } // Pass 2: Populate _children arrays for (var i = 0; i < this._data.length; i++) { var item = this._data[i]; if (item.elementType == "logical_container" && item != this._root) { var parent = this._byName[item.parent]; parent._children = parent._children || []; parent._children.push(item); } } }, findItem : function(name) { return this._byName[name]; }, /*setData : function(data) { this._data = data; data.sort(this.sorter); this._root = data[0]; this.processItems(); this.render(); this.openItem(this._defaultName); }, findItem : function(name) { if (name === '' || name == 'GLOBAL') { return this._root; } var s = name.split('.'); var current = this._root._children; var found = null; for (var i = 0; i < s.length; i++) { var detected = false; for (var j = 0; j < current.length; j++) { var item = current[j]; if (item.localName == s[i]) { detected = true; current = item._children; found = item; break; } } if (!detected) { return false; } } return found; }, processItems : function() { for (var i = 1; i < this._data.length; i++) { var item = this._data[i]; if (item.elementType == "logical_container") { var parent = this.findItem(item.parent); if (!parent._children) { parent._children = []; } parent._children.push(item); } } }, sorter : function(item1, item2) { if (item1.parent == "") { return -1; } if (item2.parent == "") { return 1; } if (item1.parent == item2.parent) { return item1.localName < item2.localName? -1 : item1.localName > item2.localName? 1 : 0; } if (item1.parent == "GLOBAL") { return -1; } if (item2.parent == "GLOBAL") { return 1; } return item1.parent < item2.parent? -1 : 1; }, */ clicked : function(event) { event = window.event? window.event : event; var target = event.target || event.srcElement; var span = target.parentNode; var li = span.parentNode; var wasOpen = jgdoc.Common.removeClass(li, 'open'); if (wasOpen) { jgdoc.Common.addClass(li, 'closed'); } else { jgdoc.Common.removeClass(li, 'closed'); jgdoc.Common.addClass(li, 'open'); } span.title = "Click to " + (wasOpen? "expand" : "collapse"); }, render : function() { var d = document.getElementById('content'); d.innerHTML = ''; var athis = this; function renderNode(item) { var node = document.createElement('li'); node.className = item.type; node.innerHTML = " " + item.localName + ""; var span = node.firstChild; var img = span.firstChild; jgdoc.Common.addListener(img, 'mousedown', athis.clicked); if (item._children) { node.className += (item == athis._root)? ' open' : ' closed'; span.title = "Click to " + (item != athis._root? 'expand' : 'collapse'); var subnode = document.createElement("ul"); subnode.className = 'contents'; for (var i = 0; i < item._children.length; i++) { var child = renderNode(item._children[i]); subnode.appendChild(child); } node.appendChild(subnode); } else { node.className += ' leaf'; } if (item.fullName == athis._defaultName) { node.firstChild.nextSibling.className += ' currentNode'; } item._node = node; return node; } var root = renderNode(this._root); d.appendChild(root); }, cancelEvent : function(event) { if (event.preventDefault) { event.preventDefault(); event.stopPropagation(); } else { event.preventDefault(); event.stopPropagation(); } }, switchAll : function(doOpen) { var ac = doOpen? 'open' : 'closed'; var rc = doOpen? 'closed' : 'open'; var athis = this; function doSwitchNode(anode) { if (anode._children) { if (doOpen || anode != athis._root) { jgdoc.Common.removeClass(anode._node, rc); jgdoc.Common.addClass(anode._node, ac); } for (var i = 0; i < anode._children.length; i++) { doSwitchNode(anode._children[i]); } } } doSwitchNode(this._root); }, openItem : function(name) { this.switchAll(false); while (name != 'GLOBAL') { var item = this.findItem(name); if (item) { var node = item._node; jgdoc.Common.removeClass(node, 'closed'); jgdoc.Common.addClass(node, 'open'); name = item.parent; } else { return; } } }, onOpenAll : function() { jgdoc.NavTree.switchAll(true); }, onCloseAll : function() { jgdoc.NavTree.switchAll(false); } }; jgdoc._dataHandlers.push(function(data) { //jgdoc.App.initialize(); jgdoc.NavTree.setData(data); });