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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
 // get URL parameters (used for page type variables)
 var UrlParameters = new Array ();
 readparams();
 
 function readparams() {
  var asReadInUrlParameters;
  var asReadInUrlParameter;
 
  // Get URL parameters
  asReadInUrlParameters = location.search.substring(1, location.search.length).split("&");
  for (i = 0; i < asReadInUrlParameters.length; i++) {
    asReadInUrlParameter = asReadInUrlParameters[i].split("=");
    UrlParameters[decodeURIComponent(asReadInUrlParameter[0])] = decodeURIComponent(asReadInUrlParameter[1]);
  }
 }
 
 // token functions
 function generate_asuser () {
   return encodeURIComponent(mw.config.get('wgUserName'));
 }
 
 function validate_asuser (asuser) {
   var retval = false;
   if (encodeURIComponent(asuser) == generate_asuser() )
      retval = true;

   return retval;
 }

 function generate_astime () {
   var arbitrary_datestamp = Date.UTC(2008,10,1,0,0,0,0); // 1.11.2008
   var current_date = new Date();
   var current_timestamp = current_date.getTime();

   return ( Math.floor((current_timestamp - arbitrary_datestamp) / 1000) );
 }

 function validate_astime (astime) {
   var retval = false;
   var timediff = generate_astime() - astime;

   if ((timediff >= 0) && (timediff < 45))
      retval = true;

   return retval;
 }
 
 // <nowiki>
 
 // Funktionen im Quickbar (monobook.js)
 var usedropdown = false;        // Wenn keine Dropdowns gewünscht sind, hier false eintragen!
 var qbnewpage = false;           // sollen Seiten aus dem QuickBar im neuen Fenster aufgerufen werden?
 var timeout = 50000;            // 50 Sekunden auf das Neuladen der Seite warten
 var zeigeversion = false;        // monobook-Version anzeigen?
 var zeigehilfe = true;          // kurze Hilfetexte beim überfahren mit der Maus anzeigen ? default true
 var debugme = false;            // Debug-Modus?
 var autosave = true;            // automatisches Speichern von QS/LA/SLA/Vandal-Einträgen?
 var asuserp    = "asuser";     // usertoken
 var astimep    = "astime";     // timestamptoken
 var usersignature = '\~\~\~\~';         //Standardsignatur
 
 // Modul: admin.js
 
 var showadminbar = true;             // Adminbar standardmäßig anzeigen?
 
 // Wer nicht mit den Standardknöpfen zufrieden sein sollte, lese sich bitte das Tutorial auf [[Benutzer_Diskussion:DerHexer/admin.js]] durch.
 
 var delreason = true;             // Löschgründe ergänzen?
 var deletereasons = "Unsinn.|D(U); Test.|D(T); Kein Artikel.|D(KA); Unnötiger Redirect.|D(UR); Falsches Lemma.|D(FL); Irrelevant.|D(I); Falschschreiberedirect.|D(FSR); Flame.|D(Fl); Aua.|D(Au); Veraltete IP-Diskussionsseite.|D(VIPD); Wunsch des Benutzers.|D(WdB); Werbung.|D(Werb); Wiedergänger.|D(Wieder); Fake.|D(Fake); Verwaiste Diskussionsseite.|D(VDs); Ansprache über [[:Kategorie:Wikipedia:BLU-User]] ohne Erfolg.|D(BLU); Urheberrechtsverletzung.|D(URV); SLA.|D(SLA); Bandspam.|D(Band); nuke|nuke; prompt|prompt";
 
 var blockreason = true;             // Blockgründe ergänzen?
 var blockreasons = "Vandalismus|1|B(V+1); Vandalismus|2|B(V+2); Vandalismus|7|B(V+7); Einstellen unsinniger Artikel|1|B(EuA+1); Einstellen unsinniger Artikel|2|B(EuA+2); Einstellen unsinniger Artikel|7|B(EuA+7); Vandalismusaccount|infinite|B(Va+i); Ungeeigneter Name|infinite|B(Name+i); prompt|prompt|prompt";
 
 var protectreason = true;             // Schutzgründe ergänzen?
 var protectreasons = "IP-Vandalismus|1 day|1|P(IP-V+1d); IP-Vandalismus|1 week|1|P(IP-V+1w); IP-Vandalismus|3 months|1|P(IP-V+3m); IP-Vandalismus|infinite|1|P(IP-V+i); Editwar|infinite|2|P(EW+i); \{\{Gesperrter Benutzer\}\}|infinite|2|P(GB+i); Schutz aufgehoben|infinite|0|P(!Schutz+i); Abstimmung beendet.|infinite|2|P(!AK+i); prompt|prompt|1|prompt1; prompt|prompt|2|prompt2";

 var deletecreateprotectreason = true;             // Löschen-Erstellen-Schützen ergänzen?
 var deletecreateprotectreasons = "gesperrte IP betreibt weiter Unfug|2 hours|1|.|0|GIP+2h; gesperrte IP betreibt weiter Unfug|6 hours|1|.|0|GIP+6h; gesperrte IP betreibt weiter Unfug|1 day|1|.|0|GIP+1d; gesperrte IP betreibt weiter Unfug|3 days|1|.|0|GIP+3d; gesperrte IP betreibt weiter Unfug|1 week|1|.|0|GIP+1w; gesperrte IP betreibt weiter Unfug|infinit|1|.|0|GIP+i; gesperrter Benutzer betreibt weiter Unfug|infinite|2|\{\{Gesperrter Benutzer\}\}|0|GB+i; Gesperrter Benutzer|infinite|2|\%23REDIRECT \[\[Benutzer Diskussion\:"+mw.config.get('wgTitle')+"]]|0|Redir+i; Gesperrter Benutzer|infinite|2|\%23REDIRECT \[\[Benutzer Diskussion\:"+mw.config.get('wgTitle')+"]]|1|Redir2+i";
 
 var blockedtext = "Zwei Stunden.";             // Standardtext für die VM
 
 var allowlogblock = true;           // Schnellsperre aus dem Neuanmeldungslogbuch gestatten
 var allowfastrename = true;           // Schnellumbenennen aus dem Neuanmeldungslogbuch gestatten
 var warningafterdeletion = true;    // Ansprache nach Schnelllöschung
 
 // Modul: rollback.js
 var newrollback = true;             // Erweiterten Rollback aktivieren
 var allowmessage = true;            // Rollback mit Ansprache und VM-Meldung bzw. Block aktivieren? Dafür bitte PopUps für de.wikipedia.org aktivieren.
 var autowarning = true;             // Wenn die ergänzte Vorlage automatisch gespeichert werden soll, ändere false auf true.
 var leveltwowarning = false;        // Wenn du zwei Warnungen vor einer VM oder Sperre setzen möchtest, gib true ein, um einen Standardkommentar zu ergänzen. Ansonsten ersetze false/true durch eine zweite Vorlage inklusive Unterschrift.
 var optionnames = false; // Hier bitte alle Bezeichnungen der Rollbacks angeben, so man mit den Standards nicht zufrieden ist
 var templatenames = false; // Hier bitte die zu verwendenden Vorlagen angeben. Genausoviele wie darüber, dies ist eine 1:1-Zuordnung!
 var fastblock = true;     // Sperrt automatisch den gewählten Benutzer
 
 // Auf '1' setzen, um mehrere, unter optionnames und templatenames selbstdefinierte Links hinter dem normalen Zurücksetzen zu ergänzen; auf '2', wenn die oben definierten Links in einem Dropdownmenü erscheinen sollen; auf '3', wenn man keine Ansprache, aber ein Zusammenfassungskürzel wie beim (rev) haben möchte; auf '4', wenn man automatisch sperren möchte
 var rollbacktype = '3'; 
  
 // **************** SETUP Ende ***********************************
 
 var user  = mw.config.get('wgUserName'); // username wird automatisch übernommen
 
  // page type variables: namespaces
 var isArticle       = (mw.config.get('wgNamespaceNumber') == 0);
 var isArticleTalk   = (mw.config.get('wgNamespaceNumber') == 1);
 var isBild          = (mw.config.get('wgCanonicalNamespace') == "File");
 var isCategory      = (mw.config.get('wgCanonicalNamespace') == "Category");
 var isTemplate      = (mw.config.get('wgCanonicalNamespace') == "Template");
 var isGeneric       = false;
 if ((!isBild) && (!isCategory) && (!isTemplate))
     isGeneric  = true;
 var isProject       = (mw.config.get('wgCanonicalNamespace') == "Project");
 
 // page type variables: namespace == -1
 var isSpecial  = (mw.config.get('wgCanonicalNamespace') == "Special");
 var isRestore = (isSpecial && (mw.config.get('wgCanonicalSpecialPageName') == "Undelete"));
 var isContrib = (isSpecial && (mw.config.get('wgCanonicalSpecialPageName') == "Contributions"));
 var isWatchlist = (isSpecial && (mw.config.get('wgCanonicalSpecialPageName') == "Watchlist"));
 
 // page type variables: namespace == -1
 var isTalk = (!isSpecial && isOdd(mw.config.get('wgNamespaceNumber')));
 
 // page type variables: other stuff
 var isPHP     = (document.URL.indexOf('index.php') > 0);
 var isDiff    = UrlParameters["diff"];
 var isEdit    = ((UrlParameters['action']=='edit') || (UrlParameters['action']=='submit'));
 var isHistory = (UrlParameters['action']=='history');
 
 // Admin functions
 var adminflag = false;
 if (isAdmin()) adminflag = true;
 
  /*
  * ab hier wird der Quickbar (der Kasten oben links) zusammengebaut
  *
  * zuerst die allgemeinen Variablen (hier bitte nix ändern!)
  */
 
 var Quickbar = '<div class="pBody noprint" id="p-quickbar" style="position:absolute; top:5px; left:0px; width:14.1em; z-index:10;">';
 var showquickbar = true;
 var showcompletebar = true;
 var showcompletebar2;
 var showadminbar2;
 var showquickbar2;
 var xxx      = '';
 
 var trenner='<hr />';
 var br     ='<br />';
 
 var qbtarget = '_self';
 if (qbnewpage) qbtarget = '_blank';
 
 var dropdown = usedropdown;
 var scrpt    = '';
 var scrptn   = 0;
 var indropdown;
 var ind;
 
 /*
  * Quickbar-Zusammenbau, Teil 1:
  *
  * zuerst die Reihenfolge der einzelnen Abschnitte:
  */
 
 function buildQuickbar() {
    addition = new Date(); 
    addition = new Date(addition.getTime() +1000*60*60*24*365);
    if (document.cookie) {
      var cookies = document.cookie;
      cookies = cookies.split(';');
      for (i=0; i<cookies.length; i++) {
        var cookienames = cookies[i].split('=')[0];
        var cookievalues = cookies[i].split('=')[1];
        if (cookienames.search('showcompletebar') != -1) {
          if (cookievalues.search('block') != -1) {
            showcompletebar2 = "block";
          } else {
            showcompletebar2 = "none";
          }
          document.cookie = 'showcompletebar=' + showcompletebar2 + '; path=/; expires=' + addition.toGMTString + ';';
        } else if (cookienames.search('showquickbar') != -1) {
          if (cookievalues.search('block') != -1) {
            showquickbar2 = "block";
          } else {
            showquickbar2 = "none";
          }
          document.cookie = 'showquickbar=' + showquickbar2 + '; path=/; expires=' + addition.toGMTString + ';';
        } else if (cookienames.search('showadminbar') != -1) {
          if (cookievalues.search('block') != -1) {
            showadminbar2 = "block";
          } else {
            showadminbar2 = "none";
          }
          document.cookie = 'showadminbar=' + showadminbar2 + '; path=/; expires=' + addition.toGMTString + ';';
        } else {
          if (showcompletebar) {
            showcompletebar2 = 'block';
          } else {
            showcompletebar2 = 'none';
          }
          if (showquickbar) {
            showquickbar2 = 'block';
          } else {
            showquickbar2 = 'none';
          }
          if (showadminbar) {
            showadminbar2 = 'block';
          } else {
            showadminbar2 = 'none';
          }
          document.cookie = 'showcompletebar=' + showcompletebar2 + '; path=/; expires=' + addition + ';';
          document.cookie = 'showquickbar=' + showquickbar2 + '; path=/; expires=' + addition + ';';
          document.cookie = 'showadminbar=' + showadminbar2 + '; path=/; expires=' + addition + ';';
        }
      }
    }
    // der folgende Abschnitt wird nur bei Admins eingeblendet
    qbAdminTools();
 }
 
 
 /*
  * Quickbar-Zusammenbau, Teil 2:
  *
  * die Belegung der einzelnen Abschnitte
  */
 
  function qbAdminTools() {
    if (!adminflag) return;
    
    if (showadminbar == false) {
      w (0,'<hr />','','');
      w (4,"switchbars('adminbar');switchbars('quickbar');","Adminbar an-/ausschalten","","Adminbar an-/ausschalten");
    }
    if (mw.config.get('wgUserName') == 'DerHexer') {
      w (0,'<div id="adminbar" style="display:' + showadminbar2 + '"><hr />','Adminbar','');
      if (delreason) {
        w (0,'<center>Löschen</center>','Löschen','');
        decodeadminreasons(deletereasons);
      }
      if (blockreason) {
        w (0,'<center>Sperren</center>','Sperren','');
        decodeadminreasons(blockreasons);
      }
      if (protectreason) {
        w (0,'<center>Schützen</center>','Schützen','');
        decodeadminreasons(protectreasons);
      }
      if (deletecreateprotectreason) {
        w (0,'<center>DCP</center>','DCP','');
        decodedcpreasons(deletecreateprotectreasons);
      }
    }
    w (0,'</div></div>','','');
  }
 
  // Browserkram
 var userbrowser = "Standard";
 if (navigator.userAgent.indexOf("Opera") > -1)
     userbrowser = "Opera";
 if (navigator.userAgent.indexOf("Safari") > -1)
     userbrowser = "Standard";
 if (navigator.userAgent.indexOf("MSIE") > -1) {
     userbrowser = "IE";
     if (navigator.userAgent.indexOf("MSIE 7") > -1)
         userbrowser = "IE7";
 }

 // force Browserswitches
 if ((userbrowser === "IE") || (userbrowser === "IE7")) {
     godmodelight = false;
     showredundantlinks = false;
 }
 if (userbrowser === "Opera") {
     godmodelight = false;
 }
 
  /*
  * hier wird der Quickbar in die Seite geschrieben
  * (ab hier bitte nichts ändern)
  */
 
 buildQuickbar();
 
 if (typeof version == 'undefined') var version = "?";
 if (!isEdit || zeigeversion || isPHP) {
  Quickbar +=
      '<table width="100%"><tr><td align="left" width="15%"><a href="#" onclick="switchbars(\'completebar\');" title="Komplette Quickbar an/aus">an/aus</a></td><td align="right" valign="top">' +
 
    (zeigeversion ?
      ('<a href="#" onclick="amIuptodate()" title="Versionscheck">' + (adminflag ? 'A/' : '') + version + '</a>&nbsp;&nbsp;')
         : '') +
 
    (!isEdit ?
      ('<input type="checkbox" id="reloadme" name="reloadme" onchange="setReload()" title="Seite alle ' + (timeout/1000) + ' s neu laden?"></input>&nbsp;&nbsp;')
         : '&nbsp;') +
 
      '<a href="' + mw.config.get( 'wgScript' ) + '?title=Special%3APrefixindex&prefix=' + user +
          '&namespace=2" target="' + qbtarget + '" title="Meine Seiten im Benutzernamensraum">' +
          'MyPages' +
      '</a>' +
 
    (userbrowser != "Standard" ?
      ('&nbsp;&nbsp;<a href="#" onclick="badBrowser()" title="Browser nicht unterstützt">'
              + userbrowser.charAt(0) + userbrowser.charAt(1) + '!</a>')
         : '') + 
 
      '</td></tr></table><div id="completebar" style="display:' + showcompletebar2 + '">';
 }                
 Quickbar += '<div style="font-size:100%;">' + xxx + '</div></div>';
 
 if (scrpt > '') {
    Quickbar += '<script> function _doopt (was) { switch (was) {' + scrpt + '}}<\/script>';
    scrpt='';
 }
 
 $( 'body' ).append( Quickbar );
 
 //
 // ab hier functions
 //
 
 function w (was,lurl,linktext,targt,title) {
  if (!title) title=linktext;	
  if (!zeigehilfe) title='';  
  if (!dropdown) {
   switch (was) {
    case 0 : xxx=xxx+lurl;break;
    case 1 : xxx=xxx+'<a href="'+lurl+'" target="'+targt+'" title="'+title+'">'+linktext+'</a>&nbsp; ';break;
    case 2 : xxx=xxx+'<a href="#" onclick="newtext('+ lurl +')" title="'+title+'">'+linktext+'</a>&nbsp; ';break;  	
    case 3 : xxx=xxx+'<a href="#" onclick="insertTagsWrapper('+ lurl +')" title="'+title+'">'+linktext+'</a>&nbsp; ';break;  	   
    case 4 : xxx=xxx+'<a href="#" onclick="'+ lurl +'" title="'+title+'">'+linktext+'</a>&nbsp; ';break;  	   
   }	 	    
  } //if
  else //todo: Hilfe bei Dropdowns. Benutzt die überhaupt jemand????
  {
   var ltext='__________'.substr(1,ind)+linktext;
   switch (was) {
    case 0 : if (lurl==br) {xxx=xxx+'<option>'+linktext+'</option>';ind=2;} 
             else
             if (lurl==trenner) newdropdown(linktext);
             break;             
    case 1 : xxx=xxx+'<option value="1|'+lurl+'">'+ltext+'</option>';break;
    case 2 : xxx=xxx+'<option value="2|'+scrptn+'">'+ltext+'</option>';
             scrpt=scrpt+'case '+scrptn+':newtext('+lurl+');break;';scrptn++;break;    
    case 3 : xxx=xxx+'<option value="3|'+scrptn+'">'+ltext+'</option>';    
             scrpt=scrpt+'case '+scrptn+':insertTagsWrapper('+lurl+');break;';scrptn++;break;                     
    case 4 : xxx=xxx+'<option value="4|'+scrptn+'">'+ltext+'</option>';
             scrpt=scrpt+'case '+scrptn+':'+lurl+';break;';scrptn++;break;    
   } //switch	  	
  } //else	
 } //w
 
 function isEven(myNumber) {
    return (myNumber % 2 == 0);
 }
 function isOdd(myNumber) {
    return (! isEven(myNumber));
 }
 
 function insertTagsWrapper(tagOpen, tagClose, sampleText, subj) {
   if (subj > "") {
      if (document.editform.wpSummary.value > "") document.editform.wpSummary.value += ", ";
      document.editform.wpSummary.value = document.editform.wpSummary.value + subj;
   }
   insertTags(untagEscape(tagOpen), untagEscape(tagClose), untagEscape(sampleText))
 }
 
 function untagEscape(text)
 {
   text = text.replace(/%27/g, "'");
   text = text.replace(/%22/g, "\"");
   return(text);
 }
 
  function isAdmin() {
   var specialrights = false;
   if (typeof mw.config.get('wgUserGroups') != 'object') return(specialrights);
   if (typeof mw.config.get('wgUserGroups')[0] != 'string') return(specialrights); 
   for (i=0;i<mw.config.get('wgUserGroups').length;i++) {
       if (mw.config.get('wgUserGroups')[i] == "sysop") specialrights = true;
   }
   return(specialrights); 
 }
 
 function importJavascriptL(page, lang)
 {
    try {
        /* check the parameters and set defaults */
        if(!page) throw("importJavascriptL: Missing parameter page.");
        if(!lang) lang = mw.config.get('wgContentLanguage');
 
        /* create import url */
        var import_url = '//' + lang + '.wikipedia.org' + mw.config.get('wgScriptPath') + '/index.php?title=User:' + page +
           '.js&action=raw&ctype=text/javascript&smaxage=2678400&dontcountme=s';
 
        /* import page */
        var Head = document.getElementsByTagName('head').item(0);
        var Script = document.createElement('script');
        Script.setAttribute('type', 'text/javascript');
        Script.setAttribute('src', import_url);
        Script.setAttribute('charset', 'utf-8');
        Head.appendChild(Script);
 
        return true;
    } catch(e) {
        alert(e.message);
        return false;
    }
 }
 
 function decodeadminreasons(adminreasons) { // DerHexer
   var adminreason = adminreasons.split('; ');
   for (i=0; i < adminreason.length; i++) {
     var adminreasoncount = adminreason[i].split("|");
     switch(adminreasoncount.length) {
       case 1 : w (4,"deleting('" + adminreasoncount[0] + "');","" + adminreasoncount[0] + ""); break;
       case 2 : w (4,"deleting('" + adminreasoncount[0] + "');","" + adminreasoncount[1] + ""); break;
       case 3 : w (4,"blocking('" + adminreasoncount[0] + "', '" + adminreasoncount[1] + "');","" + adminreasoncount[2] + ""); break;
       case 4 : w (4,"protecting('" + adminreasoncount[0] + "', '" + adminreasoncount[1] + "', '" + adminreasoncount[2] + "');","" + adminreasoncount[3] + ""); break;
       case 5 : w (4,"protecting('" + adminreasoncount[0] + "', '" + adminreasoncount[1] + "', '" + adminreasoncount[2] + "', '" + adminreasoncount[3] + "');","" + adminreasoncount[4] + ""); break;
     }
   }
 }
 
 function decodedcpreasons(adminreasons) { // DerHexer
   var adminreason = adminreasons.split('; ');
   for (i=0; i < adminreason.length; i++) {
     var adminreasoncount = adminreason[i].split("|");
     w (4,"dcp('" + adminreasoncount[0] + "', '" + adminreasoncount[1] + "', '" + adminreasoncount[2] + "', '" + adminreasoncount[3] + "', '" + adminreasoncount[4] + "');","" + adminreasoncount[5] + "");
   }
 }
 
 function switchbars(ids)
 {
   addition = new Date(); 
   addition = new Date(addition.getTime() +1000*60*60*24*365);
   var element = document.getElementById(ids);
   if(element.style.display == "none")
   {
     element.style.display = "block";
     document.cookie = 'show' + ids + '=block; path=/; expires=' + addition + ';';
   }
   else
   {
     element.style.display = "none";
     document.cookie = 'show' + ids + '=none; path=/; expires=' + addition + ';';
   }
 }

 
 function getLemma () { //Littl
   var lemma;
   if ((isContrib) && ( UrlParameters["target"] > "" ))
     lemma = UrlParameters["target"];
   else if ( UrlParameters["title"] > "" )
     lemma = UrlParameters["title"];
   else {
     lemma = decodeURIComponent(location.href.substring(location.href.indexOf("/wiki/") + 6)).split('#')[0];
     // fix linky links (?redirect=no)
     //lemma = lemma.split['\x3F'][0];
     if (lemma.indexOf("redirect=no")!=-1)
         lemma=lemma.substring(0,lemma.indexOf("redirect=no")-1);
   }
   // if (lemma.substring(0, 5) == "Bild:") lemma=lemma.slice(5);
   // if (lemma.substring(0, 10) == "Kategorie:") lemma=lemma.slice(10);
   if (isPHP) lemma=lemma.split('+').join('_');
   return lemma;
 }
 
 // ***** FOOT-Block *****
 
 if (adminflag && (delreason || blockreason || protectreason || deletecreateprotectreason) && mw.config.get('wgUserName') == 'DerHexer') 
    importJavascriptL('DerHexer/testadmin','de'); // [[Benutzer:DerHexer/admin.js]]
 
 // Schnellsperre aus dem Logbuch ergänzen
 if (allowlogblock)
    importJavascriptL('DerHexer/logblock','de'); // [[Benutzer:DerHexer/logblock.js]]
 
 // Erweiterten Rollback ergänzen
 if (newrollback)
    importJavascriptL('DerHexer/testrollback','de'); // [[Benutzer:DerHexer/rollback.js]]
 mw.loader.load('//de.wikipedia.org/w/index.php?title=Benutzer:DerHexer/test.js&action=raw&ctype=text/javascript');