Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/WPST.js

aus Wikipedia, der freien Enzyklopädie

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
/// PerfektesChaos/js/WikiSyntaxTextMod/WPST.js
/// 2015-02-12 PerfektesChaos@de.wikipedia
/// [[w:de:User:PerfektesChaos/js/WikisyntaxTextMod/WPST.js]]
/// Fingerprint: #0#395438D8#
/// <syntaxhighlight lang="javascript"><nowiki>
/*global window:false, mw:false, jQuery:false, 
         Modif_Text:false, Modif_Wikilink:false, Modif_URL:false       */


if (typeof(mw.libs.WikiSyntaxTextMod) !== "object") {
   mw.libs.WikiSyntaxTextMod  =  { };
}


mw.libs.WikiSyntaxTextMod.WPST  =  {
   users:  [ "AleXXw",
             "Daniel749",
             "Gast32",
             "Labant",
             "Thomas021071",
             "PerfektesChaos" ],
   pageid: 6637471,   // WPST/WikisyntaxTextMod/defs
   shit:   "WPST, automatisierte Ersetzungen; FEHLER:\n"
};



if (typeof(mw.libs.WikiSyntaxTextMod.config) !== "object") {
   mw.libs.WikiSyntaxTextMod.config  =  { mod:  { } };
}
if (typeof(mw.libs.WikiSyntaxTextMod.config.mod) !== "object") {
   mw.libs.WikiSyntaxTextMod.config.mod  =  { };
}
if (typeof(mw.libs.WikiSyntaxTextMod.config.mod.wikilink) !== "object") {
   mw.libs.WikiSyntaxTextMod.config.mod.wikilink  =  false;
}
if (typeof(mw.libs.WikiSyntaxTextMod.config.mod.url) !== "object") {
   mw.libs.WikiSyntaxTextMod.config.mod.url  =  false;
}
if (typeof(mw.libs.WikiSyntaxTextMod.config.mod.plain) !== "object") {
   mw.libs.WikiSyntaxTextMod.config.mod.plain  =  false;
}



mw.libs.WikiSyntaxTextMod.WPST.failed  =  function () {
   // API fehlgeschlagen
   // 2011-12-15 PerfektesChaos@de.wikipedia
   "use strict";
   window.alert( mw.libs.WikiSyntaxTextMod.WPST.shit
                 + "API schlug fehl" );
};   // .WPST.failed()



mw.libs.WikiSyntaxTextMod.WPST.filter  =  function (apply) {
   // Überprüfen des JS-Code für WPST auf unzulässige Anweisungen
   // Precondition:
   //    apply  -- JS-Code mit Text- und Link-Ersetzungsdefinitionen
   // Postcondition:
   //    Returns Array(2)   [0]  string with suspicious code, or false
   //                       [1]  plain JS code, or false
   // Uses:
   //    .WPST.free()
   // 2011-12-22 PerfektesChaos@de.wikipedia
   "use strict";
   var r  =  this.free(apply),
       s  =  "\n" + r + "\n",
       m  =  "(?:[ \n]*(?:false|\"[^\"\n]+\"))",
       t  =  "[ \n]*\\[(?:" + m + ",)+" + m + "[ \n]*\\]",
       o  =  "\nmw\\.libs\\.WikiSyntaxTextMod\\.WPST\\.mod";
   s  =  s.replace(/\\\\/g,                       ".");   //  \\
   s  =  s.replace(/\\["n]/g,                     ".");   //  " \n
   s  =  s.replace(new RegExp(t, "g"),            "#");   //  [,,]
   m  =  "(?:[ \n]*#)";
   t  =  "\\[(?:" + m + ",)*" + m + "[ \n]*\\]";
   s  =  s.replace(new RegExp(t, "g"),            "_");   //  [#,#,#]
   m  =  "(?:[ \n]*_)";
   t  =  "\\[(?:" + m + ",)*" + m + "[ \n]*\\]";
   s  =  s.replace(new RegExp(t, "g"),            "%");   //  [_,_,_]
   t  =  o + "Text[ \n]*=[ \n]*_[ \n]*;";
   s  =  s.replace(new RegExp(t, ""),             "");    //  mod=_;
   t  =  o + "Wikilink[ \n]*=[ \n]*%[ \n]*;";
   s  =  s.replace(new RegExp(t, ""),             "");    //  mod=%;
   t  =  o + "URL[ \n]*=[ \n]*%[ \n]*;";
   s  =  s.replace(new RegExp(t, ""),             "");    //  mod=%;
   s  =  s.replace(/[ \n]+/g,                     "");    //  \s
   if ( s.length ) {
      r  =  [ s, false ];
   } else {
      r  =  [ false, r ];
   }
   return r;
};   // .WPST.filter()



mw.libs.WikiSyntaxTextMod.WPST.follow  =  function (arrived) {
   // Verarbeiten des Resultats der API
   // Precondition:
   //    arrived  -- API result
   // Uses:
   //    .WPST.foreigner()
   //    .WPST.filter()
   // 2013-05-18 PerfektesChaos@de.wikipedia
   "use strict";
   var config  =  mw.libs.WikiSyntaxTextMod.config;
   var WPST    =  mw.libs.WikiSyntaxTextMod.WPST;
   var got     =  arrived.query;
   var scream  =  false;
   var script  =  false;
   var signed  =  false;
   if ( got ) {
      got  =  got.pages[ WPST.pageid ];
      if (got) {
         if (typeof(got) === "object") {
            got  =  got.revisions[ "0" ];
            if ( got ) {
               script  =  got[ "*" ];
               signed  =  got.user;
            }
         } else {
            got  =  false;
         }
      }
   }
   if ( ! got ) {
      scream  =  "Antwort von API unverständlich";
   }
   if ( ! scream ) {
      scream  =  WPST.foreigner(signed);
   }
   if ( ! scream ) {
      got     =  WPST.filter(script);
      scream  =  got[0];
      script  =  got[1];
      if ( scream ) {
         scream  =  "Unzulässige JavaScript-Anweisung:\n" + scream;
      }
   }
   if ( ! scream ) {
      eval(script);
      if (typeof(WPST.modText) === "object") {
         if (jQuery.isArray(WPST.modText)) {
            if (jQuery.isArray(config.mod.plain)) {
               config.mod.plain  =  config.mod.plain.concat(WPST.modText);
            } else {
               config.mod.plain  =  WPST.modText;
            }
         }
      }
      if (typeof(WPST.modWikilink) === "object") {
         if (jQuery.isArray(WPST.modWikilink)) {
            if (jQuery.isArray(config.mod.wikilink)) {
               config.mod.wikilink  =  config.mod.wikilink.concat(WPST.modWikilink);
            } else {
               config.mod.wikilink  =  WPST.modWikilink;
            }
         }
      }
      if (typeof(WPST.modURL) === "object") {
         if (jQuery.isArray(WPST.modURL)) {
            if (jQuery.isArray(config.mod.url)) {
               config.mod.url  =  config.mod.url.concat(WPST.modURL);
            } else {
               config.mod.url  =  WPST.modURL;
            }
         }
      }
      if (typeof(Modif_Text) === "object") {
         if (jQuery.isArray(Modif_Text)) {
            if (jQuery.isArray(config.mod.plain)) {
               config.mod.plain  =  config.mod.plain.concat(Modif_Text);
            } else {
               config.mod.plain  =  Modif_Text;
            }
         }
      }
      if (typeof(Modif_Wikilink) === "object") {
         if (jQuery.isArray(Modif_Wikilink)) {
            if (jQuery.isArray(config.mod.wikilink)) {
               config.mod.wikilink  =  config.mod.wikilink.concat(Modif_Wikilink);
            } else {
               config.mod.wikilink  =  Modif_Wikilink;
            }
         }
      }
      if (typeof(Modif_URL) === "object") {
         if (jQuery.isArray(Modif_URL)) {
            if (jQuery.isArray(config.mod.url)) {
               config.mod.url  =  config.mod.url.concat(Modif_URL);
            } else {
               config.mod.url  =  Modif_URL;
            }
         }
      }
      config.lenient  =  true;
   }
   if ( scream ) {
      window.alert( WPST.shit + scream );
   } else {
      mw.loader.load("//en.wikipedia.org/w/index.php?title="
                     + "User:PerfektesChaos/js/WikiSyntaxTextMod/r.js"
                     + "&action=raw&ctype=text/javascript"
                     + "&maxage=604800",
                     "text/javascript");
      if (mw.config.get("wgUserName") === "Thomas021071") {
         window.alert("Hallo, Thomas; dein Skript mag dich.");
      }
   }
};   // .WPST.follow()



mw.libs.WikiSyntaxTextMod.WPST.foreigner  =  function (account) {
   // Check user name against list of permitted users
   // Precondition:
   //    account  -- last user touching page
   // Postcondition:
   //    Returns string with complaint, or false
   // 2011-12-16 PerfektesChaos@de.wikipedia
   "use strict";
   var r  =  "Veränderung durch unbekannten Benutzer: " + account;
   if (typeof(account) === "string") {
      var ul  =  mw.libs.WikiSyntaxTextMod.WPST.users;
      var n   =  ul.length;
      for (var i = 0;  i < n;  i++) {
         if (ul[i] === account) {
            r  =  false;
            break;   // for i
         }
      }   // for i
   }
   return r;
};   // .WPST.foreigner()



mw.libs.WikiSyntaxTextMod.WPST.free  =  function ( apply ) {
   // Standardize JavaScript code encoding and remove comments
   // Precondition:
   //    apply  -- string with JS code
   //              No other CC (<32) than 9, 10, 13
   // Postcondition:
   //    Returns string with JS code
   //       * DOS eol converted to UX
   //       * TABs changed into SPC
   //       * Any comment removed
   //       * Trailing whitespace removed
   //       * Terminated without newline
   // Requires: JavaScript 1.3  String.charCodeAt
   // 2011-12-17 PerfektesChaos@de.wikipedia
   "use strict";
   var s  =  apply.replace( /\r\n/g, "\n" ).replace( /\t/g, " " )
             +  "\n",
       n  =  s.length,
       q  =  0,
       c,
       i,
       j;
   for ( i = 0;  i < n;  i++ ) {
      c  =  s.charCodeAt( i );
      if ( c === 92 ) {   // '\'
         // skip any char, even NEWLINE
         i++;
      } else if ( c === q ) {   // delimiter pending
         q  =  0;
      } else if ( c === 10 ) {
         /*
         if ( q ) {
            // message: "ERROR, unterminated literal"
         }
         */
         q  =  0;
      } else if ( ! q ) {
         switch ( c ) {
            case  47 :   //  '/'
               j  =  s.charCodeAt( i + 1 );
               if ( j === 47 ) {   //  '/'
                  j  =  s.indexOf( "\n",  i + 2 );
                  if ( j < 0 ) {
                     // BTW: impossible
                     s  =  s.substr( 0, i );
                     n  =  i;
                  } else {
                     s  =  s.substr( 0, i )  +  s.substr( j );
                     n  =  n - j + i;
                  }
                  break;   // switch c
               } else if ( j === 42 ) {   //  '*'
                  j  =  s.indexOf( "*/",  i + 2 );
                  if ( j < 0 ) {
                     // message: "ERROR, unterminated comment"
                     s  =  s.substr( 0, i ) + "\n";
                     n  =  i;
                  } else {
                     s  =  s.substr( 0, i )  +  s.substr( j + 2 );
                     n  =  n - j + i;
                  }
                  break;   // switch c
               }
               // fall through
            case  34 :   //  '"'
            case  39 :   //  '''
               q  =  c;
               break;
         }   // switch c
      }
   }   // for i
   s  =  s.replace( / +\n/g, "\n" );
   n  =  s.length - 1;
   while ( n > 1 ) {
      if ( s.charCodeAt( n - 1 )  ===  10 ) {
         n--;
      } else {
         break;   // while
      }
   }   // while
   return  s.substring( 0, n );
};   // .WPST.free()



// API nach WPST/WikisyntaxTextMod/defs fragen
jQuery.getJSON( mw.util.wikiScript("api"),
                { action:  "query",
                  prop:    "revisions",
                  rvprop:  "content|user",
                  rvlimit: 1,
                  format:  "json",
                  pageids:  mw.libs.WikiSyntaxTextMod.WPST.pageid },
                mw.libs.WikiSyntaxTextMod.WPST.follow,
                mw.libs.WikiSyntaxTextMod.WPST.failed );



// EOF </nowiki></syntaxhighlight>  WikiSyntaxTextMod/WPST.js