MediaWiki:Common.js: Difference between revisions

m
Reverted edits by KrytenKoro (talk) to last revision by Soxra
No edit summary
m (Reverted edits by KrytenKoro (talk) to last revision by Soxra)
Line 939: Line 939:
}
}
addOnloadHook(checktimers);
addOnloadHook(checktimers);
/* 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;
}
/*PASTING EVERYTHING IN HERE, PLEASE REMOVE THE BITS THAT AREN'T MORPHLINKS */
/********************** OnloadHooks **********************/
var hooks_custom = new Array();
/* Funzioni generali */
function hooks_common () {
Script_Import();
hooks_common_render();
createPurgeButton();
return;
}
addOnloadHook(hooks_common);
/* 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 () {
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");
*/
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
  *              [[Wikipedia: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 [[Wikipedia: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 < div >-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 <span id="insertusername"></span>
  * By [[wikia:User:Splarka|Splarka]]
  */
var disableUsernameReplace = false;
function UserNameReplace() {
if (disableUsernameReplace) return;
var list = getElementsByClass(document.getElementsByTagName('body')[0], "insertusername", 'span');
if (list.length < 1) return;
if (wgUserName) {
for (var i=0; UserName = list[i]; i++) {
setText(UserName, wgUserName);
}
return;
}
var defaultText = "<tuo nome>";
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;
}
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.getElementsByClass('randomlist') &&
    document.getElementsByClass('randomcontent') &&
    document.getElementsByClass('randomtext')) {
  var listNumber = document.getElementsByClass('randomlist').length;
  for (var k = 0; k < listNumber; k++) {
  var max = parseInt(document.getElementsByClass('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];
53,710

edits