User:Greennave/monaco.js

var DOCHEAD = document.getElementsByTagName('HEAD')[0];

function createElement(tag,children,props){ var element = document.createElement(tag); if (!(children instanceof Array)) children=[children]; for(var i=0;i<children.length;i++){ var child=children[i]; if (typeof child=='string') child=document.createTextNode(child); if (child) element.appendChild(child); } if (typeof props=='object') { for(var k in props){ switch (k) { case 'styles': var styles=props.styles; for (var s in styles) element.style[s]=styles[s]; break; case 'events': var events=props.events; for (var e in events) addHandler(element,e,events[e]); break; case 'class': element.className=props[k]; break; default: element.setAttribute(k,props[k]); } } } return element; }

function insertCSS(page) { insertExternalCSS(wgScriptPath + '/index.php?title=' + encodeURIComponent(page.replace(/ /g, '_')) + '&action=raw&ctype=text/css'); }

function insertExternalCSS(sheetURL) { var styleElem = document.createElement('style'); styleElem.setAttribute('type','text/css'); try { styleElem.appendChild( document.createTextNode('@import "' + sheetURL + '";')); } catch (el){ // a hack to fix problem with Internet Explorer document.createStyleSheet(sheetURL); } DOCHEAD.appendChild(styleElem); }

document.write(' ');

// BEGIN Dynamic Navigation Bars (experimental) Script taken from Wikipedia. // Test if an element has a certain class // Description: Uses regular expressions and caching for better performance.

function setCookie(c_name,value,expiredays) { var exdate=new Date; exdate.setDate(exdate.getDate+expiredays); document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString); }

function getCookie(c_name) { if (document.cookie.length>0) { c_start=document.cookie.indexOf(c_name + "="); if (c_start!=-1) { c_start=c_start + c_name.length+1; c_end=document.cookie.indexOf(";",c_start); if (c_end==-1) c_end=document.cookie.length; return unescape(document.cookie.substring(c_start,c_end)); } } return ""; }

var hasClass = (function { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; }); var autoCollapse = 2; var collapseCaption = "hide"; var expandCaption = "show"; function collapseTable(tableIndex) { var Button = document.getElementById("collapseButton" + tableIndex); var Table = document.getElementById("collapsibleTable" + tableIndex); if (!Table || !Button) return false; var Rows = Table.rows; if (Button.firstChild.data == collapseCaption) { for (var i = 1; i < Rows.length; i++) Rows[i].style.display = "none"; setCookie("hideTable-" + wgArticleId + "-" + tableIndex,1,30); Button.firstChild.data = expandCaption; } else { for (var i = 1; i < Rows.length; i++) Rows[i].style.display = Rows[0].style.display; setCookie("hideTable-" + wgArticleId + "-" + tableIndex,0,30); Button.firstChild.data = collapseCaption; } } function createCollapseButtons { var tableIndex = 0; var NavigationBoxes = new Object; var Tables = document.getElementsByTagName("table"); for (var i = 0; i < Tables.length; i++) { if (hasClass(Tables[i], "collapsible")) { // only add button and increment count if there is a header row to work with var HeaderRow = Tables[i].getElementsByTagName("tr")[0]; if (!HeaderRow) continue; var Header = HeaderRow.getElementsByTagName("th")[0]; if (!Header) continue; NavigationBoxes[tableIndex] = Tables[i]; Tables[i].setAttribute("id", "collapsibleTable" + tableIndex); var Button = document.createElement("span"); var ButtonLink = document.createElement("a"); var ButtonText = document.createTextNode(collapseCaption); Button.style.styleFloat = "right"; Button.style.cssFloat = "right"; Button.style.fontWeight = "normal"; Button.style.textAlign = "right"; Button.style.width = "6em"; ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute("id", "collapseButton" + tableIndex); ButtonLink.setAttribute("href", "javascript:collapseTable(" + tableIndex + ");"); ButtonLink.appendChild(ButtonText); Button.appendChild(document.createTextNode("[")); Button.appendChild(ButtonLink); Button.appendChild(document.createTextNode("]")); Header.insertBefore(Button, Header.childNodes[0]); tableIndex++; } } for (var i = 0; i < tableIndex; i++) { if (hasClass(NavigationBoxes[i], "collapsed") || (getCookie("hideTable-" + wgArticleId + "-" + i) == 1) || (tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse"))) collapseTable(i); } }

addOnloadHook(createCollapseButtons);

// Dynamic Navigation Bars // Description: See NavFrame. var NavigationBarHide = '[' + collapseCaption + ']'; var NavigationBarShow = '[' + expandCaption + ']';