Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/WPST.js
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
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/// 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