|
|
(98 intermediate revisions by 6 users not shown) |
Line 1: |
Line 1: |
| /* Any JavaScript here will be loaded for all users on every page load. */ | | /* Any JavaScript here will be loaded for all users on desktop */ |
|
| |
|
| if (wgPageName == 'Main_Page' || wgPageName == 'Talk:Main_Page')
| | /* Alternating wiki logo */ |
| addOnloadHook(function () {
| | $(function() { |
| var nstab = document.getElementById('ca-nstab-main')
| | var logos = ['b/bc/Wiki.png', 'd/d7/Wiki_2.png', '9/97/Wiki_3.png', '6/6a/Wiki_4.png', '7/79/Wiki_5.png']; |
| if (nstab && wgUserLanguage=='en') {
| | $('#p-logo a').css('background-image', 'url(https://kh.wiki.gallery/images/' + logos[Math.floor(Math.random() * logos.length)] + ')'); |
| while (nstab.firstChild) nstab = nstab.firstChild
| | }); |
| nstab.nodeValue = 'Main Page'
| |
| }
| |
| }
| |
| ) | |
|
| |
|
| /* Shrinking talk bubble sprites */ | | /* Add user subpages toolbox link */ |
| $(document).ready(function() { | | $(function() { |
| if (document.readyState != "complete") { | | if (mw.config.get('wgCanonicalNamespace') === 'User' && mw.config.get('skin') !== 'timeless') { |
| setTimeout(arguments.callee,100); | | var subpagesLink = '/Special:PrefixIndex/User:' + mw.config.get('wgTitle').split('/')[0] + '/'; |
| return; | | mw.util.addPortletLink('p-tb', subpagesLink, 'User subpages', 't-subpages', 'Subpages for this user'); |
| } | | } |
| $("table.talkbubble").each(function() {
| |
| $(this).find("td").first().width(90).css("text-align","center").find("img").each(function() {
| |
| if ($(this).width() > 90)
| |
| $(this).css("height","auto").width(90);
| |
| });
| |
| });
| |
| }); | | }); |
|
| |
|
| // ============================================================
| | /* Hide page previews when portals are used */ |
| // BEGIN Dynamic Navigation Bars (experimantal)
| | $(function() { |
| // This script is from Wikipedia. For author attribution, please see http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.js&action=history
| | if (document.getElementsByClassName('nav')[0] && document.getElementsByClassName('dropdown')[0]) |
| | | $('head').append('<style type="text/css">.mwe-popups { display: none !important; }</style>'); |
| | | }); |
| /* 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);
| |
| };
| |
| })();
| |
| | |
| /** Collapsible tables *********************************************************
| |
| *
| |
| * Description: Allows tables to be collapsed, showing only the header. See
| |
| * [[Wikipedia:NavFrame]].
| |
| * Maintainers: [[User:R. Koot]]
| |
| */
| |
|
| |
| var autoCollapse = 2;
| |
| var collapseCaption = "hide";
| |
| var expandCaption = "show";
| |
|
| |
| function collapseTable( tableIndex )
| |
| {
| |
| var Button = document.getElementById( "collapseButton" + tableIndex );
| |
| var Table = document.getElementById( "collapsibleTable" + tableIndex );
| |
|
| |
| if ( !Table || !Button ) {
| |
| return false;
| |
| }
| |
|
| |
| var Rows = Table.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" ) ) {
| |
| NavigationBoxes[ tableIndex ] = Tables[i];
| |
| Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
| |
|
| |
| var Button = document.createElement( "span" );
| |
| var ButtonLink = document.createElement( "a" );
| |
| var ButtonText = document.createTextNode( collapseCaption );
| |
|
| |
| Button.style.styleFloat = "right";
| |
| Button.style.cssFloat = "right";
| |
| Button.style.fontWeight = "normal";
| |
| Button.style.textAlign = "right";
| |
| Button.style.width = "6em";
| |
|
| |
| ButtonLink.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 );
| |
| }
| |
| }
| |
| }
| |
| addOnloadHook( createCollapseButtons );
| |
| | |
| /** 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
| |
| 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) {
| |
| 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';
| |
| }
| |
| }
| |
| NavToggle.firstChild.data = NavigationBarHide;
| |
| }
| |
| }
| |
|
| |
| // 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);
| |
| }
| |
| }
| |
|
| |
| }
| |
| addOnloadHook( createNavigationBarToggleButton );
| |
| | |
| | |
| // Code courtesy of pcj of WoWWiki.
| |
| // This is a modified version of the WoWWiki site version, in that it is designed for global.js use.
| |
| | |
| // Code adds a checkbox at the top of the Special:RecentChanges list, next to the header.
| |
| // Ticking it sets a cookie (should be individual to wikis) and starts updating the RC list.
| |
| // This occurs silently every 60 seconds without a full page reload occuring.
| |
| | |
| function setCookie(c_name,value,expiredays) {
| |
| var exdate=new Date()
| |
| exdate.setDate(exdate.getDate()+expiredays)
| |
| document.cookie=c_name+ "=" +escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
| |
| }
| |
| | |
| function getCookie(c_name) {
| |
| if (document.cookie.length>0) {
| |
| c_start=document.cookie.indexOf(c_name + "=")
| |
| if (c_start!=-1) {
| |
| c_start=c_start + c_name.length+1
| |
| c_end=document.cookie.indexOf(";",c_start)
| |
| if (c_end==-1) c_end=document.cookie.length
| |
| return unescape(document.cookie.substring(c_start,c_end))
| |
| }
| |
| }
| |
| return ""
| |
| }
| |
| | |
| function getXmlHttpRequestObject() {
| |
| if (window.XMLHttpRequest) {
| |
| return new XMLHttpRequest(); //Not Internet Explorer
| |
| } else if(window.ActiveXObject) {
| |
| return new ActiveXObject("Microsoft.XMLHTTP"); //Internet Explorer
| |
| } else {
| |
| //fail silently
| |
| }
| |
| }
| |
| getRCDataRO = getXmlHttpRequestObject();
| |
| var cr = new RegExp("\r", "gm");
| |
| var lf = new RegExp("\n", "gm");
| |
| var endText = new RegExp('</div>[\t\s]*?<!-- end content -->[\t\s]*?<div class="visualClear">', "mi");
| |
| var rcTimer;
| |
| var rcRefresh = 60000;
| |
| function preloadAJAXRC() {
| |
| s = 0;
| |
| ajaxRCCookie = getCookie("ajaxRC")=="on" ? true:false;
| |
| document.getElementsByTagName("h1")[s].innerHTML += ' <span style="font-size: xx-small; border-bottom: 1px dotted; cursor:help;" title="Enable auto-refreshing recent changes">AUTO-REFRESH:</span><input type="checkbox" id="ajaxRCtoggle" onClick="toggleRC();">';
| |
| document.getElementById("ajaxRCtoggle").checked = ajaxRCCookie;
| |
| if (getCookie("ajaxRC")=="on") loadRCData();
| |
| }
| |
| | |
| function toggleRC() {
| |
| if (document.getElementById("ajaxRCtoggle").checked == true) {
| |
| setCookie("ajaxRC", "on", 30);
| |
| loadRCData();
| |
| } else {
| |
| setCookie("ajaxRC", "off", 30);
| |
| clearTimeout(rcTimer);
| |
| }
| |
| }
| |
| | |
| function loadRCData() {
| |
| if (getRCDataRO.readyState == 4 || getRCDataRO.readyState == 0) {
| |
| if (location.href.indexOf("/")) {
| |
| rcURL = "http://" + location.hostname + "/Special:RecentChanges" + location.search;
| |
| } else {
| |
| rcURL = "http://" + location.hostname + "/Special:RecentChanges" + location.search;
| |
| }
| |
| getRCDataRO.open("GET", rcURL, true);
| |
| getRCDataRO.onreadystatechange = parseRCdata;
| |
| getRCDataRO.send(null);
| |
| }
| |
| }
| |
| | |
| function parseRCdata() {
| |
| if (getRCDataRO.readyState == 4) {
| |
| textFilter = new RegExp('<div id="bodyContent">.*?</div>[\t\s]*?<!-- end content -->[\t\s]*?<div class="visualClear">', "i");
| |
| rawRCdata = getRCDataRO.responseText.replace(cr, "").replace(lf, "");
| |
| filteredRCdata = textFilter.exec(rawRCdata);
| |
| updatedText = filteredRCdata[0].replace('<div id="bodyContent">', "").replace(endText, "");
| |
| document.getElementById("bodyContent").innerHTML = updatedText;
| |
| rcTimer = setTimeout("loadRCData();", rcRefresh);
| |
| }
| |
| }
| |
| | |
| if (wgPageName == "Special:RecentChanges") addOnloadHook(preloadAJAXRC);
| |
| | |
| /*
| |
| | |
| | |
| ==================================================
| |
| $Id: tabber.js,v 1.9 2006/04/27 20:51:51 pat Exp $
| |
| tabber.js by Patrick Fitzgerald pat@barelyfitz.com
| |
| | |
| Documentation can be found at the following URL:
| |
| http://www.barelyfitz.com/projects/tabber/
| |
| | |
| License (http://www.opensource.org/licenses/mit-license.php)
| |
| | |
| Copyright (c) 2006 Patrick Fitzgerald
| |
| | |
| Permission is hereby granted, free of charge, to any person
| |
| obtaining a copy of this software and associated documentation files
| |
| (the "Software"), to deal in the Software without restriction,
| |
| including without limitation the rights to use, copy, modify, merge,
| |
| publish, distribute, sublicense, and/or sell copies of the Software,
| |
| and to permit persons to whom the Software is furnished to do so,
| |
| subject to the following conditions:
| |
| | |
| The above copyright notice and this permission notice shall be
| |
| included in all copies or substantial portions of the Software.
| |
| | |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
| |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
| |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
| |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
| |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
| |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
| |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
| |
| SOFTWARE.
| |
| ==================================================*/
| |
| | |
| function tabberObj(argsObj)
| |
| {
| |
| var arg; /* name of an argument to override */
| |
| | |
| /* Element for the main tabber div. If you supply this in argsObj,
| |
| then the init() method will be called.
| |
| */
| |
| this.div = null;
| |
| | |
| /* Class of the main tabber div */
| |
| this.classMain = "tabber";
| |
| | |
| /* Rename classMain to classMainLive after tabifying
| |
| (so a different style can be applied)
| |
| */
| |
| this.classMainLive = "tabberlive";
| |
| | |
| /* Class of each DIV that contains a tab */
| |
| this.classTab = "tabbertab";
| |
| | |
| /* Class to indicate which tab should be active on startup */
| |
| this.classTabDefault = "tabbertabdefault";
| |
| | |
| /* Class for the navigation UL */
| |
| this.classNav = "tabbernav";
| |
| | |
| /* When a tab is to be hidden, instead of setting display='none', we
| |
| set the class of the div to classTabHide. In your screen
| |
| stylesheet you should set classTabHide to display:none. In your
| |
| print stylesheet you should set display:block to ensure that all
| |
| the information is printed.
| |
| */
| |
| this.classTabHide = "tabbertabhide";
| |
| | |
| /* Class to set the navigation LI when the tab is active, so you can
| |
| use a different style on the active tab.
| |
| */
| |
| this.classNavActive = "tabberactive";
| |
| | |
| /* Elements that might contain the title for the tab, only used if a
| |
| title is not specified in the TITLE attribute of DIV classTab.
| |
| */
| |
| this.titleElements = ['h2','h3','h4','h5','h6'];
| |
| | |
| /* Should we strip out the HTML from the innerHTML of the title elements?
| |
| This should usually be true.
| |
| */
| |
| this.titleElementsStripHTML = false;
| |
| | |
| /* If the user specified the tab names using a TITLE attribute on
| |
| the DIV, then the browser will display a tooltip whenever the
| |
| mouse is over the DIV. To prevent this tooltip, we can remove the
| |
| TITLE attribute after getting the tab name.
| |
| */
| |
| this.removeTitle = true;
| |
| | |
| /* If you want to add an id to each link set this to true */
| |
| this.addLinkId = false;
| |
| | |
| /* If addIds==true, then you can set a format for the ids.
| |
| <tabberid> will be replaced with the id of the main tabber div.
| |
| <tabnumberzero> will be replaced with the tab number
| |
| (tab numbers starting at zero)
| |
| <tabnumberone> will be replaced with the tab number
| |
| (tab numbers starting at one)
| |
| <tabtitle> will be replaced by the tab title
| |
| (with all non-alphanumeric characters removed)
| |
| */
| |
| this.linkIdFormat = '<tabberid>nav<tabnumberone>';
| |
| | |
| /* You can override the defaults listed above by passing in an object:
| |
| var mytab = new tabber({property:value,property:value});
| |
| */
| |
| for (arg in argsObj) { this[arg] = argsObj[arg]; }
| |
| | |
| /* Create regular expressions for the class names; Note: if you
| |
| change the class names after a new object is created you must
| |
| also change these regular expressions.
| |
| */
| |
| this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi');
| |
| this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi');
| |
| this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi');
| |
| this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi');
| |
| this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi');
| |
| | |
| /* Array of objects holding info about each tab */
| |
| this.tabs = new Array();
| |
| | |
| /* If the main tabber div was specified, call init() now */
| |
| if (this.div) {
| |
| | |
| this.init(this.div);
| |
| | |
| /* We don't need the main div anymore, and to prevent a memory leak
| |
| in IE, we must remove the circular reference between the div
| |
| and the tabber object. */
| |
| this.div = null;
| |
| }
| |
| }
| |
| | |
| | |
| /*--------------------------------------------------
| |
| Methods for tabberObj
| |
| --------------------------------------------------*/
| |
| | |
| | |
| tabberObj.prototype.init = function(e)
| |
| {
| |
| /* Set up the tabber interface.
| |
| | |
| e = element (the main containing div)
| |
| | |
| Example:
| |
| init(document.getElementById('mytabberdiv'))
| |
| */
| |
| | |
| var
| |
| childNodes, /* child nodes of the tabber div */
| |
| i, i2, /* loop indices */
| |
| t, /* object to store info about a single tab */
| |
| defaultTab=0, /* which tab to select by default */
| |
| DOM_ul, /* tabbernav list */
| |
| DOM_li, /* tabbernav list item */
| |
| DOM_a, /* tabbernav link */
| |
| aId, /* A unique id for DOM_a */
| |
| headingElement; /* searching for text to use in the tab */
| |
| | |
| /* Verify that the browser supports DOM scripting */
| |
| if (!document.getElementsByTagName) { return false; }
| |
| | |
| /* If the main DIV has an ID then save it. */
| |
| if (e.id) {
| |
| this.id = e.id;
| |
| }
| |
| | |
| /* Clear the tabs array (but it should normally be empty) */
| |
| this.tabs.length = 0;
| |
| | |
| /* Loop through an array of all the child nodes within our tabber element. */
| |
| childNodes = e.childNodes;
| |
| for(i=0; i < childNodes.length; i++) {
| |
| | |
| /* Find the nodes where class="tabbertab" */
| |
| if(childNodes[i].className &&
| |
| childNodes[i].className.match(this.REclassTab)) {
| |
|
| |
| /* Create a new object to save info about this tab */
| |
| t = new Object();
| |
|
| |
| /* Save a pointer to the div for this tab */
| |
| t.div = childNodes[i];
| |
|
| |
| /* Add the new object to the array of tabs */
| |
| this.tabs[this.tabs.length] = t;
| |
| | |
| /* If the class name contains classTabDefault,
| |
| then select this tab by default.
| |
| */
| |
| if (childNodes[i].className.match(this.REclassTabDefault)) {
| |
| defaultTab = this.tabs.length-1;
| |
| }
| |
| }
| |
| }
| |
| | |
| /* Create a new UL list to hold the tab headings */
| |
| DOM_ul = document.createElement("ul");
| |
| DOM_ul.className = this.classNav;
| |
|
| |
| /* Loop through each tab we found */
| |
| for (i=0; i < this.tabs.length; i++) {
| |
| | |
| t = this.tabs[i];
| |
| | |
| /* Get the label to use for this tab:
| |
| From the title attribute on the DIV,
| |
| Or from one of the this.titleElements[] elements,
| |
| Or use an automatically generated number.
| |
| */
| |
| t.headingText = t.div.title;
| |
| | |
| /* Remove the title attribute to prevent a tooltip from appearing */
| |
| if (this.removeTitle) { t.div.title = ''; }
| |
| | |
| if (!t.headingText) {
| |
| | |
| /* Title was not defined in the title of the DIV,
| |
| So try to get the title from an element within the DIV.
| |
| Go through the list of elements in this.titleElements
| |
| (typically heading elements ['h2','h3','h4'])
| |
| */
| |
| for (i2=0; i2<this.titleElements.length; i2++) {
| |
| headingElement = t.div.getElementsByTagName(this.titleElements[i2])[0];
| |
| if (headingElement) { | |
| t.headingText = headingElement.innerHTML;
| |
| if (this.titleElementsStripHTML) {
| |
| t.headingText.replace(/<br>/gi," ");
| |
| t.headingText = t.headingText.replace(/<[^>]+>/g,"");
| |
| }
| |
| break;
| |
| }
| |
| }
| |
| }
| |
| | |
| if (!t.headingText) {
| |
| /* Title was not found (or is blank) so automatically generate a
| |
| number for the tab.
| |
| */
| |
| t.headingText = i + 1;
| |
| }
| |
| | |
| /* Create a list element for the tab */
| |
| DOM_li = document.createElement("li");
| |
| | |
| /* Save a reference to this list item so we can later change it to
| |
| the "active" class */
| |
| t.li = DOM_li;
| |
| | |
| /* Create a link to activate the tab */
| |
| DOM_a = document.createElement("a");
| |
| DOM_a.appendChild(document.createTextNode(t.headingText));
| |
| DOM_a.href = "javascript:void(null);";
| |
| DOM_a.title = t.headingText;
| |
| DOM_a.onclick = this.navClick;
| |
| | |
| /* Add some properties to the link so we can identify which tab
| |
| was clicked. Later the navClick method will need this.
| |
| */
| |
| DOM_a.tabber = this;
| |
| DOM_a.tabberIndex = i;
| |
| | |
| /* Do we need to add an id to DOM_a? */
| |
| if (this.addLinkId && this.linkIdFormat) {
| |
| | |
| /* Determine the id name */
| |
| aId = this.linkIdFormat;
| |
| aId = aId.replace(/<tabberid>/gi, this.id);
| |
| aId = aId.replace(/<tabnumberzero>/gi, i);
| |
| aId = aId.replace(/<tabnumberone>/gi, i+1);
| |
| aId = aId.replace(/<tabtitle>/gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, ''));
| |
| | |
| DOM_a.id = aId;
| |
| }
| |
| | |
| /* Add the link to the list element */
| |
| DOM_li.appendChild(DOM_a);
| |
| | |
| /* Add the list element to the list */
| |
| DOM_ul.appendChild(DOM_li);
| |
| }
| |
| | |
| /* Add the UL list to the beginning of the tabber div */
| |
| e.insertBefore(DOM_ul, e.firstChild);
| |
| | |
| /* Make the tabber div "live" so different CSS can be applied */
| |
| e.className = e.className.replace(this.REclassMain, this.classMainLive);
| |
| | |
| /* Activate the default tab, and do not call the onclick handler */
| |
| this.tabShow(defaultTab);
| |
| | |
| /* If the user specified an onLoad function, call it now. */
| |
| if (typeof this.onLoad == 'function') {
| |
| this.onLoad({tabber:this});
| |
| }
| |
| | |
| return this;
| |
| };
| |
| | |
| | |
| tabberObj.prototype.navClick = function(event)
| |
| {
| |
| /* This method should only be called by the onClick event of an <A>
| |
| element, in which case we will determine which tab was clicked by
| |
| examining a property that we previously attached to the <A>
| |
| element.
| |
| | |
| Since this was triggered from an onClick event, the variable
| |
| "this" refers to the <A> element that triggered the onClick
| |
| event (and not to the tabberObj).
| |
| | |
| When tabberObj was initialized, we added some extra properties
| |
| to the <A> element, for the purpose of retrieving them now. Get
| |
| the tabberObj object, plus the tab number that was clicked.
| |
| */
| |
| | |
| var
| |
| rVal, /* Return value from the user onclick function */
| |
| a, /* element that triggered the onclick event */
| |
| self, /* the tabber object */
| |
| tabberIndex, /* index of the tab that triggered the event */
| |
| onClickArgs; /* args to send the onclick function */
| |
| | |
| a = this;
| |
| if (!a.tabber) { return false; }
| |
| | |
| self = a.tabber;
| |
| tabberIndex = a.tabberIndex;
| |
| | |
| /* Remove focus from the link because it looks ugly.
| |
| I don't know if this is a good idea...
| |
| */
| |
| a.blur();
| |
| | |
| /* If the user specified an onClick function, call it now.
| |
| If the function returns false then do not continue.
| |
| */
| |
| if (typeof self.onClick == 'function') {
| |
| | |
| onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event};
| |
| | |
| /* IE uses a different way to access the event object */
| |
| if (!event) { onClickArgs.event = window.event; }
| |
| | |
| rVal = self.onClick(onClickArgs);
| |
| if (rVal === false) { return false; }
| |
| }
| |
| | |
| self.tabShow(tabberIndex);
| |
| | |
| return false;
| |
| };
| |
| | |
| | |
| tabberObj.prototype.tabHideAll = function()
| |
| {
| |
| var i; /* counter */
| |
| | |
| /* Hide all tabs and make all navigation links inactive */
| |
| for (i = 0; i < this.tabs.length; i++) {
| |
| this.tabHide(i);
| |
| }
| |
| };
| |
| | |
| | |
| tabberObj.prototype.tabHide = function(tabberIndex)
| |
| {
| |
| var div;
| |
| | |
| if (!this.tabs[tabberIndex]) { return false; }
| |
| | |
| /* Hide a single tab and make its navigation link inactive */
| |
| div = this.tabs[tabberIndex].div;
| |
| | |
| /* Hide the tab contents by adding classTabHide to the div */
| |
| if (!div.className.match(this.REclassTabHide)) {
| |
| div.className += ' ' + this.classTabHide;
| |
| }
| |
| this.navClearActive(tabberIndex);
| |
| | |
| return this;
| |
| };
| |
| | |
| | |
| tabberObj.prototype.tabShow = function(tabberIndex)
| |
| {
| |
| /* Show the tabberIndex tab and hide all the other tabs */
| |
| | |
| var div;
| |
| | |
| if (!this.tabs[tabberIndex]) { return false; }
| |
| | |
| /* Hide all the tabs first */
| |
| this.tabHideAll();
| |
| | |
| /* Get the div that holds this tab */
| |
| div = this.tabs[tabberIndex].div;
| |
| | |
| /* Remove classTabHide from the div */
| |
| div.className = div.className.replace(this.REclassTabHide, '');
| |
| | |
| /* Mark this tab navigation link as "active" */
| |
| this.navSetActive(tabberIndex);
| |
| | |
| /* If the user specified an onTabDisplay function, call it now. */
| |
| if (typeof this.onTabDisplay == 'function') {
| |
| this.onTabDisplay({'tabber':this, 'index':tabberIndex});
| |
| }
| |
| | |
| return this;
| |
| };
| |
| | |
| tabberObj.prototype.navSetActive = function(tabberIndex)
| |
| {
| |
| /* Note: this method does *not* enforce the rule
| |
| that only one nav item can be active at a time.
| |
| */
| |
| | |
| /* Set classNavActive for the navigation list item */
| |
| this.tabs[tabberIndex].li.className = this.classNavActive;
| |
| | |
| return this;
| |
| };
| |
| | |
| | |
| tabberObj.prototype.navClearActive = function(tabberIndex)
| |
| {
| |
| /* Note: this method does *not* enforce the rule
| |
| that one nav should always be active.
| |
| */
| |
| | |
| /* Remove classNavActive from the navigation list item */
| |
| this.tabs[tabberIndex].li.className = '';
| |
| | |
| return this;
| |
| };
| |
| | |
| | |
| /*==================================================*/
| |
| | |
| | |
| function tabberAutomatic(tabberArgs)
| |
| {
| |
| /* This function finds all DIV elements in the document where
| |
| class=tabber.classMain, then converts them to use the tabber
| |
| interface.
| |
| | |
| tabberArgs = an object to send to "new tabber()"
| |
| */
| |
| var
| |
| tempObj, /* Temporary tabber object */
| |
| divs, /* Array of all divs on the page */
| |
| i; /* Loop index */
| |
| | |
| if (!tabberArgs) { tabberArgs = {}; }
| |
| | |
| /* Create a tabber object so we can get the value of classMain */
| |
| tempObj = new tabberObj(tabberArgs);
| |
| | |
| /* Find all DIV elements in the document that have class=tabber */
| |
| | |
| /* First get an array of all DIV elements and loop through them */
| |
| divs = document.getElementsByTagName("div");
| |
| for (i=0; i < divs.length; i++) {
| |
|
| |
| /* Is this DIV the correct class? */
| |
| if (divs[i].className &&
| |
| divs[i].className.match(tempObj.REclassMain)) {
| |
|
| |
| /* Now tabify the DIV */
| |
| tabberArgs.div = divs[i];
| |
| divs[i].tabber = new tabberObj(tabberArgs);
| |
| }
| |
| }
| |
|
| |
| return this;
| |
| }
| |
| | |
| | |
| /*==================================================*/
| |
| | |
| | |
| function tabberAutomaticOnLoad(tabberArgs)
| |
| {
| |
| | |
| /* This function adds tabberAutomatic to the window.onload event,
| |
| so it will run after the document has finished loading.
| |
| */
| |
| // var oldOnLoad;
| |
| | |
| if (!tabberArgs) { tabberArgs = {}; }
| |
| | |
| /* Taken from: http://simon.incutio.com/archive/2004/05/26/addLoadEvent */
| |
| | |
| /*oldOnLoad = window.onload;
| |
| if (typeof window.onload != 'function') {
| |
| window.onload = function() {
| |
| tabberAutomatic(tabberArgs);
| |
| };
| |
| } else {
| |
| window.onload = function() {
| |
| oldOnLoad();
| |
| tabberAutomatic(tabberArgs);
| |
| };
| |
| }*/
| |
| | |
| //Use the wiki onload
| |
| addOnloadHook(function() {
| |
| tabberAutomatic(tabberArgs);
| |
| })
| |
| | |
| }
| |
| | |
| | |
| /*==================================================*/
| |
| /* Run tabberAutomaticOnload() unless the "manualStartup" option was specified */
| |
| | |
| if (typeof tabberOptions == 'undefined') {
| |
| | |
| tabberAutomaticOnLoad();
| |
| | |
| } else {
| |
| | |
| if (!tabberOptions['manualStartup']) {
| |
| tabberAutomaticOnLoad(tabberOptions);
| |
| }
| |
| | |
| }
| |
| | |
| function restoreWatchlistLink () {
| |
| var wlLink = document.createElement('a');
| |
| wlLink.href = '/Special:Watchlist';
| |
| wlLink.title = 'Your watchlist';
| |
| wlLink.innerHTML = "My watchlist";
| |
| var wlObj = document.createElement('span');
| |
| wlObj.id = 'header_mywatchlist';
| |
| wlObj.appendChild(wlLink);
| |
| document.getElementById('userData').insertBefore(wlObj, document.getElementById('header_mytalk').nextSibling);
| |
| }
| |
| addOnloadHook(restoreWatchlistLink);
| |
| /* Paypal button for main page */
| |
| function onloadhookcustom() {
| |
| var replace = document.getElementById("AdolasPayPal");
| |
| if (null != replace) {
| |
| replace.innerHTML='<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHLwYJKoZIhvcNAQcEoIIHIDCCBxwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBaym2+12iEuvbGoC5aLTZHkxlTOXdG3Us2TW7H5dJQXFAUFMXun4rJhGd+3r8fiR+UpEqMe9hK0MRsF6/gXU6vMGiq4Zokim5xrH6xqCJkA/QqEt8T3unB8Uw7mG6dpNNmhxAl11HWTQrp17+UG8WQ7EXZE5FsyhiuCpL2Y/yvojELMAkGBSsOAwIaBQAwgawGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIwKi5Xipnn5+AgYjFEemIjoEfQiaX+ysiHhaicd+LVQlQao97lXgvAJm9K0OMz60ma9yMSUch9n0RrRy0M4vtfUW55Bn6i43WbsOKnTAelMQn5pfuRmpEuY91MXlHFFp1rv7UmmK9jehCq+3wsaHWlCUIb/aZcFGgyxPE6MdRNgVWNSfYZKdX43tDeladvRK7nje5oIIDhzCCA4MwggLsoAMCAQICAQAwDQYJKoZIhvcNAQEFBQAwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMB4XDTA0MDIxMzEwMTMxNVoXDTM1MDIxMzEwMTMxNVowgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBR07d/ETMS1ycjtkpkvjXZe9k+6CieLuLsPumsJ7QC1odNz3sJiCbs2wC0nLE0uLGaEtXynIgRqIddYCHx88pb5HTXv4SZeuv0Rqq4+axW9PLAAATU8w04qqjaSXgbGLP3NmohqM6bV9kZZwZLR/klDaQGo1u9uDb9lr4Yn+rBQIDAQABo4HuMIHrMB0GA1UdDgQWBBSWn3y7xm8XvVk/UtcKG+wQ1mSUazCBuwYDVR0jBIGzMIGwgBSWn3y7xm8XvVk/UtcKG+wQ1mSUa6GBlKSBkTCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCBXzpWmoBa5e9fo6ujionW1hUhPkOBakTr3YCDjbYfvJEiv/2P+IobhOGJr85+XHhN0v4gUkEDI8r2/rNk1m0GA8HKddvTjyGw/XqXa+LSTlDYkqI8OwR8GEYj4efEtcRpRYBxV8KxAW93YDWzFGvruKnnLbDAF6VR5w/cCMn5hzGCAZowggGWAgEBMIGUMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbQIBADAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTAwNjI5MDU0MzUxWjAjBgkqhkiG9w0BCQQxFgQUDu3F8t0ulM4+fYCNulXS78TSO9YwDQYJKoZIhvcNAQEBBQAEgYA8KcP9MvE9n2LF8fuNJ7pEkZzh2m9tWpfZy6c5R14R6vmoqyXd68e99/Mao1hl8TCwwGikAMzhqwIsT7hfvrYtgfGRCQqL8E1+XhsvFygiKloVayM4rlc25MQtPr0KYm5YMArd0CFIFPrmK/RbT09HjkPOZvuM4d7j3/hz2Wu79Q==-----END PKCS7-----"><input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"></form>';
| |
| }
| |
| }
| |
| addOnloadHook(onloadhookcustom)
| |
| | |
| | |
| //countdown stuff
| |
| function updatetimer(i) {
| |
| var now = new Date();
| |
| var then = timers[i].eventdate;
| |
| var diff = Math.floor((then.getTime()-now.getTime())/1000);
| |
|
| |
| // catch bad date strings
| |
| if(isNaN(diff)) {
| |
| timers[i].firstChild.nodeValue = '** ' + timers[i].eventdate + ' **' ;
| |
| return;
| |
| }
| |
|
| |
| // reduce modulo period if necessary
| |
| if(timers[i].period > 0){
| |
| if(diff<0) diff = timers[i].period - ((-diff)%timers[i].period); else diff = diff%timers[i].period;
| |
| }
| |
|
| |
| // determine plus/minus
| |
| if(diff<0) {
| |
| diff = -diff;
| |
| var tpm = ' ';
| |
| } else {
| |
| var tpm = ' ';
| |
| }
| |
|
| |
| // calcuate the diff
| |
| var left = (diff%60) + ' seconds';
| |
| diff=Math.floor(diff/60);
| |
| if(diff > 0) left = (diff%60) + ' minutes ' + left;
| |
| diff=Math.floor(diff/60);
| |
| if(diff > 0) left = (diff%24) + ' hours ' + left;
| |
| diff=Math.floor(diff/24);
| |
| if(diff > 0) left = diff + ' days ' + left
| |
| timers[i].firstChild.nodeValue = tpm + left;
| |
|
| |
| // a setInterval() is more efficient, but calling setTimeout()
| |
| // makes errors break the script rather than infinitely recurse
| |
| timeouts[i] = setTimeout('updatetimer(' + i + ')',1000);
| |
| }
| |
|
| |
| function checktimers() {
| |
| //hide 'nocountdown' and show 'countdown'
| |
| var nocountdowns = getElementsByClassName(document, 'span', 'nocountdown');
| |
| for(var i in nocountdowns) nocountdowns[i].style.display = 'none'
| |
| var countdowns = getElementsByClassName(document, 'span', 'countdown');
| |
| for(var i in countdowns) countdowns[i].style.display = 'inline'
| |
|
| |
| //set up global objects timers and timeouts.
| |
| timers = getElementsByClassName(document, 'span', 'countdowndate');
| |
| timeouts = new Array(); // generic holder for the timeouts, global
| |
| if(timers.length == 0) return;
| |
| for(var i in timers) {
| |
| var str = timers[i].firstChild.nodeValue;
| |
| var j = str.indexOf('|');
| |
| if(j == -1) timers[i].period = 0; else {
| |
| timers[i].period = parseInt(str.substr(0, j));
| |
| if(isNaN(timers[i].period) || timers[i].period < 0) timers[i].period = 0;
| |
| str = str.substr(j + 1);
| |
| }
| |
| timers[i].eventdate = new Date(str);
| |
| updatetimer(i); //start it up
| |
| }
| |
| }
| |
| 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((/\<\;((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];
| |