MediaWiki:Common.js

function addOnloadHook(func) { jQuery(document).ready(func); }

/* Funzioni del rendering - separate per richiamarle in anteprima rapida */ var __test_js__ = false;

function hooks_common_render { randomlist; createCollapseButtons; createNavigationBarToggleButton; createToggleLinks; createMorphLinks; multislide_startup; multifade_startup; UserNameReplace; ref_tooltip; alertLink; setTimeout(alertLoad, 1); alertUnload; import_script((/\&lt\;((test)|(abc))(.*)\&gt\;/.test(document.getElementById('bodyContent').innerHTML) && !__test_js__), "Nonciclopedia:Script/Test.js"); target_blank; hiddencats_IE; return; }

/* Funzioni dell'editor */ function hooks_common_edit { var wgAction = mw.config.get('wgAction'); if (wgAction != 'edit' && wgAction != 'submit') return; charinsert_anon_hack; return; } addOnloadHook(hooks_common_edit);

/* Importazione script */ function Script_Import { /*   Sintassi: import_script(CONDIZIONE, SCRIPT); Es.: import_script((wgPageName == "Esempio"), "Esempio.js"); */

var wgPageName = mw.config.get('wgPageName'); import_script((wgPageName == "Speciale:WidgetDashboard"), "Nonciclopedia:Script/Shoutbox.js"); import_script((wgPageName == "Giochi:CasiNonci/Slot_machine"), "Nonciclopedia:Script/SlotMachine.js"); import_script((wgPageName == "Nonciclopedia:Storia/Pagine commemorative/Pesci d'aprile/4"), "Nonciclopedia:Script/Pesce aprile 2010.js"); import_script((wgPageName == "Utente:Zaza/Sandbox/Monabooktor"), "Nonciclopedia:Script/Monabooktor.js"); return; }

function import_script(condition, script) { if (!condition) return; var scriptElem = document.createElement('script'); scriptElem.type = 'text/javascript'; scriptElem.language = 'javascript'; scriptElem.src = '/index.php?title=' + script + '&action=raw&ctype=text/javascript&smaxage=8400'; document.getElementsByTagName('head')[0].appendChild(scriptElem); return; }

/************* Funzioni di utilità generale *************/

/* Test if an element has a certain class ************************************** * * Description: Uses regular expressions and caching for better performance. * Maintainers: User:Mike Dillon, User:R. Koot, User:SG */

var hasClass = (function {   var reCache = {};    return function(element, className) {        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);   }; });

function getElementsByClass(node, className, tagName) { if (node.getElementsByClassName && (tagName == undefined || tagName == null || tagName == '*')) return node.getElementsByClassName(className); var list = node.getElementsByTagName(tagName ? tagName : '*'); var array = new Array; var i = 0; for (i in list) { if (hasClass(list[i], className)) array.push(list[i]); }   return array; }

/* Creates the method getElementsByClass, if unsupported from the browser */ if (!document.getElementsByClass) document.getElementsByClass = function(className) { return getElementsByClass(document, className, '*'); };

function getElementsByName(name, root) { if (root == undefined) root = document; var e = root.getElementsByTagName('*'); var r = new Array; for (var i = 0; i < e.length; i++) { if (e[i].getAttribute('name') == name) r[r.length] = e[i]; }   return r; }

function getText(e) { if (e.textContent) return e.textContent; else if (e.innerText) return e.innerText; else return null; }

function setText(e, t) { if (e.textContent) e.textContent = t;   else if (e.innerText) e.innerText = t;    else { e.textContent = t;       e.innerText = t;    } // entrambi nulli, non si può discriminare return; }

function appendText(e, t) { if (e.textContent) e.textContent += t;   else if (e.innerText) e.innerText += t;    else { e.textContent = t;       e.innerText = t;    } return; }

/* Crea una request Ajax */ function createRequest { if (window.XMLHttpRequest) { // Mozilla, Safari... return new XMLHttpRequest; } else if (window.ActiveXObject) { // IEmmerda return new ActiveXObject("Microsoft.XMLHTTP"); }   return }

/* Restituisce il valore di un cookie */ function getCookie(name) { if (document.cookie.length == 0) return null; var start = document.cookie.indexOf(name); if (start == -1) return null; start += name.length + 1; var end = document.cookie.indexOf(';', start); if (end == -1) end = document.cookie.length; return unescape(document.cookie.substring(start, end)); }

/* Aggiunge uno zero alle cifre minori di 10 nella rappresentazione testuale */ function addzero(n) { if (n < 10) return '0' + n.toString; else return n.toString; }

function addEvent(el, ev, f, capt) { if (capt == undefined) capt = false; if (el.addEventListener) el.addEventListener(ev, f, capt); else if (el.attachEvent) el.attachEvent('on' + ev, f); return; }

function removeEvent(el, ev, f, capt) { if (capt == undefined) capt = false; if (el.removeEventListener) el.removeEventListener(ev, f, capt); else if (el.detachEvent) el.detachEvent('on' + ev, f); return; }

var noFade = false;

function Fade(element, delay, i, rev, ratio) { if (noFade) return; /* rev = sparizione; se !rev, ratio = opacità finale; se rev, ratio = opacità iniziale*/ var start_time = new Date.getTime; var start_value = rev ? ratio : 0; element.style.filter = "alpha(opacity=" + start_value * 100 + ")"; element.style.opacity = start_value; if (!parseInt(element.style.width) && navigator.appName == "Microsoft Internet Explorer") element.style.width = element.offsetWidth + 'px'; setTimeout(function {       Do    }, i); return;

function Do { var cur_time = new Date.getTime; var past_time = cur_time - start_time; if (past_time >= delay) { /* ultima chiamata */ var final_value = rev ? 0 : ratio; element.style.filter = "alpha(opacity=" + final_value * 100 + ")"; element.style.opacity = final_value; return; }       var progress = past_time / delay; var new_value = rev ? ratio * (1 - progress) : ratio * progress; element.style.filter = "alpha(opacity=" + new_value * 100 + ")"; element.style.opacity = new_value; setTimeout(function {           Do;        }, i); return; } }

var noSlide = false;

function Slide(element, param, final_value, final_size, delay, i) { if (noSlide) return; /* NB: Il valore finale deve avere la stessa unità di misura di quello iniziale! */   var start_time = new Date.getTime; var unit = 'px'; if (typeof(final_value) == 'string') { final_value = final_value.split(/\D/); if (final_value.length > 1) unit = final_value[1]; final_value = parseFloat(final_value[0]); }   var start_value = Get; var sub = (start_value > final_value) ? true : false; var diff = Math.abs(start_value - final_value); var start_size; if (param == 'top' || param == 'bottom') start_size = element.parentNode.offsetHeight; else if (param == 'left' || param == 'right') start_size = element.parentNode.offsetWidth; var diff_size = Math.abs(start_size - final_size); setTimeout(function {       Do;    }, i); return;

function Do { var cur_time = new Date.getTime; var past_time = cur_time - start_time; if (past_time >= delay) { /* ultima chiamata */ Set(final_value); if (param == 'top' || param == 'bottom') element.parentNode.style.height = final_size + unit; else if (param == 'left' || param == 'right') element.parentNode.style.width = final_size + unit; return; }       var progress = diff * past_time / delay; new_value = (sub) ? start_value - progress : start_value + progress; Set(new_value); new_size = (sub) ? start_size - diff_size * past_time / delay : start_size + diff_size * past_time / delay; if (param == 'top' || param == 'bottom') element.parentNode.style.height = new_size + unit; else if (param == 'left' || param == 'right') element.parentNode.style.width = new_size + unit; setTimeout(function {           Do;        }, i); return; }

function Get { var ret; switch (param) { case 'top': ret = element.style.top; break; case 'bottom': ret = element.style.bottom; break; case 'left': ret = element.style.left; break; case 'right': ret = element.style.right; break; default: return false; }       if (/em/i.test(ret)) return parseFloat(ret); return (/\d+/.test(ret)) ? parseInt(ret) : 0; }

function Set(v) { switch (param) { case 'top': element.style.top = v + unit; return; case 'bottom': element.style.bottom = v + unit; return; case 'left': element.style.left = v + unit; return; case 'right': element.style.right = v + unit; return; default: return false; }   } }

/************* Funzioni applicative ***************/

// ============================================================ // BEGIN Dynamic Navigation Bars (experimantal) // This script is from Wikipedia. For author attribution, please see http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.js&action=history

/** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See *              NavFrame. * Maintainers: User:R. Koot */

var autoCollapse = 0; // numero massimo di barre visibili // per default al caricamento di una pagina 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.getElementsByTagName("tr");

if (Button.firstChild.data == collapseCaption) { for (var i = 1; i < Rows.length; i++) { Rows[i].style.display = "none"; }       Button.firstChild.data = expandCaption; } else { for (var i = 1; i < Rows.length; i++) { Rows[i].style.display = Rows[0].style.display; }       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") && !Tables[i].id) { NavigationBoxes[tableIndex] = Tables[i]; Tables[i].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.setAttribute("id", "collapseButton" + tableIndex); ButtonLink.setAttribute("href", "javascript:collapseTable(" + tableIndex + ");"); ButtonLink.appendChild(ButtonText);

Button.appendChild(document.createTextNode("[")); Button.appendChild(ButtonLink); Button.appendChild(document.createTextNode("]"));

var Header = Tables[i].getElementsByTagName("tr")[0].getElementsByTagName("th")[0]; /* only add button and increment count if there is a header row to work with */ if (Header) { Header.insertBefore(Button, Header.childNodes[0]); tableIndex++; }       }    }

for (var i = 0; i < tableIndex; i++) { if (hasClass(NavigationBoxes[i], "collapsed") || (tableIndex >= autoCollapse && hasClass(NavigationBoxes[i], "autocollapse"))) { collapseTable(i); }   } }

/** Dynamic Navigation Bars (experimental) ************************************* * * Description: See NavFrame. * Maintainers: UNMAINTAINED */

// set up the words in your language var NavigationBarHide = '[' + collapseCaption + ']'; var NavigationBarShow = '[' + expandCaption + ']';

// set up max count of Navigation Bars on page, // if there are more, all will be hidden // NavigationBarShowDefault = 0; // all bars will be hidden // NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden var NavigationBarShowDefault = autoCollapse;

// shows and hides content and picture (if available) of navigation bars // Parameters: //    indexNavigationBar: the index of navigation bar to be toggled var noNavSlide = true;

function toggleNavigationBar(indexNavigationBar) { var NavToggle = document.getElementById("NavToggle" + indexNavigationBar); var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);

if (!NavFrame || !NavToggle) { return false; }

// if shown now if (NavToggle.firstChild.data == NavigationBarHide) { if (!hasClass(NavFrame, 'no-slide') && !noNavSlide) NavSlide(NavFrame, true); else { for (               var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling            ) { if (hasClass(NavChild, 'NavPic')) { NavChild.style.display = 'none'; }               if (hasClass(NavChild, 'NavContent')) { NavChild.style.display = 'none'; }           }        }        NavToggle.firstChild.data = NavigationBarShow;

// if hidden now } else if (NavToggle.firstChild.data == NavigationBarShow) { for (           var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling        ) { if (hasClass(NavChild, 'NavPic')) { NavChild.style.display = 'block'; }           if (hasClass(NavChild, 'NavContent')) { NavChild.style.display = 'block'; }       }        if (!hasClass(NavFrame, 'no-slide') && !noNavSlide) NavSlide(NavFrame, false); NavToggle.firstChild.data = NavigationBarHide; } }

var NavigationBarSlideDelay = 600; var NavigationBarSlideInterval = 70; var NavigationBarFadeDelay = 400; var NavigationBarFadeInterval = 70;

function NavSlide(NavFrame, close) { /* close = chiusura */ for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) { if (hasClass(NavChild, 'NavPic') || hasClass(NavChild, 'NavContent')) Slide(NavChild); }   return;

function Slide(element) { if (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.userAgent[navigator.userAgent.indexOf("MSIE") + 5]) >= 8) return; var fade = !hasClass(NavFrame, 'no-fade'); var start_time = new Date.getTime + NavigationBarFadeDelay * ((close && fade) ? 1.1 : 0); var size = element.offsetHeight; var start_value = close ? 0 : 0 - size; var final_value = close ? 0 - size : 0; element.style.marginTop = start_value + 'px'; element.style.width = 'auto'; if (fade) { if (close) Fade(element, NavigationBarFadeDelay, NavigationBarFadeInterval, true, 0.7); else { element.style.filter = "alpha(opacity=0)"; element.style.opacity = 0; }       }        setTimeout(function {            Do;        }, NavigationBarSlideInterval + NavigationBarFadeDelay * ((close && fade) ? 1.1 : 0));       return;

function Do { var cur_time = new Date.getTime; var past_time = cur_time - start_time; if (past_time >= NavigationBarSlideDelay) { element.style.marginTop = final_value + 'px'; if (!close && fade) Fade(element, NavigationBarFadeDelay, NavigationBarFadeInterval, false, 1); if (close) element.style.display = 'none'; return; }           var progress = past_time / NavigationBarSlideDelay; var new_value = close ? final_value * progress : start_value * (1 - progress); element.style.marginTop = new_value + 'px'; setTimeout(function {               Do;            }, NavigationBarSlideInterval); return; }   } }

// adds show/hide-button to navigation bars function createNavigationBarToggleButton { var indexNavigationBar = 0; // iterate over all -elements var divs = document.getElementsByTagName("div"); for (       var i = 0; NavFrame = divs[i]; i++    ) { // if found a navigation bar if (hasClass(NavFrame, "NavFrame")) {

indexNavigationBar++; var NavToggle = document.createElement("a"); NavToggle.className = 'NavToggle'; NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar); NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

var NavToggleText = document.createTextNode(NavigationBarHide); NavToggle.appendChild(NavToggleText); // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) for (               var j = 0; j < NavFrame.childNodes.length; j++            ) { if (hasClass(NavFrame.childNodes[j], "NavHead")) { NavFrame.childNodes[j].appendChild(NavToggle); }           }            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar); }   }    // if more Navigation Bars found than Default: hide all if (NavigationBarShowDefault < indexNavigationBar) { for (           var i = 1; i <= indexNavigationBar; i++        ) { toggleNavigationBar(i); }   }

}

/** Codice sostituzione Username (template:USERNAME) ******************************* * Inserts user name into * By Splarka */ var disableUsernameReplace = false;

function UserNameReplace { if (disableUsernameReplace) return; var list = getElementsByClass(document.getElementsByTagName('body')[0], "insertusername", 'span'); if (list.length < 1) return; var wgUserName = mw.config.get('wgUserName'); if (wgUserName) { for (var i = 0; UserName = list[i]; i++) { setText(UserName, wgUserName); }       return; }   var defaultText = " "; var userpage = document.getElementById("pt-anonuserpage"); if (userpage != null) { var IP = getText(userpage.getElementsByTagName('a')[0]); if (IP == null) return; for (var i = 0; UserName = list[i]; i++) { if (getText(UserName) == defaultText) setText(UserName, IP); }       return; }   var httpRequest; if (window.XMLHttpRequest) { // Mozilla, Safari, ... httpRequest = new XMLHttpRequest; } else if (window.ActiveXObject) { // IE       httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); }   var id = setTimeout(function {        httpRequest.abort;    }, 30000); httpRequest.onreadystatechange = function { if (httpRequest.readyState != 4) return; clearTimeout(id); if (httpRequest.status != 200) return; if (httpRequest.responseXML == null) return; var IP = httpRequest.responseXML.getElementsByTagName('userinfo')[0].getAttribute("name"); if (IP == null) return; for (var i = 0; UserName = list[i]; i++) { if (getText(UserName) == defaultText) setText(UserName, IP); }       return; }   var wgServer = mw.config.get('wgServer'); var wgScriptPath = mw.config.get('wgScriptPath'); httpRequest.open('GET', wgServer + wgScriptPath + "/api.php?action=query&meta=userinfo&format=xml", true); httpRequest.send(''); return; }

/* Generatori di alert */

/* Carica un alert su un link prima di caricare la nuova pagina, oppure su un link "fasullo", senza caricare nessuna nuova pagina*/ function alertLink { for (var i = 0; Elem = document.getElementsByTagName("span")[i]; i++) { if ((Elem.getAttribute('id') == "alert-link") || (Elem.getAttribute('id') == "alert-nolink")) { var Link = Elem.firstChild; var Testo = Elem.title; Link.setAttribute('onclick', 'alert("' + Testo + '");'); if (Elem.getAttribute('id') == "alert-nolink") { Link.removeAttribute('href', 0); }       }    } }

/* Carica uno o più alert al caricamento della pagina */ var disablealertLoad = 0;

function alertLoad { if (disablealertLoad) return; for (var i = 0; Elem = document.getElementsByTagName("span")[i]; i++) { if (Elem.getAttribute('id') == "alert-load") { var Testo = Elem.innerText || Elem.textContent; alert(Testo); }   } }

/* Carica uno o più alert all'uscita dalla pagina */ function alertUnload { if (disablealertLoad) return; for (var i = 0; Elem = document.getElementsByTagName("span")[i]; i++) { if (Elem.getAttribute('id') == "alert-unload") { var Testo = Elem.innerText || Elem.textContent; var temp = document.getElementsByTagName("body")[0].getAttribute('onUnload'); if (temp) document.getElementsByTagName("body")[0].setAttribute('onUnload', temp + 'alert("' + Testo + '");'); else document.getElementsByTagName("body")[0].setAttribute('onUnload', 'alert("' + Testo + '");'); }   } }

/* Elenchi random */ function randomlist {

if (document.getElementsByClassName('randomlist') &&       document.getElementsByClassName('randomcontent') &&        document.getElementsByClassName('randomtext')) { var listNumber = document.getElementsByClassName('randomlist').length; for (var k = 0; k < listNumber; k++) { var max = parseInt(document.getElementsByClassName('randomlist')[k].title); var List = document.getElementsByClass('randomcontent')[k].getElementsByTagName('li'); var Text = document.getElementsByClass('randomtext')[k]; var N = new Array;

if (max == 1) var dot = ''; else var dot = '• ';

Text.innerHTML = ''; for (var i = 0; i < max; i++) { do { n = Math.round(Math.random * (List.length - 1)); for (var j = 0; j < i && n != -1; j++) { if (N[j] == n) n = -1; }               } while (n == -1) N[i] = n;               var Item = document.createElement('div'); Item.innerHTML = dot + List[n].innerHTML; Text.appendChild(Item); }       }    } }

/* Hook that enables collapsing objects. * Added 11/5/2007 by WhiteMystery (misterioblanco@gmail.com) * on Encyclopedia Dramatica, stolen by Zaza * Improved with multiMorph and galleryMorph by MFH * Enhanced with fading effect by Sanjilops * Uses publicly available code in one function, where noted. */

var noMorphSFX = true;

/* Function that toggles collapsing objects. * Added 11/5/2007 by WhiteMystery (misterioblanco@gmail.com) * on Encyclopedia Dramatica, stolen by Zaza * Uses publicly available code in one function, where noted. */

function tableOrNot(objId) {

if (document.getElementById(objId).tagName == "TABLE") return "table"; else return "block"; }

var toggleLinkDelay = 700; var toggleLinkInterval = 10;

function toggleCollapse(objToToggle) { var objToToggle = this.parentNode.id.replace(/Link$/, '');

var linkText = ""; var targetObject = returnObjById(objToToggle); if (!targetObject) return; var collapseText = returnObjById(objToToggle + "CollapseText").innerHTML; var expandText = returnObjById(objToToggle + "ExpandText").innerHTML; var slide = !hasClass(returnObjById(objToToggle + "Link"), "no-slide") && !noMorphSFX; var fade = !hasClass(returnObjById(objToToggle + "Link"), 'no-fade') && !noMorphSFX; if (targetObject.style.display == "none") { targetObject.style.display = tableOrNot(objToToggle); linkText = collapseText; if (slide) Slide(targetObject, false); if (fade) { if (!parseInt(targetObject.style.width) && navigator.appName == "Microsoft Internet Explorer") targetObject.style.width = targetObject.offsetWidth + 'px'; targetObject.style.filter = "alpha(opacity=0)"; targetObject.style.opacity = 0; setTimeout(function {               Fade(targetObject, toggleLinkDelay, toggleLinkInterval, false, 1);            }, 1); }   } else { if (slide) { Slide(targetObject, true); setTimeout(function {               targetObject.style.display = "none";            }, toggleLinkDelay + toggleLinkInterval); if (fade) setTimeout(function {               Fade(targetObject, toggleLinkDelay, toggleLinkInterval, true, 0.8);            }, 1); } else { if (fade) { setTimeout(function {                   Fade(targetObject, toggleLinkDelay, toggleLinkInterval, true, 0.8);                }, 1); setTimeout(function {                   targetObject.style.display = "none";                }, toggleLinkDelay + toggleLinkInterval); } else targetObject.style.display = "none"; }       linkText = expandText; }

var toggleLink = returnObjById(objToToggle + "Link-"); toggleLink.innerHTML = linkText;

function Slide(element, close) { if (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.userAgent[navigator.userAgent.indexOf("MSIE") + 5]) >= 8) return; var start_time = new Date.getTime; var size = element.offsetHeight; var start_value = close ? 0 : 0 - size; var final_value = close ? 0 - size : 0; element.style.marginTop = start_value + 'px'; element.style.width = 'auto'; setTimeout(function {           Do;        }, toggleLinkInterval); return;

function Do { var cur_time = new Date.getTime; var past_time = cur_time - start_time; if (past_time >= NavigationBarSlideDelay) { element.style.marginTop = final_value + 'px'; return; }           var progress = past_time / toggleLinkDelay; var new_value = close ? final_value * progress : start_value * (1 - progress); element.style.marginTop = new_value + 'px'; setTimeout(function {               Do;            }, toggleLinkInterval); return; }   } }

function createToggleLinks {

var toggleLinkCollection = document.getElementsByClass("toggleLink");

for (var i = 0; i < toggleLinkCollection.length; i++) { var spanID = toggleLinkCollection[i].getAttribute("id"); var targetID = spanID.substr(0, spanID.length - 4); var collapseText = returnObjById(targetID + "CollapseText").innerHTML; var expandText = returnObjById(targetID + "ExpandText").innerHTML; var initialState = returnObjById(targetID + "InitialState").innerHTML;

var toggleLink = document.createElement("a"); toggleLinkCollection[i].appendChild(toggleLink);

if (initialState == "0") {

returnObjById(targetID).style.display = "none"; toggleLink.innerHTML = expandText; } else {

returnObjById(targetID).style.display = tableOrNot(targetID); toggleLink.innerHTML = collapseText; }

toggleLink.onclick = toggleCollapse;

//toggleLink.className = "morphLink"; toggleLink.id = targetID + "Link-";

} }

/* Functions that performs the morph operation. * Added 11/5/2007 by WhiteMystery (misterioblanco@gmail.com) * on Encyclopedia Dramatica, stolen by Zaza * Uses publicly available code in one function, where noted. */

var MorphFadeDelay = 800; var MorphFadeInterval = 50;

function performMorph(targetID, targetNumber) {

var counter = 1;

while (returnObjById(targetID + "Content" + counter)) {

if (counter == targetNumber) { returnObjById(targetID + "Content" + counter).style.display = tableOrNot(targetID + "Content" + counter); if (!hasClass(returnObjById(targetID + "Master"), 'no-fade') && !noMorphSFX) Fade(returnObjById(targetID + "Content" + counter), MorphFadeDelay, MorphFadeInterval, false, 1); } else returnObjById(targetID + "Content" + counter).style.display = "none";

counter++; }

returnObjById(targetID + "Master").innerHTML = targetNumber; }

function morphForward {

var targetID = this.getAttribute('name').replace(/LinkNext$/, ''); var nextPane = parseInt(returnObjById(targetID + "Master").innerHTML) + 1;

if (returnObjById(targetID + "Content" + nextPane)) performMorph(targetID, nextPane);

else performMorph(targetID, "1"); }

function morphBackward {

var targetID = this.getAttribute('name').replace(/LinkPrev$/, ''); var prevPane = parseInt(returnObjById(targetID + "Master").innerHTML) - 1;

if (prevPane > 0) performMorph(targetID, prevPane);

else {

var maxIndex = 1;

while (returnObjById(targetID + "Content" + maxIndex)) maxIndex++;

performMorph(targetID, maxIndex - 1); } }

/* Special functions for the galleryMorph, * created by MFH */

function performGalleryMorph(targetID, targetNumber) {

var counter = 1;

while (returnObjById(targetID + "Content" + counter)) {

if (counter == targetNumber) { returnObjById(targetID + "Content" + counter).style.display = tableOrNot(targetID + "Content" + counter); if (!hasClass(returnObjById(targetID + "Master"), 'no-fade') && !noMorphSFX) Fade(returnObjById(targetID + "Content" + counter), MorphFadeDelay, MorphFadeInterval, false, 1); } else returnObjById(targetID + "Content" + counter).style.display = "none";

counter++; }

if (targetNumber == 1) { returnObjById(targetID + "LinkPrev").style.display = "none"; } else { returnObjById(targetID + "LinkPrev").style.display = tableOrNot(targetID + "LinkPrev"); }

if (targetNumber == counter - 1) { returnObjById(targetID + "LinkNext").style.display = "none"; } else { returnObjById(targetID + "LinkNext").style.display = tableOrNot(targetID + "LinkNext"); }

galleryCounter = returnObjById(targetID + "Master").getAttribute("counter"); returnObjById(targetID + "Counter").innerHTML = "(" + targetNumber + "/" + galleryCounter + ")"; returnObjById(targetID + "Master").innerHTML = targetNumber; }

function galleryMorphForward {

var targetID = this.getAttribute('name').replace(/LinkNext$/, ''); var nextPane = parseInt(returnObjById(targetID + "Master").innerHTML) + 1;

if (returnObjById(targetID + "Content" + nextPane)) performGalleryMorph(targetID, nextPane);

else performGalleryMorph(targetID, "1"); }

function galleryMorphBackward { var targetID = this.getAttribute('name').replace(/LinkPrev$/, ''); var prevPane = parseInt(returnObjById(targetID + "Master").innerHTML) - 1;

if (prevPane > 0) performGalleryMorph(targetID, prevPane);

else {

var maxIndex = 1;

while (returnObjById(targetID + "Content" + maxIndex)) maxIndex++;

performGalleryMorph(targetID, maxIndex - 1); } }

/* Function that creates ED's collapsing objects and toggle links. * Added 11/5/2007 by WhiteMystery (misterioblanco@gmail.com) * on Encyclopedia Dramatica, stolen by Zaza * Uses publicly available code in one function, where noted. * * Updated: 1/11/2008 by WhiteMystery to add new Morphing Objects * functionality. * Updated: 23/5/2009 by MFH to add 2 new kinds of morph: * multiMorph and galleryMorph */

function createMorphLinks {

var morphMasterCollection = document.getElementsByClass("morphMaster"); var multiMorphMasterCollection = document.getElementsByClass("multiMorphMaster"); var galleryMorphMasterCollection = document.getElementsByClass("galleryMorphMaster");

for (var i = 0; i < morphMasterCollection.length; i++) {

var spanID = morphMasterCollection[i].getAttribute("id"); var targetID = spanID.substr(0, spanID.length - 6); var counter = 1;

// Create forward and backward paging if the paging elements exist if (returnObjById(targetID + "LinkNext") && returnObjById(targetID + "LinkPrev") && returnObjById(targetID + "Content1")) {

// Create the forward link var nextLink = document.createElement("div"); nextLink.innerHTML = returnObjById(targetID + "LinkNext").innerHTML; nextLink.setAttribute('name', targetID + "LinkNext"); nextLink.onclick = morphForward; nextLink.className = "morphLink";

returnObjById(targetID + "LinkNext").innerHTML = ""; returnObjById(targetID + "LinkNext").appendChild(nextLink, 0);

// Create the backward link var prevLink = document.createElement("div"); prevLink.innerHTML = returnObjById(targetID + "LinkPrev").innerHTML; prevLink.setAttribute('name', targetID + "LinkPrev"); prevLink.onclick = morphBackward; prevLink.className = "morphLink";

returnObjById(targetID + "LinkPrev").innerHTML = ""; returnObjById(targetID + "LinkPrev").appendChild(prevLink, 0);

// Initialize content panes while (returnObjById(targetID + "Content" + counter)) {

if (counter == 1) returnObjById(targetID + "Content" + counter).style.display = tableOrNot(targetID + "Content" + counter); else returnObjById(targetID + "Content" + counter).style.display = "none";

counter++; }       }

counter = 1;

// Whether or not there is paging, generate normal links while (returnObjById(targetID + "Link" + counter) && returnObjById(targetID + "Content" + counter)) {

var morphLink = document.createElement("div"); morphLink.innerHTML = returnObjById(targetID + "Link" + counter).innerHTML; returnObjById(targetID + "Link" + counter).innerHTML = ""; returnObjById(targetID + "Link" + counter).appendChild(morphLink); morphLink.className = "morphLink"; morphLink.setAttribute('name', targetID + "Link" + counter); morphLink.onclick = function { var targetID = this.getAttribute('name').replace(/Link\d+$/, ''); var targetNumber = this.parentNode.id.replace(/.+Link/, ''); performMorph(targetID, targetNumber); return };

// Initialize content panes if (counter == 1) returnObjById(targetID + "Content" + counter).style.display = tableOrNot(targetID + "Content" + counter); else returnObjById(targetID + "Content" + counter).style.display = "none";

counter++; }

morphMasterCollection[i].innerHTML = "1"; morphMasterCollection[i].style.display = "none"; }

for (var i = 0; i < multiMorphMasterCollection.length; i++) {

var spanID = multiMorphMasterCollection[i].getAttribute("id"); var targetID = spanID.substr(0, spanID.length - 6); var counter = 1;

// Create forward and backward paging if the paging elements exist if (document.getElementsByClass(targetID + "LinkNext") && document.getElementsByClass(targetID + "LinkPrev") && document.getElementsByClass(targetID + "Content1")) {

// Create the forward link var nextLinkCollection = document.getElementsByClass(targetID + "LinkNext"); for (j = 0; j < nextLinkCollection.length; j++) { var nextLink = document.createElement("div"); nextLink.innerHTML = nextLinkCollection[j].innerHTML; nextLink.setAttribute('name', targetID + "LinkNext"); nextLink.onclick = morphForward; nextLink.className = "morphLink";

nextLinkCollection[j].innerHTML = ""; nextLinkCollection[j].appendChild(nextLink, 0); }

// Create the backward link var prevLinkCollection = document.getElementsByClass(targetID + "LinkPrev"); for (j = 0; j < prevLinkCollection.length; j++) { var prevLink = document.createElement("div"); prevLink.innerHTML = prevLinkCollection[j].innerHTML; prevLink.setAttribute('name', targetID + "LinkPrev"); prevLink.onclick = morphBackward; prevLink.className = "morphLink";

prevLinkCollection[j].innerHTML = ""; prevLinkCollection[j].appendChild(prevLink, 0); }

// Initialize content panes while (returnObjById(targetID + "Content" + counter)) {

if (counter == 1) returnObjById(targetID + "Content" + counter).style.display = tableOrNot(targetID + "Content" + counter); else returnObjById(targetID + "Content" + counter).style.display = "none";

counter++; }       }

counter = 1;

// Whether or not there is paging, generate normal links while (document.getElementsByClass(targetID + "Link" + counter) && returnObjById(targetID + "Content" + counter)) {

var morphLinkCollection = document.getElementsByClass(targetID + "Link" + counter); for (j = 0; j < morphLinkCollection.length; j++) { var morphLink = document.createElement("div"); morphLink.innerHTML = morphLinkCollection[j].innerHTML; morphLinkCollection[j].innerHTML = ""; morphLink.setAttribute('name', targetID + "Link" + counter); morphLinkCollection[j].appendChild(morphLink, 0);

morphLink.onclick = function { var targetID = this.getAttribute('name').replace(/Link\d+$/, ''); var targetNumber = this.getAttribute('name').replace(/.+Link/, ''); performMorph(targetID, targetNumber); return };               morphLink.className = "morphLink";

}

// Initialize content panes if (counter == 1) returnObjById(targetID + "Content" + counter).style.display = tableOrNot(targetID + "Content" + counter); else returnObjById(targetID + "Content" + counter).style.display = "none";

counter++; }

multiMorphMasterCollection[i].innerHTML = "1"; multiMorphMasterCollection[i].style.display = "none"; }

for (var i = 0; i < galleryMorphMasterCollection.length; i++) {

var spanID = galleryMorphMasterCollection[i].getAttribute("id"); var targetID = spanID.substr(0, spanID.length - 6); var counter = 1;

// Create forward and backward paging if the paging elements exist if (returnObjById(targetID + "LinkNext") && returnObjById(targetID + "LinkPrev") && returnObjById(targetID + "Content1")) {

// Create the forward link var nextLink = document.createElement("div"); nextLink.innerHTML = returnObjById(targetID + "LinkNext").innerHTML; nextLink.setAttribute('name', targetID + "LinkNext"); nextLink.onclick = galleryMorphForward; nextLink.className = "morphLink";

returnObjById(targetID + "LinkNext").innerHTML = ""; returnObjById(targetID + "LinkNext").appendChild(nextLink, 0);

// Create the backward link var prevLink = document.createElement("div"); prevLink.innerHTML = returnObjById(targetID + "LinkPrev").innerHTML; prevLink.setAttribute('name', targetID + "LinkPrev"); prevLink.onclick = galleryMorphBackward; prevLink.className = "morphLink";

returnObjById(targetID + "LinkPrev").innerHTML = ""; returnObjById(targetID + "LinkPrev").appendChild(prevLink, 0);

// Initialize content panes while (returnObjById(targetID + "Content" + counter)) {

if (counter == 1) returnObjById(targetID + "Content" + counter).style.display = tableOrNot(targetID + "Content" + counter); else returnObjById(targetID + "Content" + counter).style.display = "none";

counter++; }

if (counter == 2) { returnObjById(targetID + "LinkNext").style.display = "none"; }

galleryCounter = counter - 1; returnObjById(targetID + "Master").setAttribute("counter", galleryCounter); if (returnObjById(targetID + "Counter")) { returnObjById(targetID + "Counter").innerHTML = "(1/" + galleryCounter + ")"; }       }

galleryMorphMasterCollection[i].innerHTML = "1"; galleryMorphMasterCollection[i].style.display = "none"; } }

/* Function that toggles ED's collapsing objects. * Added 11/5/2007 by WhiteMystery (misterioblanco@gmail.com) * on Encyclopedia Dramatica, stolen by Zaza * Taken from http://www.netlobo.com/javascript_get_element_id.html */

function returnObjById(id) {

if (document.getElementById) var returnVar = document.getElementById(id); else if (document.all) var returnVar = document.all[id]; else if (document.layers) var returnVar = document.layers[id]; return returnVar; }

/* Attiva il charinsert per gli anonimi nel box "newarticleintro" */ function charinsert_anon_hack { var wgAction = mw.config.get('wgAction'); var wgArticleId = mw.config.get('wgArticleId'); var wgUserName = mw.config.get('wgUserName'); if (!(wgAction == "edit" && wgArticleId == 0 && wgUserName == null)) return; var box = getElementsByClass(document.getElementById("bodyContent"), "mw-newarticletextanon", 'div')[0]; if (!box) return; var link = '<' + 'a href="#" onclick="insertTags(&#39;$1&#39;,&#39;&#39;,&#39;&#39;);return false">$1<' + '/a>'; box.innerHTML = box.innerHTML.replace(/&lt;charinsert&gt;(.+?)&lt;\/charinsert&gt;/, link); return; }

/* Function to add a "purge" button at the top of the page, * usefull for dpl, random and similar things that need the * cache of the server. * * Created by MFH */ var buttonPurge = 0;

function createPurgeButton { var wgCanonicalNamespace = mw.config.get('wgCanonicalNamespace'); var wgPageName = mw.config.get('wgPageName'); var wgServer = mw.config.get('wgServer'); var wgScriptPath = mw.config.get('wgScriptPath'); if (buttonPurge == 0 || wgCanonicalNamespace == 'Special') return; if (document.getElementById('ca-report-problem')) { /* Modifies the "report a problem" button, that is already invisible */ document.getElementById('ca-report-problem').getElementsByTagName('a')[0].innerHTML = 'Purge'; document.getElementById('ca-report-problem').getElementsByTagName('a')[0].href = wgServer + wgScriptPath + '/index.php?title=' + wgPageName + '&action=purge'; document.getElementById('ca-report-problem').setAttribute('id', 'ca-purge'); } else { var menuList = document.getElementById('p-cactions').getElementsByTagName('ul')[0]; var newLi = document.createElement('li'); newLi.setAttribute('id', 'ca-purge'); newLi.innerHTML = 'Purge'; menuList.appendChild(newLi); } }

/* Visualizza correttamente categorie nascoste in IE */ function hiddencats_IE { if (navigator.appName != "Microsoft Internet Explorer") return; var div = document.getElementById("mw-hidden-catlinks"); if (div == null) return; var span = document.createElement('span'); span.id = 'mw-hidden-catlinks-switch'; span.innerHTML = "&gt;&gt;"; div.insertBefore(span, div.firstChild); return; }

/* Class che aggiunge "target= '_blank'" ai link */ function target_blank { var tags = getElementsByClass(document.getElementsByTagName('body')[0], "target-blank"); if (tags == null) return; var i, j, links; for (i = 0; i < tags.length; i++) { links = tags[i].getElementsByTagName('a'); for (j = 0; j < links.length; j++) links[j].target = '_blank'; }   return; }

/* Funzione che imposta il tasto "modifica" sulla versione corrente nella schermata delle differenze; non attiva di default. addOnloadHook(editcurrentid); function editcurrentid { var b = document.getElementById('ca-edit'); if (!b) return; if (getElementsByClass(document, 'diff', 'table').length == 0) return; var l = b.firstChild; l.href = l.href.replace(/&oldid=\d+/, ''); appendText(l, '*'); return; }
 * Per attivarla inserire nel proprio monobook.js il codice:

/* multiSFX */ var multislide_time = 1000; var multislide_interval = 10; var noMultislide = false; var multislide_state = new Object; var multislide_master = new Object;

function multislide_startup { if (noMultislide) return; var toggles = getElementsByClass(document, "multislideToggle"); if (!toggles.length) return; var names = new Array; var id = '', i, elements, master; for (var I = 0; I < toggles.length; I++) { id = toggles[I].title; if (String(names).indexOf(id) != -1) continue; names[names.length] = id; multislide_state[id] = false; master = document.getElementById(id + "Master"); if (master) { multislide_master[id] = new Object; multislide_master[id].onload = hasClass(master, "slideOnload"); multislide_master[id].time = (/slideTime-\d+/.test(master.className)) ? parseInt(master.className.match(/slideTime-(\d+)/)[1]) : -1; multislide_master[id].fade = hasClass(master, "slideFade"); } else multislide_master[id] = null; }   var dom, n;    for (I = 0; I < names.length; I++) { id = names[I]; n = 0; dom = document.getElementsByTagName('body')[0].getElementsByTagName('*'); for (i = 0; i < dom.length; i++) { if (dom[i].title == id && dom[i].nodeName.toUpperCase != 'A') { if (hasClass(dom[i], "multislideToggle")) { dom[i].setAttribute('name', id + "-Toggle"); CreateToggle(dom[i], id, n); n++; } else { dom[i].setAttribute('name', id + "-Content"); SetStartPosition(dom[i]); }               dom[i].removeAttribute('title'); }       }        if (multislide_master[id] && multislide_master[id].onload) multislide_toggle(id, multislide_master[id].time); }   return;

function CreateToggle(el, id, n) { var time = (/slideTime-\d+/.test(el.className)) ? parseInt(el.className.match(/slideTime-(\d+)/)[1]) : -1; var fade = hasClass(el, "slideFade"); if (hasClass(el, "slideHover")) { el.onmouseover = function { multislide_toggle(id, time, fade, true); return; }           el.onmouseout = function { multislide_toggle(id, time, fade, false); return; }       } else el.onclick = function { multislide_toggle(id, time, fade); return; };       var On = getElementsByClass(el, "slideOn")[0]; if (!On) return; var toggle; if (el.firstChild.nodeType != 1) { toggle = document.createElement('span'); toggle.innerHTML = el.firstChild.nodeValue; el.replaceChild(toggle, el.firstChild); } else toggle = el.firstChild; toggle.id = id + "-toggle" + n; /* dato che n è i, gli id possono non essere consecutivi */ On.id = id + "-toggle" + n + "-on"; var Off = getElementsByClass(el, "slideOff")[0]; if (!Off) { Off = toggle.cloneNode(true); Off.style.display = 'none'; el.appendChild(Off); }       Off.id = id + "-toggle" + n + "-off"; return; }

function SetStartPosition(el) { var height = el.offsetHeight; var width = el.offsetWidth; if (hasClass(el, "slideFromTop")) { el.style.top = '-' + height + 'px'; return; }       if (hasClass(el, "slideFromBottom")) { el.style.bottom = '-' + height + 'px'; return; }       if (!hasClass(el.parentNode, "slideNoResize") && (el.parentNode.style == undefined || !el.parentNode.style.height)) el.parentNode.style.height = height + 'px'; if (hasClass(el, "slideFromLeft")) { el.style.left = '-' + width + 'px'; return; }       if (hasClass(el, "slideFromRight")) el.style.right = '-' + width + 'px'; return; } }

function multislide_toggle(id, toggle_time, toggle_fade, hoverWantedState) { if (hoverWantedState != undefined && hoverWantedState == multislide_state[id]) return; var contents = getElementsByName(id + "-Content"); var el, time, fade; for (var i = 0; i < contents.length; i++) { el = contents[i]; if (/slideTime-\d+/.test(el.className)) time = parseInt(el.className.match(/slideTime-(\d+)/)[1]); else { if (toggle_time != -1) time = toggle_time; else { if (multislide_master[id] && multislide_master[id].time != -1) time = multislide_master[id].time; else time = multislide_time; }       }        fade = hasClass(el, "slideFade") || toggle_fade || (multislide_master[id] && multislide_master[id].fade); var dir = el.className.match(/slideFrom(Top|Bottom|Left|Right)/)[0].substr(9).toLowerCase; var framesize; if (!multislide_state[id]) { if (dir == 'top' || dir == 'bottom') framesize = el.parentNode.offsetHeight + el.offsetHeight; else if (dir == 'left' || dir == 'right') framesize = el.parentNode.offsetWidth + el.offsetWidth; Slide(el, dir, 0, framesize, time, multislide_interval); } else { var size; if (dir == 'top' || dir == 'bottom') { size = el.offsetHeight; framesize = el.parentNode.offsetHeight - size; } else if (dir == 'left' || dir == 'right') { size = el.offsetWidth; framesize = el.parentNode.offsetWidth - size; }           Slide(el, dir, 0 - size, framesize, time, multislide_interval); }       if (fade) _fade(el, time, multislide_state[id]); }   var toggles = getElementsByName(id + "-Toggle"); for (var i = 0; i < toggles.length; i++) { var el = document.getElementById(id + "-toggle" + i); if (!el) continue; el.innerHTML = (multislide_state[id]) ? document.getElementById(id + "-toggle" + i + "-off").innerHTML : document.getElementById(id + "-toggle" + i + "-on").innerHTML; }   multislide_state[id] = !multislide_state[id]; return;

function _fade(el, time, rev) { setTimeout(function {           Fade(el, time, multislide_interval, rev, (rev ? 0.8 : 1));        }, 1); setTimeout(function {           el.style.filter = "alpha(opacity=100)";            el.style.opacity = 1;        }, time + 5 * multislide_interval); return; } }

var multifade_time = 1000; var multifade_interval = 10; var multifade_state = new Object; var multifade_master = new Object; var noMultifade = false;

function multifade_startup { if (noMultifade) return; var toggles = getElementsByClass(document, "multifadeToggle"); if (!toggles.length) return; var names = new Array; var id = '', i, elements, master; for (var I = 0; I < toggles.length; I++) { id = toggles[I].title; if (String(names).indexOf(id) != -1) continue; names[names.length] = id; multifade_state[id] = false; master = document.getElementById(id + "Master"); if (master) { multifade_master[id] = new Object; multifade_master[id].onload = hasClass(master, "fadeOnload"); multifade_master[id].time = (/fadeTime-\d+/.test(master.className)) ? parseInt(master.className.match(/fadeTime-(\d+)/)[1]) : -1; } else multifade_master[id] = null; }   var dom, n;    for (I = 0; I < names.length; I++) { id = names[I]; n = 0; dom = document.getElementsByTagName('body')[0].getElementsByTagName('*'); for (i = 0; i < dom.length; i++) { if (dom[i].title == id && dom[i].nodeName.toUpperCase != 'A') { if (hasClass(dom[i], "multifadeToggle")) { dom[i].setAttribute('name', id + "-Toggle"); CreateToggle(dom[i], id, n); n++; } else { dom[i].setAttribute('name', id + "-Content"); dom[i].style.opacity = 0; dom[i].style.filter = 'alpha(opacity=0)'; }               dom[i].removeAttribute('title'); }       }        if (multifade_master[id] && multifade_master[id].onload) multifade_toggle(id, multifade_master[id].time); }   return;

function CreateToggle(el, id, n) { el.setAttribute('name', id + "-Toggle"); var time = (/fadeTime-\d+/.test(el.className)) ? parseInt(el.className.match(/fadeTime-(\d+)/)[1]) : -1; if (hasClass(el, "fadeHover")) { el.onmouseover = function { multifade_toggle(id, time, true); return; }           el.onmouseout = function { multifade_toggle(id, time, false); return; }       } else el.onclick = function { multifade_toggle(id, time); return; };       var On = getElementsByClass(el, "fadeOn")[0]; if (!On) return; var toggle; if (el.firstChild.nodeType != 1) { toggle = document.createElement('span'); toggle.innerHTML = el.firstChild.nodeValue; el.replaceChild(toggle, el.firstChild); } else toggle = el.firstChild; toggle.id = id + "-toggle" + n; /* dato che n è i, gli id possono non essere consecutivi */ On.id = id + "-toggle" + n + "-on"; var Off = getElementsByClass(el, "fadeOff")[0]; if (!Off) { Off = toggle.cloneNode(true); Off.style.display = 'none'; el.appendChild(Off); }       Off.id = id + "-toggle" + n + "-off"; return; } }

function multifade_toggle(id, general_time, hoverWantedState) { if (hoverWantedState != undefined && hoverWantedState == multifade_state[id]) return; var contents = getElementsByName(id + "-Content"); var el, time; for (var i = 0; i < contents.length; i++) { el = contents[i]; if (/fadeTime-\d+/.test(el.className)) time = parseInt(el.className.match(/fadeTime-(\d+)/)[1]); else { if (general_time != -1) time = general_time; else { if (multifade_master[id] && multifade_master[id].time != -1) time = multifade_master[id].time; else time = multifade_time; }       }        Fade(el, time, multifade_interval, multifade_state[id], multifade_state[id] ? 0.8 : 1); }   var toggles = getElementsByName(id + "-Toggle"); for (var i = 0; i < toggles.length; i++) { var el = document.getElementById(id + "-toggle" + i); if (!el) continue; el.innerHTML = (multifade_state[id]) ? document.getElementById(id + "-toggle" + i + "-off").innerHTML : document.getElementById(id + "-toggle" + i + "-on").innerHTML; }   multifade_state[id] = !multifade_state[id]; return; }

/* Parser for simple math expressions Created by MFH for Nonciclopedia */

function opSolve(opArray, posArray) { var opDivided = new Array(Array(opArray[posArray[0]][0])); var posDivided = new Array(Array(posArray[0], 0)); /* Position, length-1*/ var opDivInd = 0; for (var i = 1; i < posArray.length; i++) { /* Separates the different brackets*/ if (posArray[i] == posArray[i - 1] + 1) { opDivided[opDivInd].push(opArray[posArray[i]][0]); posDivided[opDivInd][1] = posDivided[opDivInd][1] + 1; } else { opDivInd = opDivInd + 1; posDivided.push(Array(posArray[i], 1)); }   }    for (var i = 0; i <= opDivInd; i++) { for (var j = 1; j < opDivided[opDivInd].length - 1; j++) { if (opDivided[i][j] == '^') { opDivided[i][j - 1] = Math.pow(parseFloat(opDivided[i][j - 1]), parseFloat(opDivided[i][j + 1])); opDivided[i].splice(j, 2); j = j - 1; }       }        for (var j = 1; j < opDivided[opDivInd].length - 1; j++) { if (opDivided[i][j] == '*') { opDivided[i][j - 1] = parseFloat(opDivided[i][j - 1]) * parseFloat(opDivided[i][j + 1]); opDivided[i].splice(j, 2); j = j - 1; }           if (opDivided[i][j] == '/') { opDivided[i][j - 1] = parseFloat(opDivided[i][j - 1]) / parseFloat(opDivided[i][j + 1]); opDivided[i].splice(j, 2); j = j - 1; }       }        for (var j = 1; j < opDivided[opDivInd].length - 1; j++) { if (opDivided[i][j] == '+') { opDivided[i][j - 1] = parseFloat(opDivided[i][j - 1]) + parseFloat(opDivided[i][j + 1]); opDivided[i].splice(j, 2); j = j - 1; }           if (opDivided[i][j] == '-') { opDivided[i][j - 1] = parseFloat(opDivided[i][j - 1]) - parseFloat(opDivided[i][j + 1]); opDivided[i].splice(j, 2); j = j - 1; }       }    }    for (var i = posDivided.length - 1; i >= 0; i--) { opArray[posDivided[i][0]] = Array(opDivided[i][0], opArray[posDivided[i][0]][1] - 1); opArray.splice(posDivided[i][0] + 1, posDivided[i][1]); }   return opArray; }

function math_parser(operation, xValue) { var opArray = new Array; var brInd = 0; /* Bracket index */ var brIndMax = 0;

for (var i = 0; i < operation.length; i++) { /* Divides the string in single characters */ var textChunk = operation.substr(i, 1); if (textChunk != ' ') { /* Removes useless spaces */ if (textChunk == '(') { /* Removes brackets, conserving the information */               brInd = brInd + 1;                if (brInd > brIndMax) {                    brIndMax = brInd;                }            } else if (textChunk == ')') { brInd = brInd - 1; } else if (textChunk == 'x') { opArray.push(Array(xValue, brInd)); } else { opArray.push(Array(textChunk, brInd)); }       }    }    i = 0; while (i < opArray.length - 1) { /* Puts numbers together again */ if ((opArray[i][0].match(/[0-9\.]/) || (opArray[i][0].match(/-/) && (i == 0 || opArray[i - 1][1] < opArray[i][1]))) && opArray[i + 1][0].match(/[0-9\.]/)) { /* If is a number or a comma, or if is a minus at the beginnig of a bracket; and the following is a number or a comma */ opArray[i][0] = opArray[i][0] + opArray[i + 1][0]; opArray.splice(i + 1, 1); } else { i++; }   }    for (var i = brIndMax; i >= 0; i--) { var posArray = new Array; for (var j = 0; j < opArray.length; j++) { if (opArray[j][1] == i) { posArray.push(j); }       }        opArray = opSolve(opArray, posArray); }   return opArray[0][0]; }

/*Analisi delle visite*/ function init { codice = document.createElement('script'); codice.type = 'text/javascript'; var wgUserName = mw.config.get('wgUserName'); if (wgUserName) { codice.innerHTML = "var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-17496928-1']); _gaq.push(['_trackPageview']); (function { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);});"; } else { codice.innerHTML = "var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-17496918-1']); _gaq.push(['_trackPageview']); (function {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);});"; }   headTag = document.getElementsByTagName("head")[0]; headTag.appendChild(codice); } addOnloadHook(init);

function facebooklikeboxTEST { window.fbAsyncInit = function { FB.init({           appId: '331743818234',            status: true,            cookie: true,            xfbml: true        }); };   (function {        var e = document.createElement('script');        e.async = true;        e.src = document.location.protocol +            '//connect.facebook.net/en_US/all.js';        document.getElementById('fb-root').appendChild(e);    });

addOnloadHook(facebooklikeboxTEST); }

function importScript(file) { mw.loader.load('/index.php?title=' + file + '&action=raw&ctype=text/javascript'); }

importScript("MediaWiki:Tabber.js"); importScript("MediaWiki:Bootstrap.js");

function clearMainPage { var wgTitle = mw.config.get('wgTitle'); if (wgTitle == 'Main Page') { var h1tags = document.getElementsByTagName("h1"); var h = h1tags[0]; var parent = h.parentNode; parent.removeChild(h); } } addOnloadHook(clearMainPage);

/********************** OnloadHooks **********************/ var hooks_custom = new Array; /* Funzioni generali */ function hooks_common { Script_Import; hooks_common_render; createPurgeButton; return; } addOnloadHook(hooks_common);

/*Slider stuff*/ function initSliders { $(function {       var $tabs = $("#portal_slider").tabs({ fx: { opacity: 'toggle', duration: 100 }       });        $("[class^=portal_sliderlink]").click(function { // bind click event to link $tabs.tabs('select', this.className.replace("portal_sliderlink_", "")); return false; });   });    $(function {        var $tabs = $("#portal2_slider").tabs({ fx: { opacity: 'toggle', duration: 100 }       });        $("[class^=portal2_sliderlink]").click(function { // bind click event to link $tabs.tabs('select', this.className.replace("portal2_sliderlink_", "")); return false; });   });    $(function {        var $tabs = $("#portal3_slider").tabs({ fx: { opacity: 'toggle', duration: 100 }       });        $("[class^=portal3_sliderlink]").click(function { // bind click event to link $tabs.tabs('select', this.className.replace("portal3_sliderlink_", "")); return false; });   });    /* Tabs */ $('ul.tabz').each(function {       // For each set of tabs, we want to keep track of        // which tab is active and it's associated content        var $active, $content, $links = $(this).find('a');

// If the location.hash matches one of the links, use that as the active tab. // If no match is found, use the first link as the initial active tab. $active = $($links.filter('[href="' + location.hash + '"]')[0] || $links[0]); $active.addClass('active');

$content = $($active[0].hash);

// Hide the remaining content $links.not($active).each(function {           $(this.hash).hide;        });

// Bind the click event handler $(this).on('click', 'a', function(e) {           // Make the old tab inactive.            $active.removeClass('active');            $content.hide;

// Update the variables with the new link and content $active = $(this); $content = $(this.hash);

// Make the tab active. $active.addClass('active'); $content.show;

// Prevent the anchor's default click action e.preventDefault; });   });

}

mw.loader.using(['jquery.ui.tabs'], function {   $(function { if ($("#anime-manga").length) { $.get("/Template:AnimeMangaSlider", function(data) {               $("#anime-manga").html($("#mw-content-text", data).html);                initSliders;            }) } else { initSliders; }   }); });

$(document).ready(function {

$('.nav-tabs a').click(function (e) {       e.preventDefault;        $(this).tab('show');        if( $(this).is(".dropdown-menu li a")){            $("#dropdownTabName").html($(this).html);            $("#dropDownTabsLink").dropdown("toggle");        }    }); });