- From: Olivier Thereaux via cvs-syncmail <cvsmail@w3.org>
- Date: Thu, 15 Jun 2006 06:44:13 +0000
- To: www-validator-cvs@w3.org
Update of /sources/public/2002/css-validator In directory hutz:/tmp/cvs-serv22565 Added Files: toggle.js Log Message: script and images to toggle extra options --- NEW FILE: toggle.js --- // toggling event visibility // v2.01 Kent Brewster, 6/8/2006 // questions? comments? please visit: // http://www.mindsack.com // namespace protection: one global variable to rule them all var MINDSACK = {}; MINDSACK.uxe = {}; MINDSACK.uxe.toggle = { init : function(toggle, closed, hidden) { // three class names, fed in from init call this.toggleClass = toggle; this.toggleClosed = closed; this.toggleHidden = hidden; // crawl through the document, look for toggled elements this.crawl(document.body); }, crawl : function(el) { // get this element's next sibling var nextSib = this.getNextSibling(el); // if it has a class name, the class name matches our toggle class, and there's something there to toggle: if (el.className && el.className.match(this.toggleClass) && nextSib) { // attach onmouseup to the toggle function el.onmouseup = this.toggleState; // if the next sib ought to be hidden and it isn't already, hide it // you can hard-code class=hidden in the HTML if you like, and avoid the Flash of Unstyled Content if (el.className.match(this.toggleClosed) && nextSib && !nextSib.className.match(this.toggleHidden)) { nextSib.className += ' ' + this.toggleHidden; el.parentNode.className += ' ' + this.toggleClosed; } } // is there more to do? Do it, if so: if (el.firstChild) { this.crawl(el.firstChild); } if (nextSib) { this.crawl(nextSib); } }, toggleState : function(v) { // there's got to be a way to get this without stating it explicitly var o = MINDSACK.uxe.toggle; // v is the event; we don't need to pass this in when calling! // what element did we click? var el = o.getEl(v); // change the style of the triggering element if(el.className.match(o.toggleClosed)) { el.className = el.className.replace(o.toggleClosed, ''); } else { el.className = el.className + ' ' + o.toggleClosed; } var p = el.parentNode; if(p.className.match(o.toggleClosed)) { p.className = p.className.replace(o.toggleClosed, ''); } else { p.className = p.className + ' ' + o.toggleClosed; } // change the style of the parent node's next block-level element var nextSib = o.getNextSibling(el); // yes, we need to check if it's really there; other scripts could have removed it if(nextSib && nextSib.className.match('hidden')) { nextSib.className = nextSib.className.replace(o.toggleHidden, ''); } else { nextSib.className += ' ' + o.toggleHidden; } }, getNextSibling : function(el) { var nextSib = el.nextSibling; // hack for Gecko browsers if (nextSib && nextSib.nodeType != 1) { nextSib = nextSib.nextSibling; } return nextSib; }, getEl : function(v) { var tg = (v) ? v : event; var el = null; if (tg.target) { el = (tg.target.nodeType == 3) ? tg.target.parentNode : tg.target; } else { el = tg.srcElement; } return el; } }; // feed it the CSS class names of your choice window.onload = function() { MINDSACK.uxe.toggle.init('toggle', 'closed', 'hidden'); };
Received on Thursday, 15 June 2006 06:44:39 UTC