Benutzer:PDD/helperFunctions.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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
 // helperFunctions.js:
 // enthält obligatorische Hilfsfunktionen für [[Benutzer:PDD/monobook.js]]
 
 // <nowiki>
 
 if (typeof(rcalertbox) == 'undefined')
       var rcalertbox = true;
 if (typeof(drawquickbar) == 'undefined')
       var drawquickbar = true;
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // 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)) jQuery(document).ready(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);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // initQuickbar()
 // positioniert den Quickbar
 
 function initQuickbar() {
   // Variables that could be defined in your monobook
   if (typeof(keeplogo) == 'undefined')
       keeplogo = false;
   if (typeof(releasequickbar) == 'undefined')
       releasequickbar = false;
 
   var quickbarpos = "fixed";
   // IE6- kann kein position:fixed und hat demzufolge Pech
   if ( navigator.userAgent.indexOf("MSIE") > -1 )
      quickbarpos = "absolute";
   // IE7 und als MSIE maskiertes Opera 8/9: können position:fixed
   if (( navigator.userAgent.indexOf("MSIE 7") > -1 ) || ( navigator.userAgent.indexOf("Opera") > -1 ))
      quickbarpos = "fixed";
 
   var quickbar = document.getElementById("p-quickbar");
   var plogo = document.getElementById("p-logo");
   if (!keeplogo && plogo) {
      // logo ausblenden (revvar)
      plogo.style.visibility = "hidden";
      // padding in column-one (platz für quickbar)
      var column = document.getElementById("column-one") || document.getElementById("mw-panel");
      if (column && quickbar)
         column.style.paddingTop = (10 + quickbar.clientHeight) + "px";
   }
 
   if (!releasequickbar && quickbar) {
      quickbar.style.position = quickbarpos;
   }
 }
 if (drawquickbar) jQuery(document).ready(initQuickbar);
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // doReload()
 // setzt nach Reload die Reload-Selection wieder
 
 function doReload() {
   if (UrlParameters[reloadme] == "1") {
      document.getElementById('reloadme').checked=true;
      setReload();
   }
 }
 if (!isEdit) jQuery(document).ready(doReload);
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // extendWpReason()
 // hebt 255-Zeichen-Textfeldbegrenzung auf
 
 function extendWpReason() {
   var loeschgrund;
   if (loeschgrund = document.getElementById('wpReason')) {
      loeschgrund.setAttribute('maxLength',512);
   }
 }
 if ( mw.config.get('wgAction') == "delete" ) jQuery(document).ready(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?
   }
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // checkAllDeletedVersions()
 // alle Checkboxen auswählen, für Versionenwiederherstellung ([[Spezial:Wiederherstellen]])
 // Idee: Poupou
 // Autoren: BLueFiSH.as, Schwalbe (ursprünglich als "TaggAll()")
 // Neue Version ohne JS-Errors: PDD
 
 function checkAllDeletedVersions() {
   var inputobject = document.getElementsByTagName("input");
   for (var i=3; i<inputobject.length; i++)
      inputobject[i].checked = true;
 }
 
 function revAllDeletedVersions() {
   var inputobject = document.getElementsByTagName("input");
   for (var i=3; i<inputobject.length; i++)
      inputobject[i].checked = !inputobject[i].checked;
 }
 
 // obsolete Version davon!!
 function TaggAll() {
   checkAllDeletedVersions();
 }
 
 /*
  * Stringlänge überprüfen für Zusammenfassungszeile
  */
 
 function EditCommentLength(str) {
   return (199-str.length);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // undate()
 // von [[Benutzer:D]]
 // entlinkt verlinkte Daten
 
 function undate() {
   var tbvalue = document.editform.wpTextbox1.value;
   tbvalue = tbvalue.replace(/\[\[\s*(\d+(er)?( v. Chr.)?)\s*\]\]/g, "$1");
   tbvalue = tbvalue.replace(/\[\[\s*(\d+\. (Jahrhundert|Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))\s*\]\]/g, "$1");
   document.editform.wpTextbox1.value = tbvalue;
   document.editform.wpDiff.click();
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // fixDash()
 // speziell für BKLs: alle Striche zu endash vereinheitlichen
 // ursprünglich von [[Benutzer:PDD]]
 // 9.1.2014: neue Version von [[Benutzer:TMg]]
 
 function fixDashes(s) {
            // Leerzeichen vor Geburts- und Sterbejahre
    return s.replace(/([*†])([12]\d{3}\b)/g, "$1 $2")
            // Bis-Striche in Jahreszahlenbereiche ohne Ende, z.B. 1991-?
            .replace(/([\s!'(>|„][12]\d{3}) *[–—−-] *\?/g, "$1–?")
            // Bis-Striche in 4-stellige Jahreszahlenbereiche, z.B. 1991-1992
            .replace(/([\s!'(>|„]([12]\d{3})) *[–—−-] *(([12]\d{3})[!,.:;?]?[\s!')<|“])/g,
                     function($0, $1, $2, $3, $4) {
                         return $2 < $4 ? $1 + "–" + $3 : $0;
                     });
 }
 
 function fixDash() {
    // find editor
    var form    = document.forms['editform'];
    if (!form)  return;
    var tb      = form.elements['wpTextbox1'];
    if (!tb)    return;
    tb.value    = tb.value;
 
    tb.value = fixDashes(tb.value);
 
    document.editform.wpDiff.click();
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // 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);
 }

 //
 // Funktion nowcomm()
 // Trägt NowCommons-Baustein ein
 // (aufgerufen aus der monobook.js)
 //
 
 function nowcomm() {
  var lemmaneu = prompt('Dateiname auf Commons:', mw.config.get( 'wgTitle' ));
  if (lemmaneu != null )
      newtext('NowCommons','\{\{NowCommons|' + lemmaneu +'}}',3);
 }
 
 //
 // Helper-Funktion getLemma()
 // (aufgerufen von eintragen() aus der eintragen.js )
 //
 
 function getLemma () {
   var lemma;
   lemma = mw.config.get( '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( 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>