Jump to content

User:Tinz/monobook.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Tinz (talk | contribs) at 20:38, 5 October 2009. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
 // by de: User:PDD
 // Originalskript ursprünglich gefunden bei [[:en:User:Angela]]
 // bearbeitet von [[Benutzer:Maximus Rex]]
 // bearbeitet von [[Benutzer:SirJective]]
 // bearbeitet von [[Benutzer:BLueFiSH.as]]
 // bearbeitet von [[Benutzer:Littl]] (2005-09-07)
 // bearbeitet von [[Benutzer:Schwalbe]] (2006-02-03)
 // bearbeitet wieder von [[Benutzer:Littl]] (2006-02-21)
 // bearbeitet von [[Benutzer:PDD]] (ab 2006-04-22)

 // *************** SETUP Teil 2 **********************************
 // Parameter für diese monobook.js (Quickbar, Module etc.)

 var zeigeversion = false;        // monobook-Version anzeigen?
 var zeigehilfe = true;          // kurze Hilfetexte beim überfahren mit der Maus anzeigen?
 var qbnewpage = true;           // sollen Seiten aus dem QuickBar im neuen Fenster aufgerufen werden?
 var rclimit = 50;              // angezeigte Anzahl auf "Letzte Änderungen"
 var nplimit = 50;              // angezeigte Anzahl auf "Neue Artikel"
 var nulimit = 100;             // angezeigte Anzahl auf "Neuanmeldungs-Logbuch"
 var nvlimit = 50;              // angezeigte Anzahl auf "Alte, gesichtete Seiten"
 var usedropdown = false;        // Wenn keine Dropdowns gewünscht sind, hier false eintragen!
 var timeout = 500000;            // 50 Sekunden auf das Neuladen der Seite warten
 var timezoneshift = 0;          // Unterschied lokale Zeit zur Systemzeit (bleibt für Mitteleuropäer 0)
 var debugme = false;            // Debug-Modus?
 var qbfontsize = 100;            // Schriftgröße im QuickBar (relativ in Prozent)

 // systemweite Default-Optionen aus [[MediaWiki:Monobook.js]]
 NavigationBarShowDefault = 0;     // Navi-Leisten: alle einklappen == 0; alle ausklappen == 15 (z.B.)
 var oldEditsectionLinks = false;  // "Bearbeiten"-Links bei Abschnitten ganz nach rechts?
 var enable_linkFA = true;         // "Featured Articles" in fremdsprachigen Wikipedias markieren?

 // <nowiki>
 // Modul: changeBeschriftungen.js
 var beschriftungen = true;      // kosmetische Änderungen an der MediaWiki-Oberfläche?
 var markhandsoff = true;        // fremde Benutzerseiten grafisch markieren?
 // Beschriftungen: personal toolbar
 var cbmytalk = "Meine Diskussion";
 var cbprefs = "Einstellungen";
 var cbwatchlist = "Beobachtungsliste";
 var cbmyconts = "Meine Beiträge";
 var cblogout = "X";
 // Beschriftungen: current article
 var cbedit = "Bearbeiten";
 var cbhistory = "Versionen";
 var cbmove = "Verschieben";
 var cbwatch = "Beobachten";
 var cbunwatch = "Ignorieren";
 // Beschriftungen: tools
 var cbwhatlinkshere = "Links a. d. Seite";
 var cblinked = "Verlinkte Änderungen";
 var cbmail = "E-Mail senden";
 var cbupload = "Datei hochladen";
 var cbprint = "Druckversion";
 var cbblock = "User sperren";
 // Beschriftungen: portlets
 var cblang = "Interwiki";

 // Modul: addEditAndRevertLinks.js
 var editlinkoldversion = true;  // Bearbeiten-Link für ältere Versionen anzeigen?
 var editlinktxt = "edit";       // Text des Edit-Links
 var revertwithreason = true;    // Revert-Link mit Grund-Eingabe anzeigen?
 var revlinktxt = "rv";         // Text des Revert-Links
 var revlinkshowuser = true;     // beim Revertieren über (Rev)-Link letzten Benutzer angeben?
 var rvisminor = true;           // sind Reverts mit "(rev)"-Link Minor-Changes?
 var aearldefault = "reason: no improvement";      // Defaultgrund beim Revertieren
 var aerhistory = true;                       // Links auch in der Versionsgeschichte?
 var aearlhere = true;                        // Revertaktion im selben Browserfenster?
 // **************** SETUP Ende ***********************************

 // (PDD: note to self: version auch in alert-Funktion ändern!)
 var version  = '0.99a';

 var user  = wgUserName;         // username wird automatisch übernommen

 // aktuelle Zeit ermitteln
 var jetzt = new Date();
 // recalculate 4 furriners
 var jetztfixed = jetzt.getTime();
 jetztfixed += (timezoneshift * 3600 * 1000);
 jetzt.setTime(jetztfixed);
 // fill date variables
 var Monate = new Array("", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
 var Monatekurz = new Array("", "Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez");
 var Jahr = jetzt.getYear();
 if (Jahr < 999)  Jahr += 1900;
 var Monat = jetzt.getMonth() + 1;
 var Tag = jetzt.getDate();
 // fill WP date variables
 var WPDatum = Tag + '._' + Monate[Monat] + '_' + Jahr;
 var WPDatum2 = Jahr + '/' + Monate[Monat] + '/' + Tag;
 var WPDatum3 = Monate[Monat] + ' ' + Jahr;
 var WPDatum4 = Jahr + '-' + LeadingZero(Monat);
 var WPDatum5 = Jahr + LeadingZero(Monat) + '/';
 var refDatum = Tag + '. ' + Monatekurz[Monat] + '. ' + Jahr;
 var refDatumlang = Tag + '. ' + Monate[Monat] + ' ' + Jahr;

 // Lemma-Varianten (work in progress) + redundant zu addLogsLink etc.
 // get page title
 var pagetitle = wgPageName;
 var spagetitle = wgTitle;
 // do real spaces; fix for lemmas with '&'
 var ptitle = pagetitle.replace(/_/g, " ").split('&').join('%26');
 var sptitle = spagetitle.replace(/_/g, " ").split('&').join('%26');
 // do + escaped (" " to "+")
 var pesctitle = spaceEscape(ptitle);
 var spesctitle = spaceEscape(sptitle);
 // lemmatitle for external lookup
 var spesctitlelookup = spesctitle.split('+(')[0];
 // Komma-Lemma für Personen (Klammerzusätze weg etc.)
 var personlemma = spagetitle.split(' (')[0];
 var titlesplit = personlemma.split(' ');
 if (titlesplit.length > 1) {
    personlemma = titlesplit[titlesplit.length-1] + ',';
    for (i=0; i<(titlesplit.length-1); i++)
        personlemma=personlemma + " "+titlesplit[i];
 }

 // 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]);
  }
 }

 // page type variables: namespaces
 var isArticle       = (wgNamespaceNumber == 0);
 var isArticleTalk   = (wgNamespaceNumber == 1);
 var isBild          = (wgCanonicalNamespace == "Image");
 var isDatei         = (wgCanonicalNamespace == "File");
 var isCategory      = (wgCanonicalNamespace == "Category");
 var isTemplate      = (wgCanonicalNamespace == "Template");
 var isGeneric       = false;
 if ((!isBild) && (!isDatei) && (!isCategory) && (!isTemplate))
     isGeneric  = true;
 var isProject       = (wgCanonicalNamespace == "Project"); /* NR Wikipedia: */
 var isHelp          = (wgCanonicalNamespace == "Help");    /* NR Hilfe */

 // page type variables: namespace == -1
 var isSpecial  = (wgCanonicalNamespace == "Special");
 var isRestore = (isSpecial && (wgCanonicalSpecialPageName == "Undelete"));
 var isContrib = (isSpecial && (wgCanonicalSpecialPageName == "Contributions"));
 var isDelContrib = (isSpecial && (wgCanonicalSpecialPageName == "DeletedContributions"));
 var isWatchlist = (isSpecial && (wgCanonicalSpecialPageName == "Watchlist"));

 // page type variables: namespace == -1
 var isTalk = (!isSpecial && isOdd(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');

 // individual page specials
 var isLKpage = false;
 if ((isProject) && (wgTitle.indexOf('Löschkandidaten') != -1))
     isLKpage = true;

 // userpage/name stuff, vor allem für IPs
 var userPageOwner = "";
 if (isContrib || isDelContrib)  {
   if (UrlParameters['target']) userPageOwner = UrlParameters['target'].split('+').join('_');
   else {
        userPageOwner = decodeURIComponent(location.href.substring(location.href.indexOf("/wiki/") + 6)).split('#')[0];
        userPageOwner = userPageOwner.substring(userPageOwner.indexOf("Beiträge/") + 9);
   }
 }

 // page type variables: user & user discussion lumped together
 var isUserpage = ( (wgCanonicalNamespace == "User") || (wgCanonicalNamespace == "User_talk") );
 var isUserMainpage = false;
 if (isUserpage)
    if (wgTitle == wgTitle.split("/")[0]) {
        isUserMainpage = true;
        userPageOwner = wgTitle;
    }

 // handelt es sich um eine IP?
 var isIPUser = false;
 if (userPageOwner != "")
    if (userPageOwner.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) != null)
       if ((userPageOwner.split(".")[0] > 1) && (userPageOwner.split(".")[0] < 255))
          isIPUser = true;

 // Admin & editor functions
 var adminflag = false;
 if (hasRight("sysop")) adminflag = true;

 var editorflag = false;
 if (hasRight("editor")) editorflag = true;

 // 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;
 }

 //
 // 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 dodropdown (aktion) {
  var zutun = aktion.split('|');
  var was = Number(zutun[0]);
  var wie = zutun[1];

  switch (was) {
   case 1 : window.open (wie); break;
   case 2 : _doopt (Number(wie)); break;
   case 3 : _doopt (Number(wie)); break;
   case 4 : _doopt (Number(wie)); break;
  } //switch
 } //dodropdown

 function newdropdown (oname) {
   closedropdown();
   xxx = xxx+'<select size=1 onchange="dodropdown(this.value);" style="width:135px;font-size:9px;">';
   if (oname > '') { xxx = xxx+'<option>'+oname+'</option>'; }
   indropdown = true;
   ind=2;
 }

 function closedropdown () {
  if (indropdown) xxx=xxx+'</select>';
  indropdown = false;
 }

 function newtext (subj,text,wo)
  {  //wo=1 : Text austauschen
     //wo=2 : Text am Ende anhängen
     //wo=3 : Text vorne Einfügen

   if (subj > "") {
      if (document.editform.wpSummary.value > "") document.editform.wpSummary.value += ", ";
      document.editform.wpSummary.value = document.editform.wpSummary.value + subj;
   }

   switch (wo) {
       case 1 : document.editform.wpTextbox1.value=text+'\n'; break;
       case 2 : document.editform.wpTextbox1.value=document.editform.wpTextbox1.value+'\n'+text;break;
       case 3 : document.editform.wpTextbox1.value=text+'\n'+document.editform.wpTextbox1.value;break;
   }
   document.editform.wpTextbox1.focus();
  }

 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))
 }

 // From PDD helperFuncions
 // helperFunctions.js:
 // enthält obligatorische Hilfsfunktionen für [[Benutzer:PDD/monobook.js]]
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // URI-Parameter für fillActionPage(), benutzt in eintragen.js, hinweise.js
 // außerdem in addEditAndRevertLinks.js (nur subjp, minorp, speichernp)
 // nur in [[Benutzer:Euku/markErledigt.js]] : subjaddp (plus add)
 
 var subjp      = "subj";       // Subject
 var subjaddp   = "subjadd";    // Subject zum Ranhängen
 var textp      = "txt";        // Für Text-Austausch
 var insp       = "ins";        // Vor dem Text einfügen
 var addp       = "add";        // an Text anhängen
 var minorp     = "minor";      // (k)leine Änderung
 var nocreatep  = "nocreate";   // beim Eintragen keine neue Seite generieren
 // für autosave:
 var asuserp    = "asuser";     // usertoken
 var astimep    = "astime";     // timestamptoken
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // URI-Parameter für setReload() und doReload()
 var reloadme   = "neuladen";   // merker für reload
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // absenden()
 // aufgerufen aus fillActionPage() und hinweis() in hinweise.js
 
 function absenden() {
   if (!debugme)
     document.editform.wpSave.click();
   else
     alert ('Speichern');
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // fillActionPage()  (früher aktion(), ganz früher loeschkandidat() )
 // von Littl, ergänzt von Revvar
 //
 // Entnimmt Parameter aus der URI, fügt sie in die Textfelder ein und klickt ggf. auf "Speichern"
 // (die aufgerufene Seite ist dabei immer im Editmodus)
 
 function fillActionPage() {
   // wenn Bausteineinfügung am Anfang:
   // nur einfügen, wenn Seite noch nicht gelöscht
   var pagedeleted = false;
   if (document.getElementById("newarticletext"))
       pagedeleted = true;
 
   // nur einfügen, wenn noch nicht eingetragen
   // der URI-Aktionsparameter ist immer entweder insp oder textp oder addp, daher else
   var doubleinsert = false;
   if (UrlParameters[textp] > "") 
       doubleinsert = findDoubleEntry(UrlParameters[textp], document.editform.wpTextbox1.value);
   else if (UrlParameters[insp] > "") 
       doubleinsert = findDoubleEntry(UrlParameters[insp], document.editform.wpTextbox1.value);
   else if (UrlParameters[addp] > "") 
       doubleinsert = findDoubleEntry(UrlParameters[addp], document.editform.wpTextbox1.value);
 
   // Textfeld ausfüllen
   if (UrlParameters[textp] > "") {
      if (doubleinsert)
         document.editform.wpTextbox1.value = UrlParameters[textp] + document.editform.wpTextbox1.value;
      else
         document.editform.wpTextbox1.value = UrlParameters[textp];
   }
   else if (UrlParameters[insp] > "")
      document.editform.wpTextbox1.value = UrlParameters[insp] + document.editform.wpTextbox1.value;
   else if (UrlParameters[addp] > "")
      document.editform.wpTextbox1.value = document.editform.wpTextbox1.value + UrlParameters[addp];
 
   // weitere Felder ausfüllen
   if (UrlParameters[subjp] > "")
      document.editform.wpSummary.value = UrlParameters[subjp];
   if (UrlParameters[subjaddp] > "")
      document.editform.wpSummary.value += UrlParameters[subjaddp];
   if (UrlParameters[minorp] == "1")
      document.editform.wpMinoredit.checked=true;
 
   // wenn Textbaustein doppelt: Warnung
   if (doubleinsert)
      do_rc_alert("Artikel enthält den gewählten Baustein bereits!");
   // wenn Seite schon gelöscht: Warnung
   else if (pagedeleted && (UrlParameters[nocreatep] == "1"))
      do_rc_alert("Artikel wurde bereits gelöscht!");
   // wenn autosave eingeschaltet: Seite speichern
   else if (validate_asuser (UrlParameters[asuserp])) {
      if (validate_astime (UrlParameters[astimep]))
          absenden();
      else alert("Token zur automatischen Speicherung ist abgelaufen.");
   }
 }
 if ((isEdit) && (!isSpecial)) addOnloadHook(fillActionPage);
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // findDoubleEntry()
 // aufgerufen aus fillActionPage()
 
 function findDoubleEntry(baustein, artikeltext) {
   var doublette = false;
 
   // wenn keine Vorlage enthalten: Abbruch
   if (baustein == baustein.split("{{")[0]) return (doublette);
 
   var chkbaustein = baustein.split("{{")[1].split("}}")[0].split("|")[0];
   chkbaustein = "{{" + chkbaustein ;
 
   if (navigator.userAgent.indexOf("Opera") == -1) {
      // checking
            // Zeilen wie die nächste generieren Fehler mit Opera, daher diesen Bereich auskommentiert
            // Fehler: RegExp.prototype.compile: syntax error in pattern or string
            // mit Firefox2 und IE7 geht das problemlos, hmm
      if (artikeltext.search(chkbaustein) != -1)
          doublette = true;
      // Kleinschreibung & SLA & substs
      if (chkbaustein == "{{Löschen") {
          if (artikeltext.search("{{löschen") != -1)
              doublette = true;
          if (artikeltext.search("{{SLA") != -1)
              doublette = true;
      }
      if (chkbaustein == "{{subst:Löschantrag") {
          if (artikeltext.search("{{Löschantragstext") != -1)
              doublette = true;
      }
      if (chkbaustein == "{{subst:Qualitätssicherung") {
          if (artikeltext.search("{{QS-Antrag") != -1)
              doublette = true;
      }
   } // end of Opera hack
   return (doublette);
 }
  
 ////////////////////////////////////////////////////////////////////////////////////////
 // doReload()
 // setzt nach Reload die Reload-Selection wieder
 
 function doReload() {
   if (UrlParameters[reloadme] == "1") {
      document.getElementById('reloadme').checked=true;
      setReload();
   }
 }
 if (!isEdit) addOnloadHook(doReload);
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // extendWpReason()
 // hebt 255-Zeichen-Textfeldbegrenzung auf
 
 function extendWpReason() {
   var loeschgrund;
   if (loeschgrund = document.getElementById('wpReason')) {
      loeschgrund.setAttribute('maxLength',512);
   }
 }
 if (wgAction == "delete") addOnloadHook(extendWpReason);
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // setReload()
 // aufgerufen, wenn im Quickbar die Reload-Selection gesetzt wird
 
 var timeoutaktiv;
 function setReload() {
   if (document.getElementById('reloadme').checked && (UrlParameters[reloadme] != "1")) {
       var uri = (document.URL.indexOf('?') >0) ? ('&' + reloadme + '=1') : ('?' + reloadme + '=1');
       timeoutaktiv = window.setTimeout(location.href=location.href+uri, timeout);
   }
   else if (document.getElementById('reloadme').checked	&& (UrlParameters[reloadme] == "1")) {
       timeoutaktiv=window.setTimeout("location.reload()", timeout);
   }
   else {
       window.clearTimeout(timeoutaktiv); // bizarr, timeoutaktiv ist hier gar nicht belegt?
   }
 }
 
 /*
  * Stringlänge überprüfen für Zusammenfassungszeile
  */
 
 function EditCommentLength(str) {
   return (199-str.length);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // insertAfter()
 // neuen Node nach einem referenceNode einfügen
 
 function insertAfter(parent, node, referenceNode) {
   parent.insertBefore(node, referenceNode.nextSibling);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // trim()
 // Leerzeichen am Anfang und Ende entfernen
 
 function trim(str) {
   return str.replace(/^\s*|\s*$/g,"");
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // do_rc_alert()

 function do_rc_alert(str) {
   if (rcalertbox) alert(str);
 }

 //
 // Helper-Funktion getLemma()
 // (aufgerufen von eintragen() aus der eintragen.js )
 //
 
 function getLemma () {
   var lemma;
   lemma = wgPageName;
   return lemma;
 }
 
 //
 // Helper-Funktion extractLemma()
 // hack: nur noch für contribs
 // (aufgerufen von eintragen() aus der eintragen.js )
 //
 
 function extractLemma () { //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;
 }


 // token functions
 function generate_asuser () {
   return encodeURIComponent(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;
 }



 // Krimskrams
 function isEven(myNumber) {
    return (myNumber % 2 == 0);
 }
 function isOdd(myNumber) {
    return (! isEven(myNumber));
 }
 function LeadingZero(x) {
    return (x >= 10 || x < 0 ? "" : "0") + x;
 }
 // Funktion: importPage()
 // zum Einbinden der Module
 function importPage(seite, lang) { // all languages support
    name='User:'; // international name, works in all wikipedias
    if(!lang) lang = wgContentLanguage;

    // new version
    seite = 'http://' + lang + '.wikipedia.org' + wgScriptPath + '/index.php?title=' + name + seite +
           '&action=raw&ctype=text/javascript&smaxage=0';

    var head = document.getElementsByTagName('head').item(0);
    var js = document.createElement('script');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', seite);
    js.setAttribute('charset', 'utf-8');
    head.appendChild(js);

    return false;
    // old version
    // document.write('<SCRIPT TYPE="text/javascript" SRC="http://' + lang
    // + '.wikipedia.org/w/index.php?title=' + name + seite
    // + '&action=raw&ctype=text/javascript&smaxage=0"><\/SCRIPT>');
 }

 /*
  * 3xImport von [[Benutzer:Revvar]]
  * aus [[Benutzer:Revvar/wikibits.js]] und [[Benutzer:Revvar/monobook.js]]
  */

 /**
 Imports a user javascript page from any wikipedia project into the actual document.

 @version 0.1
 @date 2007/03/22
 @author: based on function importPage from [[de:User:PDD]]s monobook.js, extended by [[de:User:Revvar]]
 @param page Name of the user page without the "user:" prefix and the ".js" appendix
 @param lang (optional) Language code of the corresponding wikipedia project. Default is the callers project.
 @return "true" on success, "false" otherwise
 */

 function importJavascriptL(page, lang)
 {
    try {
        /* check the parameters and set defaults */
        if(!page) throw("importJavascriptL: Missing parameter page.");
        if(!lang) lang = wgContentLanguage;

        /* create import url */
        var import_url = 'http://' + lang + '.wikipedia.org' + wgScriptPath + '/index.php?title=User:' + page +
           '.js&action=raw&ctype=text/javascript&smaxage=0';

        /* 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;
    }
 }

 /**
 Imports a user css page from any wikipedia project into the actual document.

 @version 0.1.1
 @date 2007/03/26
 @author: based on function importPage from [[de:User:PDD]]s monobook.js, rewritten by [[de:User:Revvar]]
 @param page Name of the user page without the "user:" prefix and the ".css" appendix
 @param lang (optional) Language code of the corresponding wikipedia project. Default is the callers project.
 @return "true" on success, "false" otherwise
 */

 function importCSSL(page, lang)
 {
    try {
        /* check the parameters and set defaults */
        if(!page) throw("importCSSL: Missing parameter page.");
        if(!lang) lang = wgContentLanguage;

        /* create import url */
        var import_url = 'http://' + lang + '.wikipedia.org' + wgScriptPath + '/index.php?title=User:' + page +
           '.css&action=raw&ctype=text/css&smaxage=0';

        /* import page */
        var Head = document.getElementsByTagName('head').item(0);
        var CSS = document.createElement('style');
        CSS.setAttribute('type', 'text/css');
        CSS.setAttribute('charset', 'utf-8');
        CSS.appendChild(document.createTextNode("@import url(" + import_url + ");"));
        Head.appendChild(CSS);

        return true;
    } catch(e) {
        alert(e.message);
        return false;
    }
 }

 /**
 Asynchron import of a Javascript file from the toolserver.

 @version 0.1
 @date 2007/04/24
 @author based on function importPage from [[de:User:PDD]]s monobook.js, rewritten by [[de:User:Revvar]]
 @param path Path to the toolserver script without the ".js" appendix
 */

 function import_JS_from_TS(path)
 {
    try {
        /* check the parameter */
        if(!path) throw("import_JS_from_TS: Missing parameter path.");

        /* create import url */
        var import_url = 'http://toolserver.org/' + path + '.js';

        /* import */
        setTimeout(function(e) {
          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);
        }, 1000);

    } catch(e) {
        alert(e.message);
        return;
    }
 }


 // ***** FOOT-Block *****
 // </nowiki> <- nicht löschen!!!

 // ausgelagerte obligatorische Funktionen
 //importJavascriptL('PDD/supportFuncs','de'); // [[Benutzer:PDD/supportFuncs.js]]
 //importJavascriptL('PDD/helperFunctions','de'); // [[Benutzer:PDD/helperFunctions.js]]

 // Revert addEditAndRevertLinks
 if (!(!aerhistory && isHistory) && !isEdit) {
    if (editlinkoldversion || revertwithreason)
       importJavascriptL('Tinz/addEditAndRevertLinks','en'); // [[:de:Benutzer:PDD/addEditAndRevertLinks.js]]
 }
 // Und hier ist die monobook.js zu Ende.