MediaWiki:Common.js

aus Stargate Wiki, dem deutschsprachigen Stargate-Lexikon
Wechseln zu: Navigation, Suche

Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen
/* Jedes JavaScript hier wird für alle Benutzer für jede Seite geladen. */
 
 
//===========================================================================
// Externe Links in neuem Fenster öffnen, sofern sie nicht in dieses Wiki mit unterbundener Weiterleitung ([[Vorlage:KeinRedirect]]) führen
//---------------------------------------------------------------------------
$(function() {
  $(".external").each(function( i ) {
    var url = $(this).attr("href");
    if ((url.indexOf("stargate-wiki.de/")!=-1)&&((url.indexOf("redirect=no")!=-1)||(url.indexOf("unhide=1")!=-1)))
      $(this).attr("target","_self");
    else
      $(this).attr("target","_blank");
  });
});
//===========================================================================
 
 
//===========================================================================
// Fügt eine Betreffzeile auf leeren Diskussionsseiten ein
//---------------------------------------------------------------------------
$(function() {
        if(wgNamespaceNumber != 0 && wgNamespaceNumber != 1) return;
	var tab = document.getElementById( 'ca-talk' );
	if( !tab || tab.className != 'new' ) return;
	var link = tab.getElementsByTagName( 'a' )[0];
	if( !link ) return;
	link.href += '&section=new';
});
//===========================================================================
 
 
//===========================================================================
// import Onlyifuploading-functions
// SEE ALSO [[MediaWiki:Onlyifuploading.js]]
//---------------------------------------------------------------------------
if (wgCanonicalSpecialPageName == "Upload") {
    importScript("MediaWiki:Onlyifuploading.js");
}
//===========================================================================
 
 
//===========================================================================
// Einbinden von [[Vorlage:Mentorenliste]]
//---------------------------------------------------------------------------
importScript('Vorlage:Mentorenliste');
//===========================================================================
 
 
//===========================================================================
// Darstellung der Abschnitte in der Kategorie für wichtige SG1-Episoden
// nach einzelnen Staffeln
//---------------------------------------------------------------------------
$(function() {
  if (wgPageName != "Kategorie:Stargate_Kommando_SG-1_Wichtige_Episode") return;
  $("div#mw-pages h3").html(function(i, text)
  {
    return (text.substr(0, 1) == "@")?"10"+text.substr(1):text;
  });
});
//===========================================================================
 
 
//===========================================================================
// Zeilen der Infoboxen abwechselnd einfärben
//---------------------------------------------------------------------------
$(function() {
  $("tr[class*='blauzebra']:not(.spoiler):even").addClass("zebrablau");
  $("tr[class*='blauzebra']:not(.spoiler):odd").removeClass("zebrablau");
  $("tr[class*='grünzebra']:not(.spoiler):even").addClass("zebragrün");
  $("tr[class*='grünzebra']:not(.spoiler):odd").removeClass("zebragrün");
});
//===========================================================================
 
 
//===========================================================================
// Wenige (<6) Einzelnachweise in nur einer Spalte darstellen
//---------------------------------------------------------------------------
$('ol.references').each(function(){
    if($(this).children('li').length<6){
        $(this).css({ 'column-count': '1', '-moz-column-count': '1', '-webkit-column-count': '1' });
    }
});
//===========================================================================
 
 
//===========================================================================
// Sortierung von Datum und Zeit der Form „11:58, 21. Jul. 2012“ in Tabellen
//---------------------------------------------------------------------------
if ($("table.sortable").length) {
  mw.loader.using("jquery.tablesorter", function() {
    if ($ && $.tablesorter) {
      $.tablesorter.addParser({
        id: "sgwDateTime",
        is: function(s) {
          return /(\d\d):(\d\d), (\d\d)\. (...)\. (\d{4})/.test(s);
        },
        format: function(s) {
          s = $.trim(s.toLowerCase());
          for (var i=0; i<12; ++i)
            s = s.replace($.tablesorter.monthNames[1][i+1], i);
          var x = /(\d\d):(\d\d), (\d\d)\. (\d?)\. (\d{4})/.exec(s);
          return !x?0:$.tablesorter.formatFloat(new Date(x[5], x[4], x[3], x[1], x[2], 0).getTime());
        },
        type: "numeric"
      });
    }
  });
}
//===========================================================================
 
 
//===========================================================================
// Zählt die Anzahl der Bearbeitungen eines Benutzers
// Siehe auch [[Benutzer:CF/revisionMainspaceCounter.js]]
// Bearbeitung von [[MediaWiki:Gadget-revisionCounter.js]]
//---------------------------------------------------------------------------
var revisionMainspaceCounter =
{
  queryUrl : function(i) {
    if (revisionMainspaceCounter.queries[i] == null)
      return null;
    if (revisionMainspaceCounter.queries[i].Namespaces == '-100')
      return wgScriptPath + '/api.php?action=query&list=logevents&leuser=' + encodeURIComponent(revisionMainspaceCounter.queries[i].User) + '&letype=upload&leprop=userid&format=json&lelimit=max&callback=revisionMainspaceCounter.queryResult&requestid=' + i;
    else
      return wgScriptPath + '/api.php?action=query&list=usercontribs&ucuser=' + encodeURIComponent(revisionMainspaceCounter.queries[i].User) + '&ucnamespace=' + revisionMainspaceCounter.queries[i].Namespaces + '&ucprop=&format=json&uclimit=max&callback=revisionMainspaceCounter.queryResult&requestid=' + i;
      //Bei leerer ucprop-Angabe werden nur noch userid und user angegeben - sollte MW das mal ändern, muss hier wieder etwas übergeben werden (vorzugsweise ids)
  },
  queries : [
  /*{
      revisionCountUser  : 0,
      User : wgUserName,
      Namespaces : '0',
      InputId : 'revisionMainspaceCounter',
      OutputId : 'revisionMainspaceCounterTarget',
      ReplaceFirstChild : false
    }*/
  ],
 
  execute : function()
  {
    for (var i=0; i<revisionMainspaceCounter.queries.length; ++i)
      if (revisionMainspaceCounter.queryUrl(i))
        importScriptURI(revisionMainspaceCounter.queryUrl(i));
  },
 
  queryResult : function(res)
  {
    if (!res['query'] || !res['requestid'] || res.requestid >= revisionMainspaceCounter.queries.length || res.requestid < 0 || revisionMainspaceCounter.queries[res.requestid] === null) return;
 
    var continu = false;
    var i = res.requestid;
    if (revisionMainspaceCounter.queries[res.requestid].Namespaces == '-100') {
      if (!res['query']['logevents'])
        return;
      var revs = res['query']['logevents'];
      revisionMainspaceCounter.queries[i].revisionCountUser += revs.length;
 
      if (res && res['query-continue'])
      {
      	var lequerycont=res['query-continue'].logevents.lecontinue;
        importScriptURI(revisionMainspaceCounter.queryUrl(i) + '&lestart=' + encodeURIComponent(lequerycont.substring(0,lequerycont.indexOf("|"))));
        continu = true;
      }
    }
    else {
      if (!res['query']['usercontribs'])
        return;
      var revs = res['query']['usercontribs'];
      revisionMainspaceCounter.queries[i].revisionCountUser += revs.length;
 
      if (res && res['query-continue'])
      {
      	var ucquerycont=res['query-continue'].usercontribs.uccontinue;
        importScriptURI(revisionMainspaceCounter.queryUrl(i) + '&ucstart=' + encodeURIComponent(ucquerycont.substring(0,ucquerycont.indexOf("|"))));
        continu = true;
      }
    }
 
    if (!continu && document.getElementById(revisionMainspaceCounter.queries[i].OutputId))
    {
      var info = document.createElement("span");
      info.appendChild(document.createTextNode(revisionMainspaceCounter.queries[i].revisionCountUser));
      var infoTitle = document.createAttribute("title");
      infoTitle.nodeValue = revisionMainspaceCounter.queries[i].User + " hat " + revisionMainspaceCounter.queries[i].revisionCountUser + " Bearbeitungen i" + (revisionMainspaceCounter.queries[i].Namespaces==="0" ? "m Hauptnamensraum." : ((revisionMainspaceCounter.queries[i].Namespaces.indexOf("|")>-1 ? "n den Namensräumen ": "m Namensraum ") + revisionMainspaceCounter.queries[i].Namespaces + "."));
      info.setAttributeNode(infoTitle);
      var e = document.getElementById(revisionMainspaceCounter.queries[i].OutputId);
      if (revisionMainspaceCounter.queries[i].ReplaceFirstChild) e.replaceChild(info, e.firstChild);
      else e.appendChild(info);
 
      var input = document.getElementById(revisionMainspaceCounter.queries[i].InputId);
      var header = $(input).parents("table.sortable")[0];
      if (input && input.parentNode)
      {
          input.parentNode.removeChild(input);
          if (header && $(header).find("span.revisionMainspaceCounter").length === 0)
          {
            $(header).find(".headerSort").unbind("click");
            $(header).tablesorter();
          }
      }
 
      revisionMainspaceCounter.queries[i] = null;
    }
  },
  findCounter : function()
  {
    var found = 0;
    $("span.revisionMainspaceCounter").each(function()
    {
      var i = this.innerHTML.split("#");
      if (i.length == 4 && ++found)
        revisionMainspaceCounter.queries.push({
          revisionCountUser  : 0,
          User : i[0],
          Namespaces : i[1].replace(/ /g,"").split(",").join("|"),
          InputId : this.id,
          OutputId : i[2],
          ReplaceFirstChild : i[3]==="j"
      });
    });
    if (found) revisionMainspaceCounter.execute();
  }
};
 
$(revisionMainspaceCounter.findCounter);
//===========================================================================
 
 
//===========================================================================
// Versteckt Inhalte
// [[Vorlage:Spoiler]]
//---------------------------------------------------------------------------
mw.SGWSpoiler = {
  showAll: false,
  init: function() {
    if ($(".spoiler").size()>0) {
    var vector = $("body.skin-vector").size()>0;
    var node = mw.util.addPortletLink(vector ? "p-views" : "p-cactions", "#", "Spoiler aufdecken", "ca-spoiler", "Vorhandene Spoiler auf- und zudecken", "s", $("#ca-watch")[0] || $("#ca-unwatch")[0]);
    if (node) {
      node.onclick = mw.SGWSpoiler.toggleAll;
      if (vector)
        $("#ca-spoiler a").html('<img width="24" height="24" alt="Spoiler auf- oder zudecken" src="http://www.stargate-wiki.de/w/images/thumb/1/17/System-search.svg/24px-System-search.svg.png" style="position:relative; top: -5px;" />');
    }
  }
  },
 
  toggleNext: function(obj) {
    if (mw.SGWSpoiler.showAll) return;
    $(obj).next(".spoiler").toggleClass("spoilerShow");
    var headings = $(obj).next(".spoiler").find(':header > span');
    if(headings.length){
    	headings.each(function(i, e){
    		spoilerHeadings.toggle(e.id);
		});
    }
  },
 
  toggleNextRow: function(obj) {
    if (mw.SGWSpoiler.showAll) return;
    $(obj).parent().parent().next("tr.spoiler").toggleClass("spoilerShow");
    var headings = $(obj).parent().parent().next("tr.spoiler").find(':header > span');
    if(headings.length){
    	headings.each(function(i, e){
    		spoilerHeadings.toggle(e.id);
		});
    }
  },
 
  toggleAll: function(obj) {
    mw.SGWSpoiler.showAll ^= true;
    if (mw.SGWSpoiler.showAll) {
      $(".spoiler").addClass("spoilerShowAll");
      $("#ca-spoiler").addClass("selected");
      if (obj){
      	$(obj).parent().parent().next("tr.spoiler").removeClass("spoilerShow");
      	$(obj).next(".spoiler").removeClass("spoilerShow");
      }
      spoilerHeadings.showAll();
    }
    else {
      $(".spoiler").removeClass("spoilerShowAll");
      $("#ca-spoiler").removeClass("selected");
      spoilerHeadings.hideAll();
    }
    return false;
  }
}
 
$( mw.SGWSpoiler.init );
//===========================================================================
 
 
//===========================================================================
// automatisiertes Einbinden vom virtuellen Schneefall im Dezember und Januar
//---------------------------------------------------------------------------
var curmonth=new Date().getMonth();
if(curmonth===11 || curmonth===0) importScript('Benutzer:CF/Schnee.js');
//===========================================================================
 
 
//===========================================================================
// Toggles the display of elements on a page
// Author/contact: Austin Che http://openwetware.org/wiki/User:Austin
//---------------------------------------------------------------------------
 
// indexed array of toggler ids to array of associated toggle operations
// each operation is a two element array, the first being the type, the second a class name or array of elements
// operation types are strings like "_reset" or "" for the default toggle operation
var togglers = new Array();     
var allClasses = new Object(); // associative map of class names to page elements
 
function toggler(id)
{
    var toBeToggled = togglers[id];
    if (!toBeToggled)
        return;
 
    // if some element is in list more than once, it will be toggled multiple times
    for (var i = 0; i < toBeToggled.length; i++)
    {
        // get array of elements to operate on
        var toggles = toBeToggled[i][1];
        if (typeof(toggles) == "string")
        {
            if (toggles.charAt(0) == '-')
            {
                // treat as an element ID, not as class
                toggles = document.getElementById(toggles.substring(1));
                if (toggles)
                    toggles = new Array(toggles);
            }
            else
                toggles = allClasses[toggles];
        }
        if (!toggles || !toggles.length)
            continue;
 
        var op = toBeToggled[i][0]; // what the operation will be
 
        switch (op)
        {
            case "_reset":
                for (var j in toggles)
                    toggles[j].style.display = toggles[j]._toggle_original_display;
                break;
            case "_show":
                for (var j in toggles)
                    toggles[j].style.display = '';
                break;
            case "_hide":
                for (var j in toggles)
                    toggles[j].style.display = 'none';
                break;
            case "":
            default:
                // Toggle
                for (var j in toggles)
                    toggles[j].style.display = ((toggles[j].style.display == 'none') ? '' : 'none');
                break;
        }
    }
}
 
function createTogglerLink(toggler, id)
{
    var toggle = document.createElement("a");
    toggle.className = 'toggler-link';
    toggle.setAttribute('id', 'toggler' + id);
    toggle.setAttribute('href', 'javascript:toggler("' + id + '");');
    var child = toggler.firstChild;
    toggler.removeChild(child);
    toggle.appendChild(child);
    toggler.insertBefore(toggle, toggler.firstChild);
}
 
function toggleInit()
{
    var togglerElems = new Array();
    var toggleGroup = new Array();
 
    // make list of all document classes
    var elems = document.getElementsByTagName("*");
    var numelems = elems.length;
    for (var i = 0; i < elems.length; i++)
    {
        var elem = elems[i];
        if (!elem.className)
            continue;
 
        elem._toggle_original_display = elem.style.display;
        var togglerID = -1;
        if( typeof elem.className == "string" ) {
        	var elemClasses = elem.className.split(' '); // get list of classes
        	for (var j = 0; j < elemClasses.length; j++)
        	{
            	var elemClass = elemClasses[j];
            	if (! allClasses[elemClass])
                	allClasses[elemClass] = new Array();
            	allClasses[elemClass].push(elem);
 
            	// all the special classes begin with _toggle
            	if (elemClass.substring(0, 7) != "_toggle")
                	continue;
 
            	if (elemClass == "_togglegroup")
                	toggleGroup = new Array();
            	else if (elemClass == "_toggle")
                	toggleGroup.push(elem);
            	else if (elemClass.substring(0, 12) == "_toggle_init")
            	{
                	// set initial value for display (ignore the original CSS set value)
                	// understands _toggle_initshow and _toggle_inithide
                	var disp = elemClass.substring(12);
                	if (disp == "show")
                    	elem.style.display = '';
                	else if (disp == "hide")
                    	elem.style.display = 'none';
                	elem._toggle_original_display = disp;
            	}
            	else if (elemClass.substring(0, 8) == "_toggler")
            	{
                	if (togglerID == -1)
                	{
                    	togglerID = togglers.length;
                    	togglers[togglerID] = new Array();
                    	togglerElems[togglerID] = elem;
                	}	
 
                	// all classes are of form _toggler_op-CLASS
                	// figure out what class we're toggling
                	// if none is specified, then we use the current toggle group
                	var toBeToggled;
                	var hyphen = elemClass.indexOf('-');
                	if (hyphen != -1)
                    	toBeToggled = elemClass.substring(hyphen+1);
                	else
                	{
                    	toBeToggled = toggleGroup;
                    	hyphen = elemClass.length;
                	}
 
                	var op = elemClass.substring(8, hyphen);
                	togglers[togglerID].push(new Array(op, toBeToggled));
            	}
        	}
        }
    }
 
    // add javascript links to all toggler elements
    for (var i = 0; i < togglerElems.length; i++)
        createTogglerLink(togglerElems[i], i);
}
 
$(toggleInit);
 
function unToggle()
{    
   var path=window.location.href;
   var parts=path.split("#");
   if(parts.length > 1)
   {
      path=parts[parts.length-1];
      parts=path.split(".23");
 
      var untogglerGroup = new Array();
      var untogglerClass = new Array();
 
      // make list of all document classes
      var elems = document.getElementsByTagName("*");
      var numelems = elems.length;
      for (var c=0; c < parts.length; c++)
      {
        for (var i = 0; i < elems.length; i++)
        {
            var elem = elems[i];
            if (!elem.className)
                continue;
 
            var elemClasses = elem.className.split(' '); // get list of classes
 
            for (var j = 0; j < elemClasses.length; j++)
            {
              var elemClass=elemClasses[j];
              if (elemClass != parts[c])
                  continue;   
              else
              {
                  untogglerGroup.push(elem);
                  untogglerClass.push(elemClass);
              }
            }
         }
      }
 
      // add javascript links to all toggler elements
      for (var i = 0; i < untogglerGroup.length; i++)
      {
          untogglerGroup[i].style.display = '';
      }
   } 
}
//===========================================================================
 
 
//===========================================================================
// Import-Skript zum Auslagern großer Scripte
//---------------------------------------------------------------------------
function importScript(page) {
	// TODO: might want to introduce a utility function to match wfUrlencode() in PHP
	var uri = wgScript + '?title=' +
		encodeURIComponent(page.replace(/ /g,'_')).replace(/%2F/ig,'/').replace(/%3A/ig,':') +
		'&action=raw&ctype=text/javascript';
	return importScriptURI(uri);
}
 
var loadedScripts = {}; // included-scripts tracker
function importScriptURI(url) {
	if (loadedScripts[url]) {
		return null;
	}
	loadedScripts[url] = true;
	var s = document.createElement('script');
	s.setAttribute('src',url);
	s.setAttribute('type','text/javascript');
	document.getElementsByTagName('head')[0].appendChild(s);
	return s;
}
//===========================================================================
 
 
//===========================================================================
// automatische Aktualisierung der Letzten Änderungen via Ajax
//---------------------------------------------------------------------------
if (wgUserGroups) {
  for (var i=0; i<wgUserGroups.length; i++) {
    if (wgUserGroups[i]=="user") {//Prüft, ob Benutzer angemeldet ist
      importScript('Benutzer:Ghost/Ajax.js');
      break;
    }
  }
}
//===========================================================================
 
 
//===========================================================================
// bessere Linktitel für Wikipedia-Links
//---------------------------------------------------------------------------
$("a[href^='http://de.wikipedia.org']").each(function(){
	$(this).attr('title',$(this).text()+' in der deutschen Wikipedia');
});
$("a[href^='http://en.wikipedia.org']").each(function(){
	$(this).attr('title',$(this).text()+' in der englischen Wikipedia');
});
//===========================================================================
 
 
//===========================================================================
// behebt Anzeigefehler bei unmarkierten Änderungen: Wenn eine Box vor der Infobox steht und maximale Breite füllt, überlappte sich deren Inhalt bei Sichtern teils mit der Infobox.
//---------------------------------------------------------------------------
$("#mw-fr-revisiontag").after("<div style='height: 10px;'></div>");
//===========================================================================
 
 
//===========================================================================
// verbirgt das Betreff-Eingabefeld bei Löschanträgen, da die Überschrift schon im Editor hinzugefügt wird
//---------------------------------------------------------------------------
if($('.noSummary').length){
	$('#editform #wpSummary').hide();
	$('#editform #wpSummaryLabel').hide();
}
//===========================================================================
 
 
//===========================================================================
// behebt einen Fehler mit den slideshows, damit sie nicht teilweise mitten im Text hängen
//---------------------------------------------------------------------------
$('.slideshow').each(function(){
	$(this).css('clear',($(this).css('float')=='left')?'left':'right');
})
//===========================================================================
 
 
//===========================================================================
// Lade die verlinkten anderen TV-Planer auf der Hauptseite direkt anstatt des normal angezeigten, ohne die Seite verlassen zu müssen
//---------------------------------------------------------------------------
if(mw.config.get('wgPageName')==="Hauptseite"){
	var TVPlanerActive=0;
	$('#TVPlaner + table td:first-child a, #TVPlaner-thisWeek a, #TVPlaner + table td:nth-child(3) a').each(function(){
		$(this).click(function(e){
			var url=$(this).attr('href');
			var title=$(this).attr('title');
			var num=url.split('/')[4];
			num=num.substr(0,num.indexOf('.'));
			if(TVPlanerActive!=num){ //wenn eine Woche gerade angezeigt wird, muss sie nicht neu geladen werden
				e.preventDefault ? e.preventDefault() : (e.returnValue = false); //wahrt Kompatibilität zu IE8 und älter
				$('#TVPlaner-loading').show('fast');
				$('#TVPlaner').slideUp();
				if($('#TVPlaner-thisWeek').is(':hidden')) $('#TVPlaner-thisWeek').show(); //beim ersten "Umschalten" muss der Link zur aktuellen Woche sichtbar gemacht werden
				$('#TVPlaner').load(url+'#mw-content-text table', function(){
					$('#TVPlaner').slideDown();
					$('#TVPlaner-loading').hide('fast');
				});
				if($('#Diese_Woche_im_TV small a').length) $('#Diese_Woche_im_TV small a').attr('href', url).attr('title', title);
				TVPlanerActive=num;
			}
		});
	});
}
//===========================================================================
 
 
//===========================================================================
// Fix für das inputbox-Problem: Ignoriere alle inputboxen innerhalb der vector-Vorschau, sonst wird evtl. auf der falschen Seite gespeichert
//---------------------------------------------------------------------------
if(mw.config.get('wgAction')==="edit"){
	window.onload = function () {
		var observer=new MutationObserver(function(mutations){
			mutations.forEach(function(m){
				if(m.addedNodes.length){
					  $('.wikiEditor-preview-contents').promise().done(function() {
					    $('.wikiEditor-preview-contents input').prop('disabled', true);
					  });
				}
			});
		});
		observer.observe(document.querySelector('.wikiEditor-preview-contents'),{childList: true});
	};
}
//===========================================================================
 
 
//===========================================================================
// ergänze Facebook-Link links oben, Einblendung erfogt animiert (Button wird ohnehin erst einige Momente nach dem Seitenaufbau ergänzt)
//---------------------------------------------------------------------------
$('#mw-head').prepend("<div id='FBButton'>"
					 +"<div class='floatleft'>"
					 +"<a href='https://www.facebook.com/stargatewikide' title='Folge uns auf Facebook!' rel='nofollow'>"
					 +"<img alt='' src='/w/images/thumb/c/c2/F_icon.svg/11px-F_icon.svg.png' srcset='/w/images/thumb/c/c2/F_icon.svg/17px-F_icon.svg.png 1.5x, /w/images/thumb/c/c2/F_icon.svg/22px-F_icon.svg.png 2x' data-file-width='267' data-file-height='267' height='11' width='11'>"
					 +" Folge uns auf Facebook"
					 +"</a></div></div>");
$('#FBButton').css('visibility', 'visible').animate({opacity: 1.0}, 400);
//===========================================================================
 
//===========================================================================
// Versteckt Spoiler-Abschnitte im Inhaltsverzeichnis
//---------------------------------------------------------------------------
spoilerHeadings = {
	headings: [],
	init: function(){
		$('.spoiler :header > span').each(function(i, e){
			spoilerHeadings.headings.push(e.id);
		});
		spoilerHeadings.hideAll();
	},
	hideAll: function(){
		spoilerHeadings.headings.forEach(function(val){
			spoilerHeadings.hide(val);
		});
	},
	showAll: function(){
		spoilerHeadings.headings.forEach(function(val){
			spoilerHeadings.show(val);
		});
	},
	hide: function(id){
		$("#toc li > a[href='#"+id+"']").parent('li').hide();
	},
	show: function(id){
		$("#toc li > a[href='#"+id+"']").parent('li').show();
	},
	toggle: function(id){
		$("#toc li > a[href='#"+id+"']").parent('li').toggle();
	}
}
 
$( spoilerHeadings.init );
//===========================================================================
 
//===========================================================================
// Gleicht die Abstände zwischen den Boxen in den Spalten der Hauptseite aus, sodass am Ende keine große Lücke in einer Spalte entsteht
//---------------------------------------------------------------------------
if(wgPageName=='Hauptseite' && wgAction=='view'){
	var balanceHeights={
		diff: 0,
		surplusRight: undefined,
		relevantBuffers: undefined,
		leftBuffers: undefined,
		rightBuffers: undefined,
		getHeightDiff: function(){
			return $('#leftcol').height() - $('#rightcol').height();
		},
		checkBalance: function(){
			balanceHeights.diff = balanceHeights.getHeightDiff();
			if(balanceHeights.diff === 0) return;
 
			if(balanceHeights.diff<0){
				balanceHeights.diff *= -1;
				balanceHeights.surplusRight = true;
				balanceHeights.relevantBuffers = balanceHeights.leftBuffers;
			}else{
				balanceHeights.surplusRight = false;
				balanceHeights.relevantBuffers = balanceHeights.rightBuffers;
			}
		},
		init: function(){
			$('#leftcol .vertbuffer, #rightcol .vertbuffer').css('transition', 'height .3s');
			balanceHeights.leftBuffers = $('#leftcol .vertbuffer');
			balanceHeights.rightBuffers = $('#rightcol .vertbuffer');
 
			balanceHeights.checkBalance();
			balanceHeights.relevantBuffers.each(function(i, e){
				e.style.height = Math.round(balanceHeights.diff / balanceHeights.relevantBuffers.length)+"px"
			});
 
			balanceHeights.checkBalance();
			balanceHeights.relevantBuffers.last().get(0).style.height = balanceHeights.relevantBuffers.last().height()+balanceHeights.diff+"px"
		}
	};
	$(balanceHeights.init);
}
//===========================================================================
 
//===========================================================================
// Passt Links, die mit der [[Vorlage:Gelöschte Seite]] erzeugt werden, farblich vollständig (samt Unterstrich) an echte Redlinks an.
//---------------------------------------------------------------------------
$(function() {
	$('.geloeschteSeite').parent().css('color','#ba0000');
});
//===========================================================================
 
 
//===========================================================================
// Import-Skript für CSS-Styles analog zu importScript
//---------------------------------------------------------------------------
function importStyle(page) {
	var uri = wgScript + '?title=' +
		encodeURIComponent(page.replace(/ /g,'_')).replace(/%2F/ig,'/').replace(/%3A/ig,':') +
		'&action=raw&ctype=text/css';
	return importStyleURI(uri);
}
 
var loadedStyles = {}; // included-styles tracker
function importStyleURI(url) {
	if (loadedStyles[url]) {
		return null;
	}
	loadedStyles[url] = true;
	var e = document.createElement('link');
	e.setAttribute('href',url);
	e.setAttribute('rel','stylesheet');
	document.getElementsByTagName('head')[0].appendChild(e);
	return e;
}
//===========================================================================