Zum Inhalt springen

„Benutzer:Umherirrender/monobook-sul.js“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Inhalt gelöscht Inhalt hinzugefügt
K relative.js - https://de.wikipedia.org/w/index.php?title=MediaWiki_Diskussion:Common.js&oldid=94938916#MediaWiki:Common.js.2Frelative.js
K makeProtocolsRelative: regex verfeinert
Zeile 762: Zeile 762:
$(function makeProtocolsRelative() {
$(function makeProtocolsRelative() {
// zuverlässig mit beiden Protokollen verhaltensgleich funktionierende Domains
// zuverlässig mit beiden Protokollen verhaltensgleich funktionierende Domains
var reg = new RegExp("^https?\\:\\/\\/(" + [
var reg = new RegExp("^https?\\:\\/\\/(?:" + [
// (?:download|.*?mobile|.*?m|mail) funktionieren nicht oder unterschiedlich
// (?:download|.*?mobile|.*?m|mail) funktionieren nicht oder unterschiedlich
"(?!download|.*?mobile|.*?m|mail).*?\\.?wik(?:ipedia|tionary|ibooks|iquote|iversity|isource|inews|imediafoundation)",
"(?!download|(?:[^.]+\\.)?mobile|(?:[^.]+\\.)?m|mail).*?\\.?wik(?:ipedia|tionary|ibooks|iquote|iversity|isource|inews|imediafoundation)",
// (?:dumps|downloads|stats|noc|ganglia|.*?planet|mail) funktionieren nicht oder unterschiedlich
// (?:dumps|downloads|stats|noc|ganglia|.*?planet|mail) funktionieren nicht oder unterschiedlich
// ticket und bugzilla leiten eh nur auf https weiter, donate auf http://wikimediafoundation.org
// ticket und bugzilla leiten eh nur auf https weiter, donate auf http://wikimediafoundation.org
// das wäre nur lang und umständlich: "(?:lists|upload|techblog|blog|wikitech|svn|commons|incubator|.+?\\.labs|nyc|species|advisory|ar|bd|br|co|dk|et|fi|il|mk|mx|nl|no|nc|pa\\.us|pl|pt|rs|ru|se|tr|ua|uk|ve|board|boardgovcom|noboard\\.chapters|auditcom|chair|chapcom|checkuser|steward|collab|exec|grants|internal|movementroles|office|searchcom|spcom|otrs-wiki|quality|meta|outreach|volunteer|strategy|usability|survey|wikimania.*?)\\.wikimedia",
// das wäre nur lang und umständlich: "(?:lists|upload|techblog|blog|wikitech|svn|commons|incubator|.+?\\.labs|nyc|species|advisory|ar|bd|br|co|dk|et|fi|il|mk|mx|nl|no|nc|pa\\.us|pl|pt|rs|ru|se|tr|ua|uk|ve|board|boardgovcom|noboard\\.chapters|auditcom|chair|chapcom|checkuser|steward|collab|exec|grants|internal|movementroles|office|searchcom|spcom|otrs-wiki|quality|meta|outreach|volunteer|strategy|usability|survey|wikimania.*?)\\.wikimedia",
"(?!secure|dumps|downloads|stats|noc|ganglia|.*?planet|mail|ticket|bugzilla|donate).*?\\.?wikimedia",
"(?!secure|dumps|downloads|stats|noc|ganglia|(?:[^.]+\\.)?planet|mail|ticket|bugzilla|donate).*?\\.?wikimedia",
"www\\.mediawiki",
"www\\.mediawiki",
// wiki.toolserver leitet eh nur auf https weiter
// wiki.toolserver leitet eh nur auf https weiter

Version vom 6. November 2011, 13:08 Uhr

/*
 * @author Umherirrender - [[:de:User:Umherirrender]]
 * develop with and for Internet Explorer 8
 *
 * gegen Übernahmen spricht nichts, nur bitte nicht diese JavaScript-Seite direkt einbinden
 * ohne Gewähr und ohne Support
 *
 * eigene Anpassungen für alle Wikis
 */

/* 
 * Gibt die Zieladresse eines Links direkt unterhalb des durch die id bezeichneten 
 * Elements zurück. Existiert die id nicht, gibt die Funktion null zurück.
 * von [[Benutzer:Niabot]] - http://de.wikipedia.org/w/index.php?title=Benutzer_Diskussion:Niabot&diff=42524259&oldid=42521938
 */
function getLinkById(id)
{
 var node = document.getElementById(id)
 if (node)
 {
  return node.firstChild.href;
 }
 else
 {
  return null;
 }
}

//<nowiki>

/* funktionen aufrufen */
addOnloadHook(ergaenzen);
addOnloadHook(entfernen);
addOnloadHook(toTop);
addOnloadHook(toFooter);
addOnloadHook(appendAddSectionLinkAtEnd);

/* Ergänzungen */
function ergaenzen()
{
 /* Info über API-Status */
 var firstHeading = document.getElementById("firstHeading");
 if (firstHeading)
 {
  //API nicht verfügbar
  if (!wgEnableAPI)
  {
   var span = document.createElement("span");
   span.style.fontSize="75%";
   span.style.color="red";
   span.style.fontFamily="Courier New";
   span.id="hinweis_enableAPI";
   span.appendChild(document.createTextNode(" (API nicht verfügbar)"));
   firstHeading.appendChild(span);
  }
  //writeAPI nicht verfügbar
  if (!wgEnableWriteAPI)
  {
   var span = document.createElement("span");
   span.style.fontSize="75%";
   span.style.color="red";
   span.style.fontFamily="Courier New";
   span.appendChild(document.createTextNode(" (writeAPI nicht verfügbar)"));
   firstHeading.appendChild(span);
  }
  //Suchfeld an erste Stelle (unter Logo)
  var column = document.getElementById( 'column-one' );
  if ( column ) {
   //Feld entfernen
   var searchbox = column.removeChild( document.getElementById( 'p-search' ) );
   //und wieder einfügen
   column.insertBefore( searchbox, document.getElementById( 'p-logo' ) );
  }
 }

 /* Schutzstatus auswerten und Ampelfarben setzen
  * funktioniert nicht bei kaskadierender Sperre (Bug 11700)
  */
 if( typeof( wgRestrictionEdit ) != "undefined" && wgRestrictionEdit && wgRestrictionEdit.length > 0 ) {
  for ( var i = 0; i < wgRestrictionEdit.length; i++ ) {
   //gelb bei halbsperre
   if (wgRestrictionEdit[i] == "autoconfirmed") {
    appendCSS("#ca-edit a { background-color:#EEEE00 !important; }");   
   }
   //rot bei vollsperre
   else if (wgRestrictionEdit[i] == "sysop") {
    //view source, da ich die Seite nicht bearbeiten kann
    appendCSS("#ca-viewsource a { color:#FF6A6A !important; }");   
   }
  }
 }
 if( typeof( wgRestrictionMove ) != "undefined" && wgRestrictionMove && wgRestrictionMove.length > 0 ) {
  for ( var i = 0; i < wgRestrictionMove.length; i++ ) {
   //gelb bei halbsperre
   if (wgRestrictionMove[i] == "autoconfirmed") {
    appendCSS("#ca-move a { background-color:#EEEE00 !important; }");   
   }
   //rot bei vollsperre - Button wird eh nicht angezeigt
/* else if (wgRestrictionMove[i] == "sysop") {
    appendCSS("#ca-move a { color:#FF6A6A !important; }");   
   }*/
  }
 }
// if( typeof( wgRestrictionUpload ) != "undefined" && wgRestrictionUpload && wgRestrictionUpload.length > 0 ) {
    //nicht interessant für mich, da ich keine Dateien hochlade
    //wüsste auch nicht, welches Element man markieren könnte
// }
 if( typeof( wgRestrictionCreate ) != "undefined" && wgRestrictionCreate && wgRestrictionCreate.length > 0 ) {
  for ( var i = 0; i < wgRestrictionCreate.length; i++ ) {
   //gelb bei halbsperre
   if (wgRestrictionCreate[i] == "autoconfirmed") {
    appendCSS("#ca-edit a { background-color:#EEEE00 !important; }");   
   }
   //rot bei vollsperre, aber Button wird eh nicht angezeigt
/* else if (wgRestrictionCreate[i] == "sysop") {
    appendCSS("#ca-edit a { color:#FF6A6A !important; }");   
   }*/
  }
 }
 //Cookie für die Anmeldezeit setzen
 if ( wgCanonicalSpecialPageName == "Userlogin" ) {
  //now
  var date = new Date();
  //expire time
  var expires = new Date();
  expires.setTime(date.getTime() + 30*24*60*60*1000);//+ 1 Monat
  //cookie content
  var logInTime = getLogInTime();
  //is there a cookie content?
  if ( logInTime ) {
   //letzten Login anzeigen
   var header = document.getElementById( 'firstHeading' );
   if ( header ) {
    header.appendChild( document.createTextNode( ' ' ) );
    var span = document.createElement( 'span' );
    span.style.color = 'gray';
    span.style.fontSize = '75%';
    span.style.whiteSpace = 'nowrap';
    span.appendChild( document.createTextNode( 'letzte Anmeldung: ' + new Date( logInTime ).toLocaleString() + ' Uhr' ) );
    header.appendChild( span );
   }
   //ersetzen
   document.cookie = document.cookie.replace(
     new RegExp( 'logintime=' + new Date(logInTime).toGMTString() ),
     'logintime=' + date.toGMTString() + '; path=/;'
    );
  } else {
   //neu setzen
   document.cookie = 'logintime=' + date.toGMTString() + '; expires=' + expires.toGMTString() + '; path=/';
  }
 }

 /* farbige Hervorbung beim fehlen der Zusammenfassungszeile, verschwindet dynamisch, falls etwas eingetragen wurde */
 if ( wgNamespaceNumber == 0     /* ANR        */
  || wgNamespaceNumber == 6     /* Datei:     */
  || wgNamespaceNumber == 8     /* MediaWiki: */
  || wgNamespaceNumber == 10    /* Vorlage:   */
  || wgNamespaceNumber == 12    /* Hilfe:     */
  || wgNamespaceNumber == 14    /* Kategorie: */
 ) {
  var wpSummary  = document.getElementById( 'wpSummary' );
  var wpSave     = document.getElementById( 'wpSave' );
  var wpTextbox1 = document.getElementById( 'wpTextbox1' );
  if( wpSummary && wpSave ) {
   var oldStyles = {
    wpSaveTitle: wpSave.title,
    wpSaveColor: wpSave.style.color,
    wpSummaryTitle : wpSummary.title,
    wpSummaryBackgroundColor : wpSummary.style.backgroundColor
   };
   var newStyles = {
    wpSaveTitle: 'Bitte gebe in dem rot-hinterlegten Textfeld ein Bearbeitungskommentar ein.',
    wpSaveColor: '#FF6A6A',
    wpSummaryTitle : 'Bitte gebe hier ein Bearbeitungskommentar ein.',
    wpSummaryBackgroundColor : '#FF6A6A'
   };
   var keyFunction = function () {
    var wpSave = document.getElementById( 'wpSave' );
    var wpSummary = document.getElementById( 'wpSummary' );
    var wpTextbox1 = document.getElementById( 'wpTextbox1' );
    if( wpSave && wpSummary ) {
     var styles;
     if( wpSummary.value.match( /^\s*(?:\/\*.*\*\/)?\s*$/ ) ) {
      styles= newStyles;
     } else {
      styles= oldStyles;
     }
     if ( wpTextbox1 && wpTextbox1.value.match( /^\s*#(?:WEITERLEITUNG|REDIRECT)/i ) ) {
      styles= oldStyles;
     }
     wpSave.title = styles.wpSaveTitle;
     wpSave.style.color = styles.wpSaveColor;
     wpSummary.title = styles.wpSummaryTitle;
     wpSummary.style.backgroundColor = styles.wpSummaryBackgroundColor;
    }
   };
   wpSummary.onkeydown  = keyFunction;
   wpSummary.onkeypress = keyFunction;
   wpSummary.onkeyup    = keyFunction;
   wpSummary.onchange   = keyFunction;
   if( wpTextbox1 ) {
    wpTextbox1.onkeydown  = keyFunction;
    wpTextbox1.onkeypress = keyFunction;
    wpTextbox1.onkeyup    = keyFunction;
    }
   keyFunction();
  }
 }

 var userpage = document.getElementById( 'pt-userpage' );
 if ( userpage ) {
  //Zeitpunkt der Anmeldung anzeigen
  var cookieDate = Date.parse( getLogInTime() );
  if ( !isNaN( cookieDate ) ) {
   var span = document.createElement( 'span' );
   span.style.color = 'gray';
   span.appendChild( document.createTextNode( 'angemeldet: ' + new Date( cookieDate ).toLocaleString() + ' Uhr   ' ) );
   userpage.parentNode.insertBefore( span, userpage );
  }
  /* wo bin ich? */
  if ( typeof (wgDBname) != 'undefined' ) {
   var span = document.createElement( 'span' );
   span.style.color = 'gray';
   span.appendChild( document.createTextNode( '[' + wgDBname + ']' ) );
   userpage.parentNode.insertBefore( span, userpage );
  }
 }
 /* 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... */ 
 addPortletLink('p-personal','/wiki/Special:Prefixindex/User:Umherirrender/','Unterseiten','pt-links','Eigene Unterseiten','!', document.getElementById('pt-preferences'));
 
 /* zeigt "Unterseiten" in der Werkzeugleiste, wie auf Commons */
 if (wgNamespaceNumber != -2 // Media
  && wgNamespaceNumber != -1 // Spezial
  && wgNamespaceNumber !=  0 // (Artikel-)
  && wgNamespaceNumber !=  6 // Bild
  && wgNamespaceNumber != 14 // Kategorie
  )
 {
  addPortletLink( 'p-tb', '/wiki/Special:Prefixindex/'+encodeURI(wgPageName)+'/', 'Unterseiten', 't-subpages', 'Liste der Unterseiten', 's', document.getElementById('t-upload') );
 }
 /* 'Logbücher Seite' */
 if (wgNamespaceNumber != -2 // Media
  && wgNamespaceNumber != -1 // Spezial
  )
 {
  addPortletLink( 'p-tb', wgScript+'?title=Special:Log&page='+encodeURI(wgPageName), 'Logbücher Seite', 't-pagelog', 'Logbücher Seite', 'l', document.getElementById('t-upload') );
 }
 /* zusätzlich 'Logbücher Commons' bei Bilder */
 if (wgNamespaceNumber == 6 && !(typeof (wgDBname) != 'undefined' && wgDBname == "commonswiki")) // Bild
 {
  addPortletLink( 'p-tb', '//commons.wikimedia.org/w/index.php?title=Special:Log&page=File:'+encodeURI(wgPageName.slice(6)), 'Logbücher Commons', 't-pagelogcom', 'Logbücher Commons', 'c', document.getElementById('t-upload') );
  addPortletLink("p-cactions",'//toolserver.org/~daniel/WikiSense/CheckUsage.php?i=' + wgTitle , "Nutzung", 'ca-check-usage');
 }

 /* SUL bei Benutzern */
 var tContributions = document.getElementById( 't-contributions' );
 if ( tContributions ) { // wenn 'Benutzerbeiträge' vorhanden ist
  var user = encodeURIComponent( wgTitle );
  addPortletLink(
   'p-tb',
   '//toolserver.org/~vvv/sulutil.php?user=' + user,
   'SUL-Info',
   't-sulinfo',
   'SUL-Info',
   's',
   tContributions
  );
  addPortletLink(
   'p-tb',
   wgScriptPath + '/api.php?' +
    'action=query&list=users&meta=globaluserinfo' +
    '&usprop=groups|implicitgroups|editcount|registration|blockinfo&guiprop=groups|rights' +
    '&ususers=' + user + '&guiuser=' + user,
   'Benutzer-Info',
   't-userinfo',
   'Benutzer-Info',
   'u',
   tContributions
  );
 }
 
 /* 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. */
 addPortletLink('p-personal',wgScript+'?title=User_talk:Umherirrender&action=edit&section=new','+','pt-addsection','Kommentar (eigene Diskussionsseite)','+', document.getElementById('pt-links'));

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

 /* ergänzt purgen */
 if (document.getElementById('ca-history'))
 {
  addPortletLink('p-cactions',getLinkById('ca-history').replace(/action=history/,'action=purge'),'purgen','ca-purge','purgen','p', document.getElementById('ca-history'));
 }

 /* templatetiger - in Anlehung an [[de:MediaWiki:Gadget-toolserver-integration.js]] */
 if (wgNamespaceNumber == 10)
 {
  addPortletLink('p-cactions','//toolserver.org/~kolossos/templatetiger/tt-table4.php?lang=' + wgContentLanguage + '&template=' + encodeURIComponent(wgTitle) + '&offset=0&limit=30' , 'Templatetiger', 'ca-templatetiger');
 }

 /* CatScan */
 if (wgNamespaceNumber == 14)
 {
  addPortletLink('p-cactions','//toolserver.org/~daniel/WikiSense/CategoryIntersect.php?wiki=' + wgServer.replace('(?:https?:)?//', '') + '&basecat=' + encodeURIComponent(wgTitle) , 'CatScan', 'ca-catscan');
 }
 /* fügt den iso-code zu den Interwikis */
 var plang = document.getElementById('p-lang');
 if(plang)
 {
  var li = plang.getElementsByTagName("li");
  for (var i = 0; i < li.length; i++)
  {
   var lang = li[i].className.substring(10);
   //gleichlang machen
   while (lang.length < 3)
   {
    lang += ' ';
   }
   //span für den text und auszeichnung
   var span = document.createElement('span');
   span.appendChild(document.createTextNode(lang+' '));
   span.style.fontFamily="Courier New";
   span.style.fontSize="75%";
   span.style.verticalAlign="middle";
   //an erster Stelle
   li[i].insertBefore(span, li[i].firstChild);
  }
 }
 /* nur dateien */
 if (wgNamespaceNumber == 6)
 {
  /* setzt den software-hinweis bei Dateien sichtbar in den ersten head */
  var dup = document.getElementById("mw-imagepage-section-duplicates");
  var firstHeading = document.getElementById("firstHeading");
  if (dup && firstHeading)
  {
   var span = document.createElement("span");
   span.style.fontSize="50%";
   span.id="hinweis-duplicat-file";
   span.appendChild(document.createTextNode(" (Duplikat)"));
   firstHeading.appendChild(span);
  }
 }

 addSearchSuggestionToForms();

 //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( wgNamespaceNumber >= 0 && 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 = wgScript + '?title=' + wgPageName + '&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 = 'editsection';
   editsectionFirst.id = '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( ']' ) );
   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 == '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 = '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 );
    }
   }
  }
 }
}

function entfernen()
{
 /* eigene Methodik zum entfernen der centralnotice
  * die Standardmäßige führt zu anzeigeproblemen im IE7, wenn man sich ausloggt
  */
 removeCentralNotice( false );
 var centralnotice = document.getElementById( 'centralNotice' );
 if ( centralnotice )
 {
  var a = centralnotice.getElementsByTagName( 'a' );
  for ( var i = 0; i < a.length; i++ )
  {
   if ( (a[i] && a[i].firstChild && a[i].firstChild.data == 'Ausblenden')
     || (a[i] && a[i].firstChild && a[i].firstChild.firstChild && a[i].firstChild.firstChild.data == 'Anzeigen' )
    )
   {
    a[i].onclick = '';
    a[i].href = 'javascript:removeCentralNotice( true )';
    break;
   }
  }
 }
 var contentElement = document.getElementById("bodyContent");
 /* entfernt unnötiges von Spezial:Beiträge */
 if (wgCanonicalSpecialPageName == "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 (wgCanonicalSpecialPageName == "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 (wgCanonicalSpecialPageName == "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 (wgCanonicalSpecialPageName == "Recentchanges"
       || wgCanonicalSpecialPageName == "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( 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;
    }
   }
  }
 }
 //betreffzeile
 var spanLabel = document.getElementById( "wpSummaryLabel" );
 if (spanLabel)
 {
  //bei section=new ist ein geschütztes Leerzeichen welches hier entfernt wird,
  //da das Label an sich ausgelendet wird und es sonst eingerückt aussieht
  spanLabel.parentNode.removeChild(spanLabel.nextSibling);
 }
}

/* 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 */
function toTop()
{
 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 (document.getElementById("toc"))
 {
  var afirst = document.createElement("a");
  afirst.href="#toc";
  afirst.title="Inhaltsverzeichnis";
  afirst.appendChild(document.createTextNode(zeichen));
  var spanfirst = document.createElement("span");
  spanfirst.style.fontSize="90%";
  spanfirst.style.left="-1em";
  spanfirst.style.bottom="20px";
  spanfirst.style.position="absolute";
  spanfirst.appendChild(afirst);
  contentElement.appendChild(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*/
function toFooter()
{
 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 (document.getElementById("toc"))
 {
  var afirst = document.createElement("a");
  afirst.href="#toc";
  afirst.title="Inhaltsverzeichnis";
  afirst.appendChild(document.createTextNode(zeichen));
  var spanfirst = document.createElement("span");
  spanfirst.style.fontSize="90%";
  spanfirst.style.left="-1em";
  spanfirst.style.top="20px";
  spanfirst.style.position="absolute";
  spanfirst.appendChild(afirst);
  contentElement.appendChild(spanfirst);
 }
}

/* erzeugt am Seitenende einen Link zum einfügen eines Neuen Abschnitts */
function appendAddSectionLinkAtEnd()
{
 var address = getLinkById("ca-addsection");
 //prüfe, ob es den Link gibt
 if (address)
 {
  var zeichen = "+";
  var text = "Einen neuen Abschnitt zu dieser Seite hinzufügen";
  var contentElement = document.getElementById("bodyContent");
  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="-50px";
  span.style.bottom="20px";
  span.style.position="absolute";
  span.appendChild(link);
  contentElement.appendChild(span);
 }
}
// Skript von [[Benutzer:✓]], das protokollabsolute Links auf Wikimedia-Projekte in -relative ändert
// https://de.wikipedia.org/w/index.php?title=MediaWiki_Diskussion:Common.js&oldid=94938916#MediaWiki:Common.js.2Frelative.js
    $(function makeProtocolsRelative() {
        // zuverlässig mit beiden Protokollen verhaltensgleich funktionierende Domains
        var reg = new RegExp("^https?\\:\\/\\/(?:" + [
            // (?:download|.*?mobile|.*?m|mail) funktionieren nicht oder unterschiedlich
            "(?!download|(?:[^.]+\\.)?mobile|(?:[^.]+\\.)?m|mail).*?\\.?wik(?:ipedia|tionary|ibooks|iquote|iversity|isource|inews|imediafoundation)",
            // (?:dumps|downloads|stats|noc|ganglia|.*?planet|mail) funktionieren nicht oder unterschiedlich
            // ticket und bugzilla leiten eh nur auf https weiter, donate auf http://wikimediafoundation.org
            // das wäre nur lang und umständlich: "(?:lists|upload|techblog|blog|wikitech|svn|commons|incubator|.+?\\.labs|nyc|species|advisory|ar|bd|br|co|dk|et|fi|il|mk|mx|nl|no|nc|pa\\.us|pl|pt|rs|ru|se|tr|ua|uk|ve|board|boardgovcom|noboard\\.chapters|auditcom|chair|chapcom|checkuser|steward|collab|exec|grants|internal|movementroles|office|searchcom|spcom|otrs-wiki|quality|meta|outreach|volunteer|strategy|usability|survey|wikimania.*?)\\.wikimedia",
            "(?!secure|dumps|downloads|stats|noc|ganglia|(?:[^.]+\\.)?planet|mail|ticket|bugzilla|donate).*?\\.?wikimedia",
            "www\\.mediawiki",
            // wiki.toolserver leitet eh nur auf https weiter
            "toolserver",
        ].join("|") + ")\\.org");
        mw.util.$content.find("a").each( function(index, link) {
            var href = link.getAttribute('href');
            if (!href || href.substring(0, 4) != "http") {
                return;
            }
            if (href.search(reg) == 0) {
                link.setAttribute('href', href.substr(href.substr(4,1)=="s" ? 6 : 5));
                return;
            }
            var parts = href.match(/^https\:\/\/secure\.wikimedia\.org\/(.+?)\/(.+?)\/(.*)/);
            if (!parts || parts.length<3) {
                return;
            }
            var projekt = parts[1],
                version = parts[2];
            if (projekt != "wikipedia") {
                if (projekt.substring(0, 6) == "skins-") // funktioniert eh nicht mehr, die "Korrektur" aber ist tödlich
                    return;
                href = "//"+version+"."+projekt+".org";
            } else {
                switch (version) {
                    case "foundation": href = "//wikimediafoundation.org"; break;
                    case "sources":    href = "//wikisource.org"; break;
                    case "mediawiki":  href = "//www.mediawiki.org"; break;
                    case "species":
                    case "meta":
                    case "commons":
                    case "incubator":  projekt = "wikimedia"; //no break
                    default: href = "//"+version+"."+projekt+".org";
                }
            }
            link.setAttribute('href', href+"/"+parts[3]);
        });
    });

/* liest das Cookie für die Loginzeit aus */
function getLogInTime()
{
 var cookieName = 'logintime=';
 var cookiePos = document.cookie.indexOf( cookieName );
 if (cookiePos > -1)
 {
  cookiePos = cookiePos + cookieName.length;
  var endPos = document.cookie.indexOf(";", cookiePos);
  if (endPos > -1)
  {
   return document.cookie.substring(cookiePos, endPos);
  }
  else
  {
   return document.cookie.substring(cookiePos);
  }
 }
 return null;
}
/* helperfunction für das verbergen von CentralNotice, da es bei IE nach dem Abmelden eine graue Box gibt */
function removeCentralNotice( setCookie )
{
 //eigenes Cookie setzen
 if ( setCookie )
 {
  var e = new Date();
  e.setTime( e.getTime() + (7*24*60*60*1000) ); // one week
  var work = 'hidecentralnotice=true; expires=' + e.toGMTString() + '; path=/';
  document.cookie = work;
 }
 if ( document.cookie.indexOf( 'hidecentralnotice=true' ) != -1 )
 {
  var centralNotice = document.getElementById( 'centralNotice' );
  if( centralNotice ) {
   centralNotice.parentNode.removeChild( centralNotice );
  }
 }
}

/**
 * add search suggestion to other fields than the Searchbox in the sidebar
 */
function addSearchSuggestionToForms() {
 if( wgCanonicalSpecialPageName == 'Export' ) {
  //the form is missing a name
  var catname = document.getElementById( 'catname' );
  catname.parentNode.name = 'catname';
  addSearchSuggestionToForm( 'catname', 14 );
 }

}
function addSearchSuggestionToForm( name, namespace ) {
 //Fake a hidden checkbox for the namespace, like Special:Search
 var namespaceBox = document.createElement('input');
 namespaceBox.type = 'hidden';
 namespaceBox.value = '1';
 namespaceBox.name = 'ns' + namespace;

 //add the field to the form
 document.forms[name].appendChild( namespaceBox );

 os_autoload_inputs = [ name ];
 os_autoload_forms = [ name ];
 //call the init with the new form
 os_MWSuggestInit();
}
//</nowiki> __NOINDEX__