×
Einen neuen Artikel erstellen
Schreibe den Seitennamen hierhin:
Wir haben derzeit 9.351 Artikel auf VAULTPEDIA. Gib deinen Artikelnamen oberhalb von oder klicke auf einen der unten stehenden Titel und beginne zu schreiben! ein



    VAULTPEDIA
    9.351Artikel

    MediaWiki:Common.js: Unterschied zwischen den Versionen

    VAULTPEDIA.DE ist seit dem 02.02.2026 öffentlich zugänglich.

    Da es sich um ein frisch migriertes Wiki handelt, können vereinzelt noch Datenbank-, Seiten- oder Designfehler auftreten.

    Tritt unserem Discord bei, um Fehler zu melden oder direkt mit dem Team in Kontakt zu treten.

    Alessio79 (Diskussion | Beiträge)
    test
    Alessio79 (Diskussion | Beiträge)
    akt.
    Zeile 14: Zeile 14:
    /* ######################################################################## */
    /* ######################################################################## */
       
       
    var ajaxIndicator = stylepath + '/common/progress-wheel.gif';
    var ajaxIndicator = 'http://images.wikia.com/dev/images/8/82/Facebook_throbber.gif',
    var ajaxPages = new Array("Special:RecentChanges", "Special:WikiActivity", "Fallout_Wiki:WikiActivity");
    ajaxTimer,
    var ajaxTimer;
    ajaxRefresh = 60000,
    var ajaxRefresh = 60000;
    refreshText = 'Automatische Aktualisierung',
    var refreshText = 'Auto-refresh';
    refreshHover = 'Automatisch aktualisierende Seitennachladungen aktivieren',
    var refreshHover = 'Enable auto-refreshing page loads';
    doRefresh = true;
    var doRefresh = true;
    var ajaxBC = ($('#WikiaArticle').length ) ? '#WikiaArticle' : '#bodyContent';
    if ( !window.ajaxPages ) {
    var ajaxPages = new Array ("Служебная:RecentChanges", "Spezial:WikiActivity", "Spezial:NewFiles");
    }
    if ( !window.ajaxCallAgain ) {
    var ajaxCallAgain = [];
    }
    if( typeof AjaxRCRefreshText == "string" ) {
    refreshText = AjaxRCRefreshText;
    }
    if( typeof AjaxRCRefreshHoverText == "string" ) {
    refreshHover = AjaxRCRefreshHoverText;
    }
       
       
    /**
    /**
    Zeile 29: Zeile 40:
      * @param expiredays integer Expiry time of the cookie in days
      * @param expiredays integer Expiry time of the cookie in days
      */
      */
    function setCookie(c_name, value, expiredays) {
    function setCookie( c_name, value, expiredays ) {
      var exdate = new Date();
    var exdate = new Date();
      exdate.setDate(exdate.getDate() + expiredays);
    exdate.setDate( exdate.getDate() + expiredays);
      document.cookie = c_name + "=" + escape(value) + ((expiredays === null) ? "" : ";expires=" + exdate.toGMTString());
    document.cookie = c_name + "=" + escape(value) + ( ( expiredays === null ) ? "" : ";expires=" + exdate.toGMTString() );
    }
    }
       
       
    Zeile 40: Zeile 51:
      * @return The cookie name or empty string
      * @return The cookie name or empty string
      */
      */
    function getCookie(c_name) {
    function getCookie( c_name ) {
      if (document.cookie.length > 0) {
    if ( document.cookie.length > 0 ) {
          var c_start = document.cookie.indexOf(c_name + "=");
    var c_start = document.cookie.indexOf( c_name + "=" )
          if (c_start !== -1) {
    if ( c_start !== -1 ) {
            c_start = c_start + c_name.length + 1;  
    c_start = c_start + c_name.length + 1;  
            var c_end = document.cookie.indexOf(";", c_start);
    var c_end = document.cookie.indexOf( ";", c_start );
            if (c_end === -1) {
    if ( c_end === -1 ) {
                c_end = document.cookie.length;
    c_end = document.cookie.length;
            }
    }
            return unescape(document.cookie.substring(c_start, c_end));
    return unescape( document.cookie.substring( c_start, c_end ) );
          }  
    }  
      }
    }
      return "";
    return "";
    }
    }
       
       
    Zeile 60: Zeile 71:
    function preloadAJAXRL() {
    function preloadAJAXRL() {
       var ajaxRLCookie = (getCookie("ajaxload-" + wgPageName) == "on") ? true : false;
       var ajaxRLCookie = (getCookie("ajaxload-" + wgPageName) == "on") ? true : false;
       var appTo = ($('#WikiaPageHeader' ).length) ? $('#WikiaPageHeader > h1') : ($('#AdminDashboardHeader').length ? $('#AdminDashboardHeader > h1') : $('.firstHeading'));  
       var appTo = ($('#WikiaPageHeader').length ) ? $('#WikiaPageHeader > h1') : $('.firstHeading');
       
       
       appTo.append('&#160;<span style="font-size: xx-small; line-height: 100%;" id="ajaxRefresh"><span style="border-bottom: 1px dotted; cursor: help;" id="ajaxToggleText" title="' + refreshHover + '">' + refreshText + ':</span><input type="checkbox" style="margin-bottom: 0;" id="ajaxToggle"><span style="display: none;" id="ajaxLoadProgress"><img src="' + ajaxIndicator + '" style="float: none; vertical-align: baseline;" border="0" alt="Refreshing page" /></span></span>');
       appTo.append('&#160;<span style="font-size: xx-small; line-height: 100%;" id="ajaxRefresh"><span style="border-bottom: 1px dotted; cursor: help;" id="ajaxToggleText" title="' + refreshHover + '">' + refreshText + ':</span><input type="checkbox" style="margin-bottom: 0;" id="ajaxToggle"><span style="display: none;" id="ajaxLoadProgress"><img src="' + ajaxIndicator + '" style="vertical-align: baseline;" border="0" alt="Refreshing page" /></span></span>');
       
       
       $('#ajaxLoadProgress').ajaxSend(function(event, xhr, settings) {
       $('#ajaxLoadProgress').ajaxSend(function(event, xhr, settings) {
    Zeile 71: Zeile 82:
           if (location.href == settings.url) {
           if (location.href == settings.url) {
             $(this).hide();
             $(this).hide();
             for(i in ajaxCallAgain) {
            // Sichere Funktionen erneut starten
                 ajaxCallAgain[i]();
             if ($(ajaxBC + ' .mw-collapsible').length) {
                $(ajaxBC + ' .mw-collapsible').makeCollapsible();
            }
            if (mw.config.get("wgNamespaceNumber") == -1
                && mw.config.get("wgCanonicalSpecialPageName") == "Recentchanges") {
                 mw.special.recentchanges.init();
             }
             }
           }
           }
    Zeile 92: Zeile 96:
       
       
    /**
    /**
      * Schalten Sie Aktualisierung ein- & aus, indem Sie das Kontrollkästchen umschalten.
      * Turn refresh on and off by toggling the checkbox
      */
      */
    function toggleAjaxReload() {
    function toggleAjaxReload() {
      if ($('#ajaxToggle').prop('checked') === true) {
    if ( $( '#ajaxToggle' ).prop( 'checked' ) == true ) {
          setCookie("ajaxload-" + wgPageName, "on", 30);
    setCookie( "ajaxload-" + wgPageName, "on", 30 );
          doRefresh = true;
    doRefresh = true;
          loadPageData();
    loadPageData();
      } else {
    } else {
          setCookie("ajaxload-" + wgPageName, "off", 30);
    setCookie( "ajaxload-" + wgPageName, "off", 30 );
          doRefresh = false;
    doRefresh = false;
          clearTimeout(ajaxTimer);
    clearTimeout( ajaxTimer );
      }
    }
    }
    }
       
       
    /**
    /**
      * Aktiviert die derzeitige Aktualisierung.
      * Does the actual refresh
      */
      */
    function loadPageData() {
    function loadPageData() {
      $(ajaxBC).load(location.href + " " + ajaxBC + " > *", function (data) {
    var cC = ( $( '#WikiaArticle' ).length ) ? '#WikiaArticle' : '#bodyContent';
          if (doRefresh) {
    $( cC ).load( location.href + " " + cC, function ( data ) {
            ajaxTimer = setTimeout(loadPageData, ajaxRefresh);
    if ( doRefresh ) {
          }
    ajaxTimer = setTimeout( "loadPageData();", ajaxRefresh );
      });
    }
    } );
    }
    /**
    * Load the script on specific pages
    */
    $( function () {
    for ( x in ajaxPages ) {
    if ( wgPageName == ajaxPages[x] && $( '#ajaxToggle' ).length === 0 ) {
    preloadAJAXRL();
    }
    }
    } );
    /* ######################################################################## */
    /* ######################################################################## */
    function infoboxToggle() {
    var page = window.pageName.replace(/\W/g, '_');
    var nowShown;
    if(document.getElementById('infoboxtoggle').innerHTML == '[Hide]') {
    document.getElementById('infoboxinternal').style.display = 'none';
    document.getElementById('infoboxtoggle').innerHTML = '[Show]';
    nowShown = false;
    } else {
    document.getElementById('infoboxinternal').style.display = 'block';
    document.getElementById('infoboxtoggle').innerHTML = '[Hide]';
    nowShown = true;
    }
    if(window.storagePresent) {
    var storage = globalStorage[window.location.hostname];
    storage.setItem('infoboxshow-' + page, nowShown);
    }
    }
    /**
    * jQuery version of fillEditSummaries
    * @author Grunny
    */
    function fillEditSummaries() {
    if( !$( '#wpSummaryLabel' ).length ) {
    return;
    }
    var summaryOptionsHtml = '',
    $summaryOptionsList;
    $.get( wgScript, { title: 'Template:Stdsummaries', action: 'raw', ctype: 'text/plain' }, function( data ) {
    var lines = data.split( '\n' );
    for( var i = 0; i < lines.length; i++ ) {
    var value = ( lines[i].indexOf( '-- ' ) === 0 ) ? lines[i].substring(3) : "";
    summaryOptionsHtml += '<option value="' + value + '">' + lines[i] + '</option>';
    }
    $summaryOptionsList = $( '<select />' ).attr( 'id', 'stdEditSummaries' ).html( summaryOptionsHtml ).change( function() {
    var value = $( this ).val();
    if ( value !== '' ) {
    if( skin === 'oasis' ) {
    $( '#wpSummary' ).text( value );
    } else {
    $( '#wpSummary' ).val( value );
    }
    }
    } );
    $( '#wpSummaryLabel' ).prepend( 'Standard summaries: ', $summaryOptionsList, '<br />' );
    } );
    }
    /**
    * jQuery version of fillPreloads
    * @author Grunny
    */
    function fillPreloads() {
    if( !$( '#lf-preload' ).length ) {
    return;
    }
    var preloadOptionsHtml = '',
    $preloadOptionsList;
    $( '#lf-preload' ).attr( 'style', 'display: block' );
    $.get( wgScript, { title: 'Template:Stdpreloads', action: 'raw', ctype: 'text/plain' }, function( data ) {
    var lines = data.split( '\n' );
    for( var i = 0; i < lines.length; i++ ) {
    var value = ( lines[i].indexOf( '-- ' ) === 0 ) ? lines[i].substring(3) : "";
    preloadOptionsHtml += '<option value="' + value + '">' + lines[i] + '</option>';
    }
    $preloadOptionsList = $( '<select />' ).attr( 'id', 'stdSummaries' ).html( preloadOptionsHtml ).change( function() {
    var value = $( this ).val();
    if ( value !== '' ) {
    value = 'Template:' + value + '/preload';
    value = value.replace( ' ', '_' );
    $.get( wgScript, { title: value, action: 'raw', ctype: 'text/plain' }, function( data ) {
    insertAtCursor( document.getElementById( 'wpTextbox1' ), data );
    } );
    }
    } );
    $( '#lf-preload-cbox' ).html( $preloadOptionsList );
    } );
    $( '#lf-preload-pagename' ).html( '<input type="text" class="textbox" />' );
    $( '#lf-preload-button' ).html( '<input type="button" class="button" value="Insert" onclick="doCustomPreload()" />' );
    }
    function doCustomPreload() {
    var value = $( '#lf-preload-pagename > input' ).val();
    value = value.replace( ' ', '_' );
    $.get( wgScript, { title: value, action: 'raw', ctype: 'text/plain' }, function( data ) {
    insertAtCursor( document.getElementById( 'wpTextbox1' ), data );
    } );
    }
    }
    // ============================================================
    // END AjaxRC
    // ============================================================


    /* ######################################################################## */
    /* ######################################################################## */

    Version vom 6. März 2014, 11:16 Uhr

    /* <nowiki> */
    
    /* ######################################################################## */
    /* ### JavaScript here is loaded for all users and all skins.           ### */
    /* ######################################################################## */
    
    /* ######################################################################## */
    /* ### AJAX RC                                                          ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Beschreibung: Automatische Aktualisierung der                    ### */
    /* ###              "Letzten Änderungen" via AJAX.                      ### */
    /* ### Credit:      User:pcj (original)                                 ### */
    /* ###              User:Grunny (Fehlerbehebungen)                      ### */
    /* ######################################################################## */
     
    var	ajaxIndicator = 'http://images.wikia.com/dev/images/8/82/Facebook_throbber.gif',
    	ajaxTimer,
    	ajaxRefresh = 60000,
    	refreshText = 'Automatische Aktualisierung',
    	refreshHover = 'Automatisch aktualisierende Seitennachladungen aktivieren',
    	doRefresh = true;
     
    if ( !window.ajaxPages ) {
    	var ajaxPages = new Array ("Служебная:RecentChanges", "Spezial:WikiActivity", "Spezial:NewFiles");
    }
    if ( !window.ajaxCallAgain ) {
    	var ajaxCallAgain = [];
    }
    if( typeof AjaxRCRefreshText == "string" ) {
    	refreshText = AjaxRCRefreshText;
    }
    if( typeof AjaxRCRefreshHoverText == "string" ) {
    	refreshHover = AjaxRCRefreshHoverText;
    }
     
    /**
     * Sets the cookie
     * @param c_name string Name of the cookie
     * @param value string 'on' or 'off'
     * @param expiredays integer Expiry time of the cookie in days
     */
    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() );
    }
     
    /**
     * Gets the cookie
     * @param c_name string Cookie name
     * @return The cookie name or empty string
     */
    function getCookie( c_name ) {
    	if ( document.cookie.length > 0 ) {
    		var c_start = document.cookie.indexOf( c_name + "=" )
    		if ( c_start !== -1 ) {
    			c_start = c_start + c_name.length + 1; 
    			var 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 "";
    }
     
    /**
     * Main function to start the Auto-refresh process
     */
    function preloadAJAXRL() {
       var ajaxRLCookie = (getCookie("ajaxload-" + wgPageName) == "on") ? true : false;
       var appTo = ($('#WikiaPageHeader').length ) ? $('#WikiaPageHeader > h1') : $('.firstHeading');
     
       appTo.append('&#160;<span style="font-size: xx-small; line-height: 100%;" id="ajaxRefresh"><span style="border-bottom: 1px dotted; cursor: help;" id="ajaxToggleText" title="' + refreshHover + '">' + refreshText + ':</span><input type="checkbox" style="margin-bottom: 0;" id="ajaxToggle"><span style="display: none;" id="ajaxLoadProgress"><img src="' + ajaxIndicator + '" style="vertical-align: baseline;" border="0" alt="Refreshing page" /></span></span>');
     
       $('#ajaxLoadProgress').ajaxSend(function(event, xhr, settings) {
          if (location.href == settings.url) {
             $(this).show();
          }
       } ).ajaxComplete(function(event, xhr, settings) {
          if (location.href == settings.url) {
             $(this).hide();
             for(i in ajaxCallAgain) {
                ajaxCallAgain[i]();
             }
          }
       } );
     
       $('#ajaxToggle').click(toggleAjaxReload).attr('checked', ajaxRLCookie);
     
       if (getCookie("ajaxload-" + wgPageName) == "on") {
          loadPageData();
       }
    }
     
    /**
     * Turn refresh on and off by toggling the checkbox
     */
    function toggleAjaxReload() {
    	if ( $( '#ajaxToggle' ).prop( 'checked' ) == true ) {
    		setCookie( "ajaxload-" + wgPageName, "on", 30 );
    		doRefresh = true;
    		loadPageData();
    	} else {
    		setCookie( "ajaxload-" + wgPageName, "off", 30 );
    		doRefresh = false;
    		clearTimeout( ajaxTimer );
    	}
    }
     
    /**
     * Does the actual refresh
     */
    function loadPageData() {
    	var cC = ( $( '#WikiaArticle' ).length ) ? '#WikiaArticle' : '#bodyContent';
    	$( cC ).load( location.href + " " + cC, function ( data ) {
    		if ( doRefresh ) {
    			ajaxTimer = setTimeout( "loadPageData();", ajaxRefresh );
    		}
    	} );
    }
     
    /**
     * Load the script on specific pages
     */
    $( function () { 
    	for ( x in ajaxPages ) {
    		if ( wgPageName == ajaxPages[x] && $( '#ajaxToggle' ).length === 0 ) {
    			preloadAJAXRL();
    		}
    	}
    } );
     
    /* ######################################################################## */
    /* ######################################################################## */
     
    function infoboxToggle() {
    	var page = window.pageName.replace(/\W/g, '_');
    	var nowShown;
     
    	if(document.getElementById('infoboxtoggle').innerHTML == '[Hide]') {
    		document.getElementById('infoboxinternal').style.display = 'none';
    		document.getElementById('infoboxtoggle').innerHTML = '[Show]';
    		nowShown = false;
    	} else {
    		document.getElementById('infoboxinternal').style.display = 'block';
    		document.getElementById('infoboxtoggle').innerHTML = '[Hide]';
    		nowShown = true;
    	}
     
    	if(window.storagePresent) {
    		var storage = globalStorage[window.location.hostname];
    		storage.setItem('infoboxshow-' + page, nowShown);
    	}
    }
     
    /**
     * jQuery version of fillEditSummaries
     * @author Grunny
     */
    function fillEditSummaries() {
     
    	if( !$( '#wpSummaryLabel' ).length ) {
    		return;
    	}
    	var	summaryOptionsHtml = '',
    		$summaryOptionsList;
     
    	$.get( wgScript, { title: 'Template:Stdsummaries', action: 'raw', ctype: 'text/plain' }, function( data ) {
    		var lines = data.split( '\n' );
    		for( var i = 0; i < lines.length; i++ ) {
    			var value = ( lines[i].indexOf( '-- ' ) === 0 ) ? lines[i].substring(3) : "";
    			summaryOptionsHtml += '<option value="' + value + '">' + lines[i] + '</option>';
    		}
    		$summaryOptionsList = $( '<select />' ).attr( 'id', 'stdEditSummaries' ).html( summaryOptionsHtml ).change( function() {
    			var value = $( this ).val();
    			if ( value !== '' ) {
    				if( skin === 'oasis' ) {
    					$( '#wpSummary' ).text( value );
    				} else {
    					$( '#wpSummary' ).val( value );
    				}
    			}
    		} );
     
    		$( '#wpSummaryLabel' ).prepend( 'Standard summaries: ', $summaryOptionsList, '<br />' );
    	} );
     
    }
     
    /**
     * jQuery version of fillPreloads
     * @author Grunny
     */
    function fillPreloads() {
     
    	if( !$( '#lf-preload' ).length ) {
    		return;
    	}
    	var	preloadOptionsHtml = '',
    		$preloadOptionsList;
     
    	$( '#lf-preload' ).attr( 'style', 'display: block' );
     
    	$.get( wgScript, { title: 'Template:Stdpreloads', action: 'raw', ctype: 'text/plain' }, function( data ) {
    		var lines = data.split( '\n' );
    		for( var i = 0; i < lines.length; i++ ) {
    			var value = ( lines[i].indexOf( '-- ' ) === 0 ) ? lines[i].substring(3) : "";
    			preloadOptionsHtml += '<option value="' + value + '">' + lines[i] + '</option>';
    		}
    		$preloadOptionsList = $( '<select />' ).attr( 'id', 'stdSummaries' ).html( preloadOptionsHtml ).change( function() {
    			var value = $( this ).val();
    			if ( value !== '' ) {
    				value = 'Template:' + value + '/preload';
    				value = value.replace( ' ', '_' );
    				$.get( wgScript, { title: value, action: 'raw', ctype: 'text/plain' }, function( data ) {
    					insertAtCursor( document.getElementById( 'wpTextbox1' ), data );
    				} );
    			}
    		} );
     
    		$( '#lf-preload-cbox' ).html( $preloadOptionsList );
    	} );
     
    	$( '#lf-preload-pagename' ).html( '<input type="text" class="textbox" />' );
    	$( '#lf-preload-button' ).html( '<input type="button" class="button" value="Insert" onclick="doCustomPreload()" />' );
     
    }
     
    function doCustomPreload() {
    	var value = $( '#lf-preload-pagename > input' ).val();
    	value = value.replace( ' ', '_' );
    	$.get( wgScript, { title: value, action: 'raw', ctype: 'text/plain' }, function( data ) {
    		insertAtCursor( document.getElementById( 'wpTextbox1' ), data );
    	} );
    }
    // ============================================================
    // END AjaxRC
    // ============================================================
    
    /* ######################################################################## */
    /* ### SKRIPTLADER                                                      ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Beschreibung: Lädt alle anderen Skripte.                         ### */
    /* ### Credit:      Benutzer:Porter21                                   ### */
    /* ######################################################################## */
     
    // Globale Variablen einrichten
    var fwConfig = {
       chevronDown: '<span class="fw-chevron-down"></span>',
       chevronLeft: '<span class="fw-chevron-left"></span>',
       chevronRight: '<span class="fw-chevron-right"></span>',
       chevronUp: '<span class="fw-chevron-up"></span>',
       loadIndicator: '<img src="' + mw.config.get('stylepath') + '/common/images/ajax-loader.gif' + '" style="vertical-align: middle;" width="16" height="16" border="0" title="Im Gang..." alt="Im Gang..." />'
    };
     
    // Lade Skripte
    function fwScriptLoader () {
       // Always loaded
       addTitleIcons();
       fancyTooltips();
     
       // Only loaded for specific namespaces
       if (mw.config.get('wgNamespaceNumber') > 0 && mw.config.get('wgNamespaceNumber') % 2 != 0) {
          // Diskussionsseiten
          disableArchiveEdit();
       }
     
       if (mw.config.get('wgNamespaceNumber') == 112 || mw.config.get('wgIsMainPage')) {
          // Portale
          addCountdowns();
       }
     
       if (mw.config.get('wgNamespaceNumber') == 115) {
          wikilogCommentImprovements();
       }
     
       // Only loaded for specific pages
       if (mw.config.get('wgTitle') == 'Duplicate files' && mw.config.get('wgNamespaceNumber') == 4) {
          findDupFiles();
       }
    }
     
    jQuery(function($) {
       fwScriptLoader();
    });
    
    /* ######################################################################## */
    /* ### TITLE ICONS (Vorlage:Spiele)                                     ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Beschreibung: Fügt Icons zum Artikeltitel hinzu                  ### */
    /* ### Credit:      User:Porter21                                       ### */
    /* ######################################################################## */
    
    function addTitleIcons () {
       var iconBar = $('#fw-titleicons');
       var previewBar = $('#fw-titleicons-preview');
     
       if (skin != 'monobook' && skin != 'oasis' && skin != 'wikia') {
          return;
       }
     
       if (iconBar.length > 0 && $('a', previewBar).length > 0) {
          if (skin == 'oasis' || skin == 'wikia') {
             var articleDiv = $('#WikiaArticle');
     
             if (articleDiv.length > 0) {
                iconBar.css('display', 'block').prependTo(articleDiv);
             }
          } else if (skin == 'monobook') {
             var firstHeading = $('#firstHeading').css('position', 'relative');
     
             if (firstHeading.length > 0) {
                iconBar.css('display', 'block').appendTo(firstHeading.css('padding-right', previewBar.width() + 25));
             }
          }
     
          $('#fw-titleicons-more').append('<img width="0" height="0" class="fw-titleicons-chevron" src="http://images.wikia.com/common/skins/common/blank.gif">');
     
          iconBar.hover(
             function () {
                $(this).addClass('fw-titleicons-hover');
             }, function () {
                $(this).removeClass('fw-titleicons-hover');
             });
       }
    }
    /* ######################################################################## */
    /* ### FANCY TOOLTIPS (Vorlage:Icon, Template:Infobox,                  ### */
    /* ###                 Vorlage:Tooltip)                                 ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Beschreibung: Nicer-looking tooltips using jQuery.tipsy          ### */
    /* ### Credit:      User:Porter21                                       ### */
    /* ######################################################################## */
     
    function fancyTooltips () {
       var ftTooltipsE = $('.fw-infobox-tooltip-cell');
       var ftTooltipsS = $('.fw-icon, .fw-tooltip');
     
       if (ftTooltipsE.length || ftTooltipsS.length) {
          mw.loader.using('jquery.tipsy', function () {
             if (ftTooltipsE.length) {
                // Tooltip appears to the left of the element
                ftTooltipsE.tipsy({gravity: 'e'});
             }
             if (ftTooltipsS.length) {
                // Tooltip appears above the element
                ftTooltipsS.tipsy({gravity: 's'});
             }
          });
       }
    }
    
    /* ######################################################################## */
    /* ### SHOW/HIDE                                                        ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Description: Collapsible tables using jQuery. Allows tables to   ### */
    /* ###              be collapsed, showing only the header.              ### */
    /* ### Credit:      User:Dantman                                        ### */
    /* ### Disclaimer:  See http://dev.wikia.com/wiki/ShowHide/code.js      ### */
    /* ######################################################################## */
     
    var ShowHideConfig = { autoCollapse: 1, userLang: false };
    importScriptPage( 'ShowHide/code.js', 'dev' );
    
    
    /* ######################################################################## */
    /* ### DISABLE ARCHIVE EDIT                                             ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Description: Remove section edit links and gray out main edit    ### */
    /* ###              button on archived talk pages                       ### */
    /* ### Credit:      User:Porter21                                       ### */
    /* ######################################################################## */
    
    function disableArchiveEdit () {
       // Configuration
       var userconfig = (window.DisableArchiveEditConfig) ? window.DisableArchiveEditConfig : {};
       var config = $.extend(true, {
          archiveSubpage: 'Archive',
          disableCompletely: false,
          textColor: '#D9D9D9',
          userLang: false,
          // English
          en: {
             archived: "Archived",
             archivedTooltip: "This page is an archive and should not be edited."
          }
       }, userconfig);
     
       // Function for multi-language support (by Daniel Friesen aka User:Dantman)
       function msg(name) {
          if ( config.userLang && wgUserLanguage in config && name in config[wgUserLanguage] )
             return config[wgUserLanguage][name];
          if ( wgContentLanguage in config && name in config[wgContentLanguage] )
             return config[wgContentLanguage][name];
          return config.en[name];
       }
     
       // Check whether page is an archive
       if ((new RegExp('\\/\[' + config.archiveSubpage.substr(0,1).toUpperCase()
          + config.archiveSubpage.substr(0,1).toLowerCase() + '\]' + config.archiveSubpage.substr(1)
          + '\\s\*\\d\*')).test(wgTitle)) {
          // Remove "add new section" links and prepare altering "edit" page control
          switch (skin) {
             case 'monaco':
                $('#control_addsection').remove();
                $('#fe_newsection').remove();
     
                editlink = $('#ca-edit');
                break;
             case 'monobook':
                $('#ca-addsection').remove();
     
                editlink = $('#ca-edit > a');
                break;
             case 'oasis':
             case 'wikia':
                var oasisButton = $(((wgNamespaceNumber == 3) ? '#WikiaUserPagesHeader' : '#WikiaPageHeader') + ' > ul.wikia-menu-button > li');
     
                oasisButton.children("a:first").prependTo($('ul:first', oasisButton)).wrap('<li />').children('img').remove();
                oasisButton.prepend('<a />');
                $('a[data-id="addtopic"]', oasisButton).parent().remove();
     
                editlink = $('a:first', oasisButton);
                break;
          }
     
          // Remove "edit section" links
          $('span.editsection').remove();
     
          // Alter "edit" page control
          if (config.disableCompletely) {
             editlink.remove();
          } else {
             editlink.attr('title', msg('archivedTooltip')).css('color', config.textColor).text(msg('archived'));
          }
       }
    }
     
    /* ######################################################################## */
    /* ### DUPLICATE FILE LIST                                              ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Description: Finds duplicate files on the wiki.                  ### */
    /* ### Credit:      User:pcj (http://www.wowpedia.org)                  ### */
    /* ######################################################################## */
    
    function findDupFiles(gf) {
       var fileDiv = $('#mw-dupfiles');
    
       if (fileDiv.length) {
          dil = new Array();
          ajaxIndicator = stylepath + '/common/progress-wheel.gif';
          output = '';
          url = '/api.php?action=query&generator=allimages&prop=duplicatefiles&gailimit=500&format=json';
    
          if (!($('#dupFilesProgress').length)) {
             fileDiv.prepend('<span style="float: right;" id="dupFilesProgress" title="In progress..."><img src="' + ajaxIndicator + '" style="vertical-align: baseline;" border="0" alt="In progress..." /></span>');
          }
    
          if (gf) {
             url += "&gaifrom=" + gf;
          }
    
          $.getJSON( url, function (data) {
             if ( data.query ) {
                pages = data.query.pages;
    
                for (pageID in pages) {
                   dils = "," + dil.join();
    
                   if ( dils.indexOf("," + pages[pageID].title) == -1 
                      && pages[pageID].title.indexOf("File::") == -1 && pages[pageID].duplicatefiles ) {
                      output += "<h3><a href='/wiki/" + encodeURIComponent(pages[pageID].title).replace(/'/g, "%27") + "'>" + pages[pageID].title + "</a></h3>\n<ul>\n";
    
                      for ( x = 0; x < pages[pageID].duplicatefiles.length; x++ ) {
                         output += "<li><a href='/wiki/File:" + encodeURIComponent(pages[pageID].duplicatefiles[x].name).replace(/'/g, "%27") + "'>File:" + pages[pageID].duplicatefiles[x].name + "</a></li>\n";
                         dil.push("File:" + pages[pageID].duplicatefiles[x].name.replace(/_/g, " "));
                      }
                      output += "</ul>\n\n"
                   }
                }
    
                fileDiv.append(output);
    
                if (data["query-continue"]) {
                   setTimeout("findDupFiles('" + encodeURIComponent(data["query-continue"].allimages.gaifrom).replace(/'/g, "%27") + "');", 5000);
                } else {
                   $('#dupFilesProgress').hide();
                }
             }
          } );
       }
    }
    
    /* ######################################################################## */
    /* ### CHAT IMPROVEMENTS                                                ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Description: Improvements for Special:Chat                       ### */
    /* ### Credit:      User:Porter21                                       ### */
    /* ######################################################################## */
    
    function openChatWindow() {
       vaultChatWindow = window.open('/wiki/Special:Chat', 'wikiachat', 'width=600, height=600, location=no, menubar=no, resizable=yes, scrollbars=no, status=no, toolbar=no');
       return vaultChatWindow;
    }
    
    function rewriteChatLink() {
       $('#WikiHeader > nav > ul > li > ul.subnav > li > a[href="/wiki/Special:Chat"]').click(function(e){
          openChatWindow();
          return false;
       });
    }
    
    /* ######################################################################## */
    /* ### JQUERY AJAX PATROL LINKS                                         ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Description: Mark pages as patrolled via AJAX                    ### */
    /* ### Credit:      User:Grunny (http://dev.wikia.com)                  ### */
    /* ######################################################################## */
     
    function ajaxPatrolLinks() {
       var ajaxIndicator = stylepath + '/common/progress-wheel.gif';
       var patrolLinks = $('.patrollink');
     
       if(!patrolLinks.length) {
          return;
       }
     
       patrolLinks.click(function (e) {
          var curLink = $(this);
          var curURL = curLink.children('a').attr('href');
     
          e.preventDefault();
          curLink.html('<img src="' + ajaxIndicator + '" style="vertical-align: baseline;" border="0" alt="Marking as patrolled..." />');
          $.get(curURL, function (data) {
             curLink.css('color', 'grey').text('[Marked as patrolled]');
          });
       });
    }
    
    /* ######################################################################## */
    /* ### WikEd Texteditor                                                 ### */
    /* ### ---------------------------------------------------------------- ### */
    /* ### Beschreibung: Installiert einen in-browser Texteditor.           ### */
    /* ### Credit:      User:Grunny (http://dev.wikia.com)                  ### */
    /* ######################################################################## */
    
    
        // install [[Wikipedia:User:Cacycle/wikEd]] in-browser text editor
    
    document.write('<script type="text/javascript" src="' + 'http://en.wikipedia.org/w/index.php?title=User:Cacycle/wikEd.js'
    
    + '&action=raw&ctype=text/javascript"></' + 'script>');
    
    /* </nowiki> */