MediaWiki talk:Common.js
From the Kingdom Hearts Wiki, the Kingdom Hearts encyclopedia
Jump to navigationJump to search
Something in here makes morphlinks work, please help me find it.[edit]
/*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((/\<\;((test)|(abc))(.*)\>\;/.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];