Benutzer:Umherirrender/monobook-sul.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen 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
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/*
 * @author Umherirrender - [[:de:User:Umherirrender]]
 * develop with and for Internet Explorer 11+
 *
 * gegen Übernahmen spricht nichts, nur bitte nicht diese JavaScript-Seite direkt einbinden
 * ohne Gewähr und ohne Support
 *
 * eigene Anpassungen für alle Wikis
 */
//<nowiki>
mw.loader.using( [ 'mediawiki.util' ], function() { $( function () {
 /** Ergänzungen */
 /* Info über API-Status */
 var header = $( '#firstHeading' );
 if ( header.length ) {
  //API nicht verfügbar
  if ( true && false ) {
   var span = $( document.createElement( 'span' ) );
   span.css( 'fontSize', '75%' );
   span.css( 'color', 'red' );
   span.css( 'fontFamily', 'Courier New' );
   span.attr( 'id', 'hinweis_enableAPI' );
   span.text( ' (API nicht verfügbar)' );
   header.append( span );
  }
  //writeAPI nicht verfügbar
  if ( true && false ) {
   var span = $( document.createElement( 'span' ) );
   span.css( 'fontSize', '75%' );
   span.css( 'color', 'red' );
   span.css( 'fontFamily', 'Courier New' );
   span.text( ' (writeAPI nicht verfügbar)' );
   header.append( span );
  }
 }
 //Suchfeld an erste Stelle (unter Logo)
 var search = $( '#p-search' );
 var logo = $( '#p-logo' );
 if( search.length && logo.length ) {
   search.detach();
   search.val( '' );
   search.insertBefore( logo );
 }

 /* Schutzstatus auswerten und Ampelfarben setzen
  * funktioniert nicht bei kaskadierender Sperre (Bug 11700)
  */
 if( mw.config.exists( 'wgRestrictionEdit' ) ) {
  var wgRestrictionEdit = mw.config.get( 'wgRestrictionEdit' );
  for ( var i = 0; i < wgRestrictionEdit.length; i++ ) {
   //gelb bei halbsperre
   if (wgRestrictionEdit[i] === "autoconfirmed") {
    mw.util.addCSS("#ca-edit a { background-color:#EEEE00 !important; }");   
   }
   //orange bei editorsperre
   else if (wgRestrictionEdit[i] === "editeditorprotected") {
    mw.util.addCSS("#ca-viewsource, #ca-edit a { color:#FFA500 !important; }");   
   }
   //rot bei vollsperre
   else if (wgRestrictionEdit[i] === "sysop") {
    //view source, da ich die Seite in einigen Wikis nicht bearbeiten kann
    mw.util.addCSS("#ca-viewsource, #ca-edit a { color:#FF6A6A !important; }");   
   }
  }
 }
 if( mw.config.exists( 'wgRestrictionMove' ) ) {
  var wgRestrictionMove = mw.config.get( 'wgRestrictionMove' );
  for ( var i = 0; i < wgRestrictionMove.length; i++ ) {
   //gelb bei halbsperre
   if (wgRestrictionMove[i] === "autoconfirmed") {
    mw.util.addCSS("#ca-move a { background-color:#EEEE00 !important; }");   
   }
   //rot bei vollsperre
   else if (wgRestrictionMove[i] === "sysop") {
    mw.util.addCSS("#ca-move a { color:#FF6A6A !important; }");   
   }
  }
 }
/* if( mw.config.exists( 'wgRestrictionUpload' ) ) {
    nicht interessant für mich, da ich keine Dateien hochlade
    wüsste auch nicht, welches Element man markieren könnte
 }*/
 if( mw.config.exists( 'wgRestrictionCreate' ) ) {
  var wgRestrictionCreate = mw.config.get( 'wgRestrictionCreate' );
  for ( var i = 0; i < wgRestrictionCreate.length; i++ ) {
   //gelb bei halbsperre
   if (wgRestrictionCreate[i] === "autoconfirmed") {
    mw.util.addCSS("#ca-edit a { background-color:#EEEE00 !important; }");   
   }
   //rot bei vollsperre
   else if (wgRestrictionCreate[i] === "sysop") {
    mw.util.addCSS("#ca-edit a { color:#FF6A6A !important; }");   
   }
  }
 }
 var userpage = $( '#pt-userpage' );
 if ( userpage.length ) {
  //wo bin ich?
  var span = $( document.createElement( 'span' ) );
  span.css( 'color', 'gray' );
  span.text( '[' + mw.config.get( 'wgDBname' ) + ' ' + mw.config.get( 'wgVersion' ) + ']');
  span.insertBefore( userpage );
 }
 var namespaceNumber = mw.config.get( 'wgNamespaceNumber' );
 var urlPageName = mw.util.wikiUrlencode( mw.config.get( 'wgPageName' ) );
 var canonicalSpecialPageName = mw.config.get( 'wgCanonicalSpecialPageName' );
 /* integriert Links auf Unterseiten (eigene bei den persönlichen Links, relativ zur besuchten Seite bei der Werkzeugliste) */
 /* Personal links - http://de.wikipedia.org/w/index.php?title=Wikipedia:Wikizine&oldid=40697727#Schon_gewusst.2C_dass... */ 
 mw.util.addPortletLink(
  'p-personal',
  mw.util.getUrl( 'Special:Prefixindex/User:Umherirrender/', { stripprefix: 1 } ),
  'Unterseiten',
  'pt-links',
  'Eigene Unterseiten',
  '!',
  '#pt-preferences'
 );
 /* zeigt "Unterseiten" in der Werkzeugleiste, wie auf Commons */
 if (namespaceNumber !== -2 // Media
  && namespaceNumber !== -1 // Spezial
  && namespaceNumber !==  0 // (Artikel-)
  && namespaceNumber !==  6 // Bild
  && namespaceNumber !== 14 // Kategorie
  ) {
  mw.util.addPortletLink(
   'p-tb',
   mw.util.getUrl( 'Special:Prefixindex/' + mw.config.get( 'wgPageName' ) + '/' ),
   'Unterseiten',
   't-subpages',
   'Liste der Unterseiten',
   's',
   '#t-upload'
  );
 }
 /* 'Logbücher Seite' */
 if ( namespaceNumber >= 0 ) {
  mw.util.addPortletLink(
   'p-tb',
   mw.util.getUrl( 'Special:Log', { 'page': mw.config.get( 'wgPageName' ) } ),
   'Logbücher Seite',
   't-pagelog',
   'Logbücher Seite',
   'l',
   '#t-upload'
  );
 }
 /* zusätzlich 'Logbücher Commons' bei Bilder */
 if (namespaceNumber === 6 && mw.config.get( 'wgDBname' ) !== "commonswiki") { // Bild
  mw.util.addPortletLink(
   'p-tb',
   '//commons.wikimedia.org/w/index.php?title=Special:Log&page=File:' + urlPageName.substring( 6 ),
   'Logbücher Commons',
   't-pagelogcom',
   'Logbücher Commons',
   'c',
   '#t-upload'
  );
 }

 /* SUL bei Benutzern */
 if ( mw.config.exists( 'wgRelevantUserName' ) ) {
  var user = mw.util.rawurlencode( mw.config.get( 'wgRelevantUserName' ) );
  mw.util.addPortletLink(
   'p-tb',
   mw.util.getUrl( 'Special:CentralAuth/' + user ),
   'SUL-Info',
   't-sulinfo',
   'SUL-Info',
   's',
   '#t-contributions'
  );
  mw.util.addPortletLink(
   'p-tb',
   mw.util.wikiScript( 'api' ) +
    '?action=query&list=users&meta=globaluserinfo' +
    '&usprop=groups|implicitgroups|editcount|registration|blockinfo&guiprop=groups|rights|unattached' +
    '&ususers=' + user + '&guiuser=' + user,
   'Benutzer-Info',
   't-userinfo',
   'Benutzer-Info',
   'u',
   '#t-contributions'
  );
 }
 
 /* fügt ein '+' in meine persönliche Leiste, mitdem ein neuer Abschnitt auf meiner Diskussionsseite gestartet werden kann, nutze die Vorschaufunktion, für tests, um eine Arbeitsliste abzuarbeiten etc. */
 mw.util.addPortletLink(
  'p-personal',
   mw.util.getUrl( 'User_talk:' + mw.util.rawurlencode( mw.config.get( 'wgUserName' ) ),
    { 'action': 'edit', 'section': 'new' } ),
   '+',
   'pt-addsection',
   'Kommentar (eigene Diskussionsseite)',
   '+',
   '#pt-links'
  );

 /* fügt ein '(de.wp)' in meine persönliche Leiste, damit ich einfach nach de.wp zurück komme */
 if ( mw.config.get( 'wgDBname' ) !== "dewiki" ) {
  mw.util.addPortletLink(
   'p-personal',
   '//de.wikipedia.org/wiki/Spezial:Beobachtungsliste',
   '(de.wp)',
   'pt-watchlist-home',
   'zur eigenen Beobachtungsliste auf de.wp',
   null,
   '#pt-watchlist'
  );
 }

 /* Validator link für CSS */
 if ( mw.config.get( 'wgPageContentModel' ) === 'css' ) {
  var parts = mw.config.get( 'wgTitle' ).split( '/' );
  var subpage = parts[parts.length - 1];
  var skin = subpage.substring( 0, subpage.lastIndexOf( '.' ) );
  var user = parts[0];
  if ( skin === 'common' || mw.config.get( 'wgAvailableSkins' )[skin] ) {
   mw.util.addPortletLink(
    'p-tb',
    'http://jigsaw.w3.org/css-validator/validator?uri=' + mw.util.rawurlencode(
     'https:' + mw.util.wikiScript( 'load' ) + '?debug=false&lang=' + mw.util.rawurlencode( mw.config.get( 'wgPageContentLanguage' ) )
     + '&modules=user&only=styles&skin=' + mw.util.rawurlencode( skin )
     + '&user=' + mw.util.rawurlencode( user ) ),
    'CSS-Validator',
    't-css-validator',
    'CSS-Validator',
    'l',
    '#t-upload'
   );
  }
 }

 /* fügt den iso-code zu den Interwikis */
 $( '#p-lang li' ).each( function() {
  var li = $( this );
  var className = li.attr( 'class' );
  if( !className || /* WikiData edit link */ li.hasClass( 'wbc-editpage' ) || li.hasClass( 'wbc-nolanglinks' ) ) {
   return;
  }
  var matches = className.match( /(?:^| )(interwiki-[^ ]+)(?: |$)/ );
  if (  !matches || matches.length != 2 ) {
   return;
  }
  className = matches[1];
  var lang = className.substring( 10 /*'interwiki-'.length*/ );
  //gleichlang machen
  while ( lang.length <= 3 ) {
   lang += ' ';
  }
  var span = $( document.createElement( 'span' ) );
  span.text( lang + ' ' );
  span.css( 'fontFamily', 'Courier New' );
  span.css( 'fontSize', '75%' );
  span.css( 'verticalAlign', 'middle' );
  span.insertBefore( li.children( ':first') );
 });
 /* nur dateien */
 if (namespaceNumber === 6) {
  /* setzt den software-hinweis bei Dateien sichtbar in den ersten head */
  var dup = $( '#mw-imagepage-section-duplicates' );
  if ( dup.length && header.length ) {
   var span = $( document.createElement( 'span' ) );
   span.css( 'fontSize', '50%' );
   span.attr( 'id', 'hinweis-duplicat-file' );
   span.text( ' (Duplikat)' );
   header.append( span );
  }
 }

 //auf inhalt beziehen
 var contentElement = document.getElementById( 'bodyContent' );
 if (contentElement) {
  /* Permalink zur Überschrift */
  /* Bearbeiten-Link für Abschnitte, falls nicht vorhanden (geschützte Seite oder alte Version) */
  var header = contentElement.getElementsByTagName( 'h2' );
  if( namespaceNumber >= 0 && mw.config.get( 'wgAction' ) === 'view' && header && header.length > 0 ) {
   var idOld = document.getElementById( 'mw-revision-info' ) !== null;
   var isViewsource = document.getElementById( 'ca-viewsource' ) !== null;
   var editlinkText = isViewsource ?
                      'Betrachten' :
                      'Bearbeiten';
   var editlinkTitle = isViewsource ?
                      ( idOld ? 'Alten Abschnitt betrachten' : 'Abschnitt betrachten' ) :
                      ( idOld ? 'Alten Abschnitt bearbeiten' : 'Abschnitt bearbeiten' );
   var editlinkHref = mw.config.get( 'wgScript' ) + '?title=' + urlPageName + '&action=edit&section=';

   var permalink = document.getElementById( 't-permalink' );
   var addsection = document.getElementById( 'ca-addsection' );
   var addPermalink = permalink && addsection;
   var permalinkText = 'Permalink';
   var permalinkTitle = 'Permalink zum Abschnitt';
   var permalinkLink = addPermalink ? permalink.firstChild.href : '';

   //setze einen Bearbeitenlink für den ersten Abschnitt
   var editsectionFirst = document.createElement( 'span' );
   editsectionFirst.className = 'mw-editsection';
   editsectionFirst.id = 'mw-editsection-first';
   editsectionFirst.appendChild( document.createTextNode( '[' ) );
   var editsectionFirstLink = document.createElement( 'a' );
   editsectionFirstLink.href = editlinkHref + '0';
   editsectionFirstLink.title = isViewsource ?
                ( idOld ? 'Alten Abschnitt betrachten: Einleitung' : 'Abschnitt betrachten: Einleitung' ) :
                ( idOld ? 'Alten Abschnitt bearbeiten: Einleitung' : 'Abschnitt bearbeiten: Einleitung' );
   editsectionFirstLink.appendChild( document.createTextNode( editlinkText ) );
   editsectionFirst.appendChild( editsectionFirstLink );
   editsectionFirst.appendChild( document.createTextNode( ']' ) );
   var firstHeading = document.getElementById("firstHeading");
   firstHeading.insertBefore( editsectionFirst, firstHeading.firstChild );
   //setze einen permalink für den Ersten Abschnitt
   if ( permalink ) {
    var a = document.createElement('a');
    a.href = permalink.firstChild.href;
    a.title = permalink.title;
    a.appendChild( document.createTextNode( permalinkText ) );
    editsectionFirst.insertBefore( a, editsectionFirst.firstChild.nextSibling );
    editsectionFirst.insertBefore( document.createTextNode( '|' ), a.nextSibling );
   }
   var section = 0;
   //Permalink in den header setzen
   //Falls nicht vorhanden, auch einen Bearbeiten-Link
   for (var i = 0; i < header.length; i++) {
    var spans = header[i].getElementsByTagName( 'span' );
    var editsection = null;
    var headline = null;
    for( var j = 0; j < spans.length; j++ ) {
     if( spans[j].className === 'mw-headline' ) {
      headline = spans[j];
      if( editsection ) { //beide gefunden -> abbrechen
       break;
      }
     } else if( spans[j].className.match( /(?:mw-)?editsection/ ) ) {
      editsection = spans[j];
      if( headline ) { //beide gefunden -> abbrechen
       break;
      }
     }
    }
    // kein Header gefunden
    if( !headline ) {
     continue;
    }
    //Kein Bearbeitenlink vorhanden, also einen erzeugen
    //FIXME die Nummerierung schert sich nicht um die Abschnittsstufen, daher passen nicht immer die Sectionnummer
    if( !editsection ) {
     editsection = document.createElement( 'span' );
     editsection.className = 'mw-editsection';
     editsection.appendChild(document.createTextNode( '[' ) );
     var editlink = document.createElement( 'a' );
     editlink.appendChild( document.createTextNode( editlinkText ) );
     editlink.href = editlinkHref + ++section;
     editlink.title = editlinkTitle;
     editsection.appendChild( editlink );
     editsection.appendChild(document.createTextNode( ']' ) );
     headline.insertBefore( editsection, headline.firstChild );
    }
    if( addPermalink ) {
     //permalink erzeugen
     var a = document.createElement( 'a' );
     a.href = permalinkLink + '#' + headline.id;
     a.title = permalinkTitle;
     a.appendChild( document.createTextNode( permalinkText ) );
     //link einsetzen
     editsection.insertBefore( a, editsection.firstChild.nextSibling );
     editsection.insertBefore( document.createTextNode( '|' ), a.nextSibling );
    }
   }
  }
 }
 /* entfernt unnötiges von Spezial:Beiträge */
 if ( canonicalSpecialPageName === 'Contributions' ) {
  var label = contentElement.getElementsByTagName("label");
  for (var i = 0; i < label.length; i++) {
   //die "nur neue Benutzer"-Anzeige entfernen
   if (label[i].htmlFor === "newbie") {
    label[i].parentNode.removeChild(label[i].previousSibling);
    label[i].parentNode.removeChild(label[i].previousSibling);
    label[i].parentNode.removeChild(label[i].nextSibling);
    label[i].parentNode.removeChild(label[i]);
   }
   //Namen kürzen und RadioButton entfernen
   if (label[i].htmlFor === "user") {
    label[i].parentNode.removeChild(label[i].previousSibling);
    label[i].parentNode.removeChild(label[i].previousSibling);
    //text umbenennen
    label[i].firstChild.data = "Benutzername:";
    break;
   }
  }
  /* entfernt das Feld für den Markierungsfilter */
  var fieldset = contentElement.getElementsByTagName("fieldset");
  if( fieldset && fieldset[0] ) {
   var p = fieldset[0].getElementsByTagName("p");
   if ( p ) {
    for( var i = 0; i < p.length; i++ ) {
     if ( p[i]
       && p[i].childNodes[1]
       && p[i].childNodes[1].data
       && p[i].childNodes[1].data.substring(0,7) === '-Filter'
       ) {
      fieldset[0].removeChild(p[i]);
      break;
     }
    }
   }
  }
 }
 /* nur für Log */
 else if ( canonicalSpecialPageName === 'Log' ) {
  /* entfernt das Feld für den Markierungsfilter */
  var fieldset = contentElement.getElementsByTagName("fieldset");
  if( fieldset && fieldset[0] ) {
   var p = fieldset[0].getElementsByTagName("p");
   if ( p ) {
    for( var i = 0; i < p.length; i++ ) {
     if ( p[i]
       && p[i].childNodes[1]
       && p[i].childNodes[1].data
       && p[i].childNodes[1].data.substring(0,7) === '-Filter'
       ) {
      fieldset[0].removeChild(p[i]);
      break;
     }
    }
   }
  }
 }
 /* nur für Spezial:Neue Seiten */
 else if ( canonicalSpecialPageName === 'Newpages' ) {
  /* entfernt das Feld für den Markierungsfilter */
  var table = document.getElementById( 'mw-newpages-table' );
  var td = table.getElementsByTagName( 'td' );
  for( var i = 0; i < td.length; i++ ) {
   if( td[i] && td[i].className === 'mw-input' && td[i].firstChild && td[i].firstChild.name === 'tagfilter' ) {
    td[i].parentNode.removeChild( td[i] );
    td[i - 1].parentNode.removeChild( td[i - 1] );
    break;
   }
  }
 }
 /* nur für Letzte Änderungen und verlinkte Letzte Änderungen */
 else if ( canonicalSpecialPageName === 'Recentchanges'
       || canonicalSpecialPageName === 'Recentchangeslinked' ) {
  /* entfernt das Feld für den Markierungsfilter */
  var table = contentElement.getElementsByTagName( 'table' );
  for( var j = 0; j < table.length; j++ ) {
   if( table[j] && table[j].className === 'mw-recentchanges-table' ) {
    var td = table[j].getElementsByTagName( 'td' );
    for( var i = 0; i < td.length; i++ ) {
     if( td[i] && td[i].className === 'mw-input' && td[i].firstChild && td[i].firstChild.name === 'tagfilter' ) {
      td[i].removeChild( td[i].firstChild );
      td[i - 1].parentNode.removeChild( td[i - 1] );
      break;
     }
    }
    break;
   }
  }
 }
 /* nur in der Versionsgeschichte */
 else if( mw.config.get( 'wgAction' ) === 'history' ) {
  /* entfernt das Feld für den Markierungsfilter */
  var fieldset = contentElement.getElementsByTagName( 'fieldset' );
  if( fieldset && fieldset[0] ) {
   var input = fieldset[0].getElementsByTagName( 'input' );
   for( var i = 0; i < input.length; i++ ) {
    if ( input[i]
      && input[i].name === 'tagfilter'
      ) {
     fieldset[0].removeChild(input[i].previousSibling); //beschreibung teil 1
     fieldset[0].removeChild(input[i].previousSibling); //beschreibung teil 2
     fieldset[0].removeChild(input[i]); //input-tag
     break;
    }
   }
  }
 }
 // Minor nicht bei Diskussionen - Fällt nicht jedem auf der Beobachtungsliste auf oder gibt keine Mail
 // Leider ist #ca-addsection bei edit oder preview von Nicht-Diskussionsnamensräumen nicht gesetzt,
 // da NEWSECTIONLINK dabei nicht beachtet wird
 if ( mw.config.get( 'wgAction' ) === 'edit' && $( '#ca-addsection a' ).length ) {
   $( '#wpMinoredit' ).prop( 'checked', false );
 }
})});

/* erzeugt an jeder Überschrift einen Link zur vorherigen und einen Link nach oben
   zusätzlich wird am Ende der Seite ein Link nach oben angezeigt */
mw.loader.using( [ 'mediawiki.util' ], function() { $( function() {
 var zeichen = "▲";
 var address = "#globalWrapper";
 var text   = "An den Seitenanfang";
 var texth   = "Zur vorherigen Überschrift gleicher Stufe";
 var contentElement = document.getElementById("bodyContent");
 //link am Seitenanfang zum Ende
 var link = document.createElement("a");
 link.href=address;
 link.title=text;
 link.appendChild(document.createTextNode(zeichen));
 var span = document.createElement("span");
 span.style.fontSize="250%";
 span.style.left="-35px";
 span.style.bottom="20px";
 span.style.position="absolute";
 span.appendChild(link);
 contentElement.appendChild(span);
 //für jede Überschrift - MediaWiki:Gadget-Pfeil-hoch.js
 for (var level = 2; level <= 6; level++) {
  var h = contentElement.getElementsByTagName("h" + level);
  for (var i = 0; h && i < h.length; i++) {
   var abottom = document.createElement("a");
   abottom.appendChild(document.createTextNode(zeichen));
   abottom.href=address;
   abottom.title=text;
   h[i].appendChild(abottom);
   //id vergeben, damit danach anspringen kann
   var aid = document.createElement("a");
   aid.id="h"+level+i;
   h[i].appendChild(aid);
   //prev - erzeuge Symbol für vorherige Überschrift
   var aprev = document.createElement("a");
   aprev.appendChild(document.createTextNode(zeichen));
   //wenn am letzten, geht es mit footer weiter
   if (i === 0) {
    aprev.href=address;
   } else {
    aprev.href="#h"+level+(i-1);
   }
   aprev.title=texth;
   var aprevspan= document.createElement("span");
   aprevspan.style.fontSize="60%";
   aprevspan.style.left="-1em";
   aprevspan.style.marginBottom="0.5em";
   aprevspan.style.position="absolute";
   aprevspan.appendChild(aprev);
   h[i].insertBefore(aprevspan, h[i].firstChild); 
  }
 }
 //link am Seitenende zum TOC
 if ( $( 'toc' ).length ) {
  var afirst = $( document.createElement( 'a' ) );
  afirst.href( '#toc' );
  afirst.attr( 'title', 'Inhaltsverzeichnis' );
  afirst.text( zeichen );
  var spanfirst = $( document.createElement( 'span' ) );
  spanfirst.css( 'fontSize', '90%' );
  spanfirst.css( 'left', '-1em' );
  spanfirst.css( 'bottom', '20px' );
  spanfirst.css( 'position', 'absolute' );
  spanfirst.append( afirst );
  mw.util.$content.append( spanfirst );
 }
})});

/* erzeugt an jeder Überschrift einen Link zur nächsten und einen Link nach unten
   zusätzlich wird am Beginn der Seite ein Link nach unten angezeigt sowie zum TOC*/
mw.loader.using( [ 'mediawiki.util' ], function() { $( function() {
 var zeichen = "▼";
 var address = "#footer";
 var text    = "An das Seitenende";
 var texth   = "Zur nächsten Überschrift gleicher Stufe";
 var contentElement = document.getElementById("bodyContent");
 //link am Seitenende zum Anfang
 var link = document.createElement("a");
 link.href=address;
 link.title=text;
 link.appendChild(document.createTextNode(zeichen));
 var span = document.createElement("span");
 span.style.fontSize="250%";
 span.style.left="-35px";
 span.style.top="20px";
 span.style.position="absolute";
 span.appendChild(link);
 contentElement.appendChild(span);
 //für jede Überschrift - MediaWiki:Gadget-Pfeil-hoch.js
 for (var level = 2; level <= 6; level++) {
  var h = contentElement.getElementsByTagName("h" + level);
  for (var i = 0; h && i < h.length; i++) {
   var atop = document.createElement("a");
   atop.appendChild(document.createTextNode(zeichen));
   atop.href=address;
   atop.title=text;
   h[i].appendChild(atop);
   //id vergeben, damit danach anspringen kann
   var aid = document.createElement("a");
   aid.id="h"+level+i;
   h[i].appendChild(aid);
   //next - erzeuge Symbol für nächste Überschrift
   var anext = document.createElement("a");
   anext.appendChild(document.createTextNode(zeichen));
   //wenn am letzten, geht es mit footer weiter
   if (i === h.length-1) {
    anext.href=address;
   } else {
    anext.href="#h"+level+(i+1);
   }
   anext.title=texth;
   var anextspan = document.createElement("span");
   anextspan.style.fontSize="60%";
   anextspan.style.left="-1em";
   anextspan.style.marginTop="0.5em";
   anextspan.style.position="absolute";
   anextspan.appendChild(anext);
   h[i].insertBefore(anextspan,h[i].firstChild);
  }
 }
 //link am Seitenanfang zum TOC
 if ( $( 'toc' ).length ) {
  var afirst = $( document.createElement( 'a' ) );
  afirst.href( '#toc' );
  afirst.attr( 'title', 'Inhaltsverzeichnis' );
  afirst.text( zeichen );
  var spanfirst = $( document.createElement( 'span' ) );
  spanfirst.css( 'fontSize', '90%' );
  spanfirst.css( 'left', '-1em' );
  spanfirst.css( 'top', '0px' );
  spanfirst.css( 'position', 'absolute' );
  spanfirst.append( afirst );
  mw.util.$content.append( spanfirst );
 }
})});

/* erzeugt am Seitenende einen Link zum einfügen eines Neuen Abschnitts */
mw.loader.using( [ 'mediawiki.util' ], function() { $( function() {
 var address = $( '#ca-addsection a' );
 //prüfe, ob es den Link gibt
 if ( address.length ) {
  var zeichen = '+';
  var text = 'Einen neuen Abschnitt zu dieser Seite hinzufügen';
  var link = $( document.createElement( 'a' ) );
  link.attr( 'href', address.attr( 'href' ) );
  link.attr( 'title', text );
  link.append( $( document.createTextNode( zeichen ) ) );
  var span = $( document.createElement( 'span' ) );
  span.css( 'fontSize', '250%' );
  span.css( 'left', '-50px' );
  span.css( 'bottom', '20px' );
  span.css( 'position', 'absolute' );
  span.append( link );
  mw.util.$content.append( span );
 }
})});

mw.loader.using( [ 'mediawiki.api', 'mediawiki.util', 'jquery.spinner' ], function() {
 $.extend( mw.Api.prototype, {
  purge: function ( titles, forcelinkupdate ) {
   if ( !$.isArray( titles ) ) {
    titles = [ titles ];
   }

   titles = $.unique( titles );

   query = {
    'action': 'purge',
    'titles': titles.join( '|' )
   };
   if ( forcelinkupdate ) {
    query.forcelinkupdate = '';
   }

   return this.post( this, query );
  }
 } );

 $( function() {
  var title = mw.config.get( 'wgRelevantPageName', mw.config.get( 'wgPageName' ) ),
      $history = $( '#ca-history' );
  if ( $history.length ) {
   mw.util.addPortletLink(
    'p-cactions',
    mw.config.get('wgArticlePath').replace( /\$1/, title ), // someone/something is cutting all after last /
    'Purgen',
    'ca-purge',
    'Servercache leeren',
    'p',
    $history
   );
  }

  $( '#ca-purge' ).click( function() {
   $spinner = $.createSpinner( {
    size: 'small',
    type: 'inline'
   } );
   $( this ).append( $spinner );

   api = new mw.Api();
   api.purge( title, true )
    .done( function( data ) {
     if ( mw.config.get( 'wgAction', 'view' ) === 'view' ) {
      //reload page, than the user can see, that the purge was done
      window.location.reload();
     } else {
      mw.notify( 'Purge der Seite „' + title + '“ erfolgreich.', { tag: 'purge-ok' } );
      $spinner.remove();
     }
    })
    .fail( function( code, data ) {
     mw.notify(
      'Fehler beim purge der Seite „' + title + '“.' +
      ' (' + code + ( data && data.error && data.error.info ? ': ' + data.error.info : '' ) + ')',
      { tag: 'purge-error' }
     );
     $spinner.remove();
    });
   return false;
  });
 });
});

mw.loader.using( [ 'jquery.confirmable' ], function() {
 $( function() {
  $( '.mw-rollback-link' ).off( 'click', 'a[data-mw="interface"]' ); // TODO: Readd after confirmable?
  $( '.mw-rollback-link a' ).confirmable();
 });
});

//</nowiki> __NOINDEX__