[prev] [thread] [next] [lurker] [Date index for 2005/02/08]
Author: simon Date: 2005-02-08 12:59:12 +0000 (Tue, 08 Feb 2005) New Revision: 1847 Modified: trunk/buscador/chrome/mktree.js Log: Various fixes Modified: trunk/buscador/chrome/mktree.js =================================================================== --- trunk/buscador/chrome/mktree.js 2005-02-08 12:58:13 UTC (rev 1846) +++ trunk/buscador/chrome/mktree.js 2005-02-08 12:59:12 UTC (rev 1847) @@ -1,177 +1,177 @@ -// =================================================================== -// Author: Matt Kruse <matt@xxxxxxxxx.xxx> -// WWW: http://www.mattkruse.com/ -// -// NOTICE: You may use this code for any purpose, commercial or -// private, without any further permission from the author. You may -// remove this notice from your final code if you wish, however it is -// appreciated by the author if at least my web site address is kept. -// -// You may *NOT* re-distribute this code in any way except through its -// use. That means, you can include it in your product, or your web -// site, or any other form where the code is actually being used. You -// may not put the plain javascript up on your site for download or -// include it in your javascript libraries for download. -// If you wish to share this code with others, please just point them -// to the URL instead. -// Please DO NOT link directly to my .js files from your site. Copy -// the files to your server and use them there. Thank you. -// =================================================================== - -// HISTORY -// ------------------------------------------------------------------ -// December 9, 2003: Added script to the Javascript Toolbox -// December 10, 2003: Added the preProcessTrees variable to allow user -// to turn off automatic conversion of UL's onLoad -// March 1, 2004: Changed it so if a <li> has a class already attached -// to it, that class won't be erased when initialized. This allows -// you to set the state of the tree when painting the page simply -// by setting some <li>'s class name as being "liOpen" (see example) -/* -This code is inspired by and extended from Stuart Langridge's aqlist code: - http://www.kryogenix.org/code/browser/aqlists/ - Stuart Langridge, November 2002 - sil@xxxxxxxxx.xxx - Inspired by Aaron's labels.js (http://youngpup.net/demos/labels/) - and Dave Lindquist's menuDropDown.js (http://www.gazingus.org/dhtml/?id=109) -*/ - -// Automatically attach a listener to the window onload, to convert the trees -addEvent(window,"load",convertTrees); - -// Utility function to add an event listener -function addEvent(o,e,f){ - if (o.addEventListener){ o.addEventListener(e,f,true); return true; } - else if (o.attachEvent){ return o.attachEvent("on"+e,f); } - else { return false; } -} - -// utility function to set a global variable if it is not already set -function setDefault(name,val) { - if (typeof(window[name])=="undefined" || window[name]==null) { - window[name]=val; - } -} - -// Full expands a tree with a given ID -function expandTree(treeId) { - var ul = document.getElementById(treeId); - if (ul == null) { return false; } - expandCollapseList(ul,nodeOpenClass); -} - -// Fully collapses a tree with a given ID -function collapseTree(treeId) { - var ul = document.getElementById(treeId); - if (ul == null) { return false; } - expandCollapseList(ul,nodeClosedClass); -} - -// Expands enough nodes to expose an LI with a given ID -function expandToItem(treeId,itemId) { - var ul = document.getElementById(treeId); - if (ul == null) { return false; } - var ret = expandCollapseList(ul,nodeOpenClass,itemId); - if (ret) { - var o = document.getElementById(itemId); - if (o.scrollIntoView) { - o.scrollIntoView(false); - } - } -} - -// Performs 3 functions: -// a) Expand all nodes -// b) Collapse all nodes -// c) Expand all nodes to reach a certain ID -function expandCollapseList(ul,cName,itemId) { - if (!ul.childNodes || ul.childNodes.length==0) { return false; } - // Iterate LIs - for (var itemi=0;itemi<ul.childNodes.length;itemi++) { - var item = ul.childNodes[itemi]; - if (itemId!=null && item.id==itemId) { return true; } - if (item.nodeName == "LI") { - // Iterate things in this LI - var subLists = false; - for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) { - var sitem = item.childNodes[sitemi]; - if (sitem.nodeName=="UL") { - subLists = true; - var ret = expandCollapseList(sitem,cName,itemId); - if (itemId!=null && ret) { - item.className=cName; - return true; - } - } - } - if (subLists && itemId==null) { - item.className = cName; - } - } - } -} - -// Search the document for UL elements with the correct CLASS name, then process them -function convertTrees() { - setDefault("treeClass","mktree"); - setDefault("nodeClosedClass","liClosed"); - setDefault("nodeOpenClass","liOpen"); - setDefault("nodeBulletClass","liBullet"); - setDefault("nodeLinkClass","bullet"); - setDefault("preProcessTrees",true); - if (preProcessTrees) { - if (!document.createElement) { return; } // Without createElement, we can't do anything - uls = document.getElementsByTagName("ul"); - for (var uli=0;uli<uls.length;uli++) { - var ul=uls[uli]; - if (ul.nodeName=="UL" && ul.className==treeClass) { - processList(ul); - } - } - } -} - -// Process a UL tag and all its children, to convert to a tree -function processList(ul) { - if (!ul.childNodes || ul.childNodes.length==0) { return; } - // Iterate LIs - for (var itemi=0;itemi<ul.childNodes.length;itemi++) { - var item = ul.childNodes[itemi]; - if (item.nodeName == "LI") { - // Iterate things in this LI - var subLists = false; - for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) { - var sitem = item.childNodes[sitemi]; - if (sitem.nodeName=="UL") { - subLists = true; - processList(sitem); - } - } - var s= document.createElement("SPAN"); - var t= '\u00A0'; // - s.className = nodeLinkClass; - if (subLists) { - // This LI has UL's in it, so it's a +/- node - if (item.className==null || item.className=="") { - item.className = nodeClosedClass; - } - // If it's just text, make the text work as the link also - if (item.firstChild.nodeName=="#text") { - t = t+item.firstChild.nodeValue; - item.removeChild(item.firstChild); - } - s.onclick = function () { - this.parentNode.className = (this.parentNode.className==nodeOpenClass) ? nodeClosedClass : nodeOpenClass; - return false; - } - } - else { - // No sublists, so it's just a bullet node - item.className = nodeBulletClass; - s.onclick = function () { return false; } - } - s.appendChild(document.createTextNode(t)); - item.insertBefore(s,item.firstChild); - } - } -} +// =================================================================== +// Author: Matt Kruse <matt@xxxxxxxxx.xxx> +// WWW: http://www.mattkruse.com/ +// +// NOTICE: You may use this code for any purpose, commercial or +// private, without any further permission from the author. You may +// remove this notice from your final code if you wish, however it is +// appreciated by the author if at least my web site address is kept. +// +// You may *NOT* re-distribute this code in any way except through its +// use. That means, you can include it in your product, or your web +// site, or any other form where the code is actually being used. You +// may not put the plain javascript up on your site for download or +// include it in your javascript libraries for download. +// If you wish to share this code with others, please just point them +// to the URL instead. +// Please DO NOT link directly to my .js files from your site. Copy +// the files to your server and use them there. Thank you. +// =================================================================== + +// HISTORY +// ------------------------------------------------------------------ +// December 9, 2003: Added script to the Javascript Toolbox +// December 10, 2003: Added the preProcessTrees variable to allow user +// to turn off automatic conversion of UL's onLoad +// March 1, 2004: Changed it so if a <li> has a class already attached +// to it, that class won't be erased when initialized. This allows +// you to set the state of the tree when painting the page simply +// by setting some <li>'s class name as being "liOpen" (see example) +/* +This code is inspired by and extended from Stuart Langridge's aqlist code: + http://www.kryogenix.org/code/browser/aqlists/ + Stuart Langridge, November 2002 + sil@xxxxxxxxx.xxx + Inspired by Aaron's labels.js (http://youngpup.net/demos/labels/) + and Dave Lindquist's menuDropDown.js (http://www.gazingus.org/dhtml/?id=109) +*/ + +// Automatically attach a listener to the window onload, to convert the trees +addEvent(window,"load",convertTrees); + +// Utility function to add an event listener +function addEvent(o,e,f){ + if (o.addEventListener){ o.addEventListener(e,f,true); return true; } + else if (o.attachEvent){ return o.attachEvent("on"+e,f); } + else { return false; } +} + +// utility function to set a global variable if it is not already set +function setDefault(name,val) { + if (typeof(window[name])=="undefined" || window[name]==null) { + window[name]=val; + } +} + +// Full expands a tree with a given ID +function expandTree(treeId) { + var ul = document.getElementById(treeId); + if (ul == null) { return false; } + expandCollapseList(ul,nodeOpenClass); +} + +// Fully collapses a tree with a given ID +function collapseTree(treeId) { + var ul = document.getElementById(treeId); + if (ul == null) { return false; } + expandCollapseList(ul,nodeClosedClass); +} + +// Expands enough nodes to expose an LI with a given ID +function expandToItem(treeId,itemId) { + var ul = document.getElementById(treeId); + if (ul == null) { return false; } + var ret = expandCollapseList(ul,nodeOpenClass,itemId); + if (ret) { + var o = document.getElementById(itemId); + if (o.scrollIntoView) { + o.scrollIntoView(false); + } + } +} + +// Performs 3 functions: +// a) Expand all nodes +// b) Collapse all nodes +// c) Expand all nodes to reach a certain ID +function expandCollapseList(ul,cName,itemId) { + if (!ul.childNodes || ul.childNodes.length==0) { return false; } + // Iterate LIs + for (var itemi=0;itemi<ul.childNodes.length;itemi++) { + var item = ul.childNodes[itemi]; + if (itemId!=null && item.id==itemId) { return true; } + if (item.nodeName == "LI") { + // Iterate things in this LI + var subLists = false; + for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) { + var sitem = item.childNodes[sitemi]; + if (sitem.nodeName=="UL") { + subLists = true; + var ret = expandCollapseList(sitem,cName,itemId); + if (itemId!=null && ret) { + item.className=cName; + return true; + } + } + } + if (subLists && itemId==null) { + item.className = cName; + } + } + } +} + +// Search the document for UL elements with the correct CLASS name, then process them +function convertTrees() { + setDefault("treeClass","mktree"); + setDefault("nodeClosedClass","liClosed"); + setDefault("nodeOpenClass","liOpen"); + setDefault("nodeBulletClass","liBullet"); + setDefault("nodeLinkClass","bullet"); + setDefault("preProcessTrees",true); + if (preProcessTrees) { + if (!document.createElement) { return; } // Without createElement, we can't do anything + uls = document.getElementsByTagName("ul"); + for (var uli=0;uli<uls.length;uli++) { + var ul=uls[uli]; + if (ul.nodeName=="UL" && ul.className==treeClass) { + processList(ul); + } + } + } +} + +// Process a UL tag and all its children, to convert to a tree +function processList(ul) { + if (!ul.childNodes || ul.childNodes.length==0) { return; } + // Iterate LIs + for (var itemi=0;itemi<ul.childNodes.length;itemi++) { + var item = ul.childNodes[itemi]; + if (item.nodeName == "LI") { + // Iterate things in this LI + var subLists = false; + for (var sitemi=0;sitemi<item.childNodes.length;sitemi++) { + var sitem = item.childNodes[sitemi]; + if (sitem.nodeName=="UL") { + subLists = true; + processList(sitem); + } + } + var s= document.createElement("SPAN"); + var t= '\u00A0'; // + s.className = nodeLinkClass; + if (subLists) { + // This LI has UL's in it, so it's a +/- node + if (item.className==null || item.className=="") { + item.className = nodeClosedClass; + } + // If it's just text, make the text work as the link also + if (item.firstChild.nodeName=="#text") { + t = t+item.firstChild.nodeValue; + item.removeChild(item.firstChild); + } + s.onclick = function () { + this.parentNode.className = (this.parentNode.className==nodeOpenClass) ? nodeClosedClass : nodeOpenClass; + return false; + } + } + else { + // No sublists, so it's just a bullet node + item.className = nodeBulletClass; + s.onclick = function () { return false; } + } + s.appendChild(document.createTextNode(t)); + item.insertBefore(s,item.firstChild); + } + } +}
Generated at 13:00 on 08 Feb 2005 by mariachi 0.52