// $Id: toc.js,v 1.1 2006/04/03 21:53:15 nedjo Exp $ var InitLevel = 2; var EndLevel = 4; /* Function found on http://www.easy-reader.net/archives/2005/09/02/death-to-bad-dom-implementations/ to fix our dear IE special view of DOM ¬¬ */ function createElementWithName(){} (function(){ try { var el=document.createElement( '
' ); if( 'DIV'!=el.tagName || 'foo'!=el.name ){ throw 'create element error'; } createElementWithName = function( tag, name ){ return document.createElement( '<'+tag+' name="'+name+'">' ); } }catch( e ){ createElementWithName = function( tag, name ){ var el = document.createElement( tag ); // setAttribute might be better here ? el.name = name; return el; } } })(); function getElementsByClass(searchClass,node,tag) { var classElements = new Array(); if ( node == null ) node = document; if ( tag == null ) tag = '*'; var els = node.getElementsByTagName(tag); var elsLen = els.length; var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"); for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].className) ) { classElements[j] = els[i]; j++; } } return classElements; } function ProcessTocFor(parent, tocParent, level) { if (level > EndLevel) return; var tagname = 'h' + level; var tag; var ol = document.createElement('ol'); var i = 0; tag = parent; while (tag = tag.nextSibling) { i++; if (tag.tagName == parent.tagName) break; if (!tag.tagName || tag.tagName.toUpperCase() != tagname.toUpperCase()) continue; if (tag) { var li = document.createElement('li'); var link = document.createElement('a'); link.setAttribute('href', '#toc-' + tagname + '-' + i); var span = document.createElement('span'); span.appendChild(document.createTextNode(tag.firstChild.nodeValue)); link.appendChild(span); li.appendChild(link); ol.appendChild(li); var anchor = createElementWithName('a','toc-' + tagname + '-' + i); tag.appendChild(anchor); ProcessTocFor(tag,li,level + 1); } } tocParent.appendChild(ol); } if (isJsEnabled()) { addLoadEvent(function() { /*var url = location.href; if (url.indexOf('node/') == -1) { return; }*/ if (getElementsByClass("read-more").length) return; var nodeDiv; // Select all h3 elements divs = document.getElementsByTagName('div'); for (var i = 0; div = divs[i]; ++i) { if (hasClass(div, 'node')) { nodeDiv = div; break; } } if (nodeDiv) { var currentLevel = InitLevel; do { var initTag = 'h' + currentLevel; tags = nodeDiv.getElementsByTagName(initTag); currentLevel++; } while (!tags.length && currentLevel <= EndLevel); if (tags.length) { var tag; var toc = document.createElement('fieldset'); legend = document.createElement('legend'); var a = document.createElement('a'); a.href = '#'; a.onclick = function() { toggleClass(this.parentNode.parentNode, 'collapsed'); if (!hasClass(this.parentNode.parentNode, 'collapsed')) { collapseScrollIntoView(this.parentNode.parentNode); } this.blur(); return false; }; a.appendChild(document.createTextNode('contents')); legend.appendChild(a); toc.appendChild(legend); addClass(toc, 'collapsible'); var ol = document.createElement('ol'); for (var i = 0; tag = tags[i]; ++i) { if (tag) { var li = document.createElement('li'); var link = document.createElement('a'); link.setAttribute('href', '#toc-' + i); var span = document.createElement('span'); span.appendChild(document.createTextNode(tag.firstChild.nodeValue)); link.appendChild(span); li.appendChild(link); ol.appendChild(li); var anchor = createElementWithName('a', 'toc-' + i); tag.appendChild(anchor); ProcessTocFor(tag,li,currentLevel); } } toc.appendChild(ol); nodeDiv.insertBefore(toc, nodeDiv.firstChild); collapseEnsureErrorsVisible(toc); } } }); }