Zum Inhalt springen

„Benutzer:Schnark/js/antispoof.js“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Inhalt gelöscht Inhalt hinzugefügt
NBSP auf Spezialseiten raus, kombinierende nur grau und ungezählt, sind eignentlich alle in Ordnung
Entferne Legacy-Code, benötigt nun MW 1.17 / Markierung wird nun asynchron durchgeführt, vielleicht verbessert das die Performance
Zeile 2: Zeile 2:


var antispoof = {
var antispoof = {
version: 1.0,
rot: '#FF8080',
rot: '#FF8080',
grau: '#C0C0C0',
grau: '#C0C0C0',

count: 0, //Anzahl der verdächtigen Stellen


unsichtbar: '\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F\u00AD\u2000-\u2008\u200A-\u200D\u200F\u2028-\u202F\u205F-\u206F', //unsichtbare Zeichen außer TAB (kommt in Versionsunterschieden vor), LF, CR, SPACE, NBSP, THINSPACE, LRM (nur für Spezialseiten)
unsichtbar: '\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F\u00AD\u2000-\u2008\u200A-\u200D\u200F\u2028-\u202F\u205F-\u206F', //unsichtbare Zeichen außer TAB (kommt in Versionsunterschieden vor), LF, CR, SPACE, NBSP, THINSPACE, LRM (nur für Spezialseiten)
Zeile 35: Zeile 38:
init: function() {
init: function() {
with (antispoof) {
with (antispoof) {
if (wgNamespaceNumber != -1) { //!RL!
if (mw.config.get('wgNamespaceNumber') != -1) {
unsichtbar += '\u200E';
unsichtbar += '\u200E';
benennen += '\u00A0'; }
benennen += '\u00A0'; }
if (wgNamespaceNumber == 0) unerwuenscht += '\u2014'; //!RL!
if (mw.config.get('wgNamespaceNumber') == 0) unerwuenscht += '\u2014';
regexp_unsichtbar = new RegExp ('()((?:^|.)[' + unsichtbar + '](?:.|$))', 'g');
regexp_unsichtbar = new RegExp ('()((?:^|.)[' + unsichtbar + '](?:.|$))', 'g');
regexp_privat = new RegExp ('()([' + privat + ']+)', 'g');
regexp_privat = new RegExp ('()([' + privat + ']+)', 'g');
Zeile 53: Zeile 56:
regexp_zwj_ok = new RegExp ('[' + zwj_ok + '][\u200C\u200D][' + zwj_ok + ']');
regexp_zwj_ok = new RegExp ('[' + zwj_ok + '][\u200C\u200D][' + zwj_ok + ']');


$j(mark); //!RL!
$(mark);
}
}
},
},


mark: function() {
mark: function() {
var count = 0;
antispoof.count = 0;
var todo = [
count += highlight.highlight(antispoof.regexp_unsichtbar, function (x) {
//regexp, hint, color, count
if (x.indexOf('\u00AD') != -1) return 'An dieser Stelle steht ein weiches Trennzeichen!';
[antispoof.regexp_unsichtbar,
if (x.indexOf('\u200B') != -1) return 'An dieser Stelle steht ein nullbreites Leerzeichen!';
function (x) {
if (x.indexOf('\u200C') != -1) return 'An dieser Stelle steht ein nullbreiter Nichtverbinder!';
if (x.indexOf('\u200D') != -1) return 'An dieser Stelle steht ein nullbreiter Verbinder!';
if (x.indexOf('\u00AD') != -1) return 'An dieser Stelle steht ein weiches Trennzeichen!';
if (x.indexOf('\u200E') != -1) return 'An dieser Stelle steht ein Links-nach-rechts-Zeichen!';
if (x.indexOf('\u200B') != -1) return 'An dieser Stelle steht ein nullbreites Leerzeichen!';
if (x.indexOf('\u200F') != -1) return 'An dieser Stelle steht ein Rechts-nach-links-Zeichen!';
if (x.indexOf('\u200C') != -1) return 'An dieser Stelle steht ein nullbreiter Nichtverbinder!';
if (x.indexOf('\u200D') != -1) return 'An dieser Stelle steht ein nullbreiter Verbinder!';
return 'Dieses unsichtbare Zeichen ist kein normales Leerzeichen!';
if (x.indexOf('\u200E') != -1) return 'An dieser Stelle steht ein Links-nach-rechts-Zeichen!';
}, function (x) {
if (x.indexOf('\u200F') != -1) return 'An dieser Stelle steht ein Rechts-nach-links-Zeichen!';
if (x.match(antispoof.regexp_rtl1)) return antispoof.grau;
return 'Dieses unsichtbare Zeichen ist kein normales Leerzeichen!';},
if (x.match(antispoof.regexp_rtl2)) return antispoof.grau;
function (x) {
if (x.match(antispoof.regexp_zwj_ok)) return antispoof.grau;
return antispoof.rot;
if (x.match(antispoof.regexp_rtl1)) return antispoof.grau;
if (x.match(antispoof.regexp_rtl2)) return antispoof.grau;
}, 'antispoof-mark');
if (x.match(antispoof.regexp_zwj_ok)) return antispoof.grau;
count += highlight.highlight(antispoof.regexp_privat, 'Dieses Zeichen gehört Unicode-Block "Privater Gebrauch" und hat daher in einem Text normalerweise nichts verloren!', antispoof.rot, 'antispoof-mark');
return antispoof.rot;},
count += highlight.highlight(antispoof.regexp_unerwuenscht, function (x) {
true],
if (x.indexOf('\u2010') != -1) return 'Dies ist ein Unicode-Bindestrich!';
[antispoof.regexp_privat,
if (x.indexOf('\u2011') != -1) return 'Dies ist ein nicht-umbrechender Bindestrich!';
'Dieses Zeichen gehört Unicode-Block "Privater Gebrauch" und hat daher in einem Text normalerweise nichts verloren!',
if (x.indexOf('\u2012') != -1) return 'Dies ist ein ziffernbreiter Bindestrich!';
antispoof.rot,
if (x.indexOf('\u2014') != -1) return 'Dies ist ein Geviertstrich!';
true],
if (x.indexOf('\u2015') != -1) return 'Dies ist ein horizontaler Strich!';
[antispoof.regexp_unerwuenscht,
if (x.indexOf('\u2043') != -1) return 'Dies ist ein Aufzählungsstrich!';
function (x) {
return 'Dieses Zeichen ist normalerweise in Texten nicht erwünscht!';
if (x.indexOf('\u2010') != -1) return 'Dies ist ein Unicode-Bindestrich!';
}, antispoof.rot, 'antispoof-mark');
if (x.indexOf('\u2011') != -1) return 'Dies ist ein nicht-umbrechender Bindestrich!';
highlight.highlight(antispoof.regexp_kombinierend, 'Dieses Zeichen ist aus zwei Zeichen zusammengesetzt, einem Akzent und einem Buchstaben!', antispoof.grau, 'antispoof-mark');
if (x.indexOf('\u2012') != -1) return 'Dies ist ein ziffernbreiter Bindestrich!';
count += highlight.highlight(antispoof.regexp_griechisch, 'Dieses Zeichen ist ein griechischer Buchstabe, anders als das vorhergehende!', antispoof.rot, 'antispoof-mark');
if (x.indexOf('\u2014') != -1) return 'Dies ist ein Geviertstrich!';
count += highlight.highlight(antispoof.regexp_kyrillisch, 'Dieses Zeichen ist ein kyrillischer Buchstabe, anders als das vorhergehende!', antispoof.rot, 'antispoof-mark');
if (x.indexOf('\u2015') != -1) return 'Dies ist ein horizontaler Strich!';
count += highlight.highlight(antispoof.regexp_sonstiges, 'Dieses Zeichen ist ein Buchstabe aus einem sonstigen Alphabet, anders als das vorhergehende!', antispoof.rot, 'antispoof-mark');
if (x.indexOf('\u2043') != -1) return 'Dies ist ein Aufzählungsstrich!';
count += highlight.highlight(antispoof.regexp_latein, 'Dieses Zeichen ist ein lateinischer Buchstabe, anders als das vorhergehende!', antispoof.rot, 'antispoof-mark');
return 'Dieses Zeichen ist normalerweise in Texten nicht erwünscht!';},
highlight.highlight(antispoof.regexp_benennen, function (x) {
antispoof.rot,
if (x == '\u00A0') return 'nbsp';
true],
if (x == '\u2009') return 'thinspace';
[antispoof.regexp_kombinierend,
if (x == '\u2013') return 'Gedanken-/Bis-/etc. -strich';
'Dieses Zeichen ist aus zwei Zeichen zusammengesetzt, einem Akzent und einem Buchstaben!',
if (x == '\u2212') return 'Minus';
antispoof.grau,
if (x == '\u2500') return 'horizontale Linie';
false],
if (x.search(/[\u0250-\u02AF]/) > -1) return 'IPA-Zeichen';
[antispoof.regexp_griechisch,
return '\\u' + x.charCodeAt(0).toString(16);
'Dieses Zeichen ist ein griechischer Buchstabe, anders als das vorhergehende!',
}, antispoof.grau);
antispoof.rot,
if (count > 0) {
true],
$j('#firstHeading').after('<span class="antispoof-count noprint">' + count + ' verdächtige Stelle' + (count == 1 ? '' : 'n') + ' gefunden!</span>'); //!RL!
[antispoof.regexp_kyrillisch,
appendCSS('.antispoof-mark {z-index: 20; position: relative;}'); //!RL!
'Dieses Zeichen ist ein kyrillischer Buchstabe, anders als das vorhergehende!',
$j(document.body).append('<div id="antispoof-overlay" style="position:absolute; top:0; left:0; z-index:10; width:100%; height:100%; background-color:#000; filter:alpha(opacity=60); opacity:0.60;"></div>'); //!RL!
$j('#antispoof-overlay').hide(); //!RL!
antispoof.rot,
true],
$j('.antispoof-count, #antispoof-overlay').click(function(){$j('#antispoof-overlay').css('height', $j(document).height()).toggle();}); //!RL!
[antispoof.regexp_sonstiges,
}
'Dieses Zeichen ist ein Buchstabe aus einem sonstigen Alphabet, anders als das vorhergehende!',
antispoof.rot,
true],
[antispoof.regexp_latein,
'Dieses Zeichen ist ein lateinischer Buchstabe, anders als das vorhergehende!',
antispoof.rot,
true],
[antispoof.regexp_benennen,
function (x) {
if (x == '\u00A0') return 'nbsp';
if (x == '\u2009') return 'thinspace';
if (x == '\u2013') return 'Gedanken-/Bis-/etc. -strich';
if (x == '\u2212') return 'Minus';
if (x == '\u2500') return 'horizontale Linie';
if (x.search(/[\u0250-\u02AF]/) > -1) return 'IPA-Zeichen';
return '\\u' + x.charCodeAt(0).toString(16);},
antispoof.grau,
false]];
var done = function() {
if (antispoof.count > 0) {
$('#firstHeading').after('<span class="antispoof-count noprint">' + antispoof.count + ' verdächtige Stelle' + (antispoof.count == 1 ? '' : 'n') + ' gefunden!</span>');
mw.util.addCSS('.antispoof-mark {z-index: 20; position: relative;}');
$(document.body).append('<div id="antispoof-overlay" style="position:absolute; top:0; left:0; z-index:10; width:100%; height:100%; background-color:#000; filter:alpha(opacity=60); opacity:0.60;"></div>');
$('#antispoof-overlay').hide();
$('.antispoof-count, #antispoof-overlay').click(function(){$('#antispoof-overlay').css('height', $(document).height()).toggle();});
}};
$.eachAsync(todo, {end: done, loop: function(i, data) {
var c = highlight.highlight(data[0], data[1], data[2], 'antispoof-mark');
if (data[3]) antispoof.count += c;
}});
}
}
};
};


if (typeof jsmodules != 'undefined') jsmodules.after('[[Benutzer:Schnark/js/antispoof.js]]');
if (typeof jsmodules != 'undefined') jsmodules.after('[[Benutzer:Schnark/js/antispoof.js]]');
antispoof.init();
mw.loader.using('jquery.async', antispoof.init);


//</nowiki>
//</nowiki>

Version vom 16. Februar 2011, 10:41 Uhr

//Dokumentation unter [[Benutzer:Schnark/js/antispoof]] <nowiki>

var antispoof = {
version: 1.0,
rot: '#FF8080',
grau: '#C0C0C0',

count: 0, //Anzahl der verdächtigen Stellen

unsichtbar: '\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F\u00AD\u2000-\u2008\u200A-\u200D\u200F\u2028-\u202F\u205F-\u206F', //unsichtbare Zeichen außer TAB (kommt in Versionsunterschieden vor), LF, CR, SPACE, NBSP, THINSPACE, LRM (nur für Spezialseiten)
punkt: '\u0009\u000A\u000D\u0020-\u0040\u005B-\u0060\u007B-\u007E\u00A0-\u00AC\u00AE-\u00BF\u00D7\u00F7\u02B0-\u02FF\u2009\u2010-\u2027\u2030-\u205E\u2070\u2074-\u2079\u2080-\u2089\u2190-\u22FF', //Satz- und Leerzeichen, Zahlen, Abstandsbestimmung u. ä.
latein: '\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02AF\u1E00-\u1EFF\u2C60-\u2C7F\uA720-\uA7FF', //lateinische Buchstaben (ink. IPA)
sonstiges: '\u0530-\u1DBF\u2071-\u2073\u207A-\u207F\u208A-\u20CF\u2100-\u218F\u2300-\u2C5F\u2C80-\uA71F\uA800-\uD7FF\uF900-\uFE1F\uFE30-\uFFEF', //Buchstaben aus anderen Alphabeten und sonstige Zeichen
griechisch: '\u0370-\u03FF\u1F00-\u1FFF', //griechische Buchstaben
kyrillisch: '\u0400-\u052F', //kyrillische Buchstaben
kombinierend: '\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F', //kombinierende Zeichen
privat: '\uE000-\uF8FF', //privater Gebrauch
unerwuenscht: '\u2010\u2011\u2012\u2015\u2043\u2155-\u218F\u2625-\u2629\u2670\u2671\u2716\u2719-\u271F\u2757-\u275E\u2762\u2763\u2768-\u2775\u2794-\u27BF\uFE50-\uFE6F\uFF00-\uFFFD', //aus irgendwelchen Gründen nicht erwünscht, aber oben nicht erfasst (komische Striche (Geviertstrich nur in NS 0), Darstellungsvarianten, Dingbats, etc.)
benennen: '\u0250-\u02AF\u2009\u2013\u2212\u2500', //nur mit Tooltip benennen (auf Nicht-Spezialseiten NBSP zusätzlich)

rtl: '\u0590-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF',
zwj_ok: '\u0590-\u109F',

regexp_unsichtbar: null, // /()((?:^|.)[unsichtbar](?:.|$))/g
regexp_privat: null, // /()([privat]+)/g
regexp_kombinierend: null, // /()([kombinierend].)/g
regexp_latein: null, // /([^latein punkt unsichtbar kombinierend])([latein]+)/g
regexp_griechisch: null, // /([^griechisch punkt unsichtbar kombinierend])([griechisch]+)/g
regexp_kyrillisch: null, // /([^kyrillisch punkt unsichtbar kombinierend])([kyrillisch]+)/g
regexp_sonstiges: null, // /([^sonstiges punkt unsichtbar kombinierend])([sonstiges]+)/g
regexp_unerwuenscht: null, // /()([unerwuenscht])/g
regexp_benennen: null, // /()([benennen])/g

regexp_rtl1: null, // /(^|[^rtl])RLM([rtl]|$)/
regexp_rtl2: null, // /(^|[rtl])LRM([^rtl]|$)/
regexp_zwj_ok: null, // /[zwj_ok][\u200C\u200D][zwj_ok]/

init: function() {
with (antispoof) {
if (mw.config.get('wgNamespaceNumber') != -1) {
   unsichtbar += '\u200E';
   benennen += '\u00A0'; }
if (mw.config.get('wgNamespaceNumber') == 0) unerwuenscht += '\u2014';
regexp_unsichtbar = new RegExp ('()((?:^|.)[' + unsichtbar + '](?:.|$))', 'g');
regexp_privat = new RegExp ('()([' + privat + ']+)', 'g');
regexp_kombinierend = new RegExp ('()(.[' + kombinierend + '])', 'g');
regexp_latein = new RegExp ('([^' + latein + punkt + unsichtbar + kombinierend + '])([' + latein + ']+)', 'g');
regexp_griechisch = new RegExp ('([^' + griechisch + punkt + unsichtbar + kombinierend + '])([' + griechisch + ']+)', 'g');
regexp_kyrillisch = new RegExp ('([^' + kyrillisch + punkt + unsichtbar + kombinierend + '])([' + kyrillisch + ']+)', 'g');
regexp_sonstiges = new RegExp ('([^' + sonstiges + punkt + unsichtbar + kombinierend + '])([' + sonstiges + ']+)', 'g');
regexp_unerwuenscht = new RegExp ('()([' + unerwuenscht + '])', 'g');
regexp_benennen = new RegExp ('()([' + benennen + '])', 'g');

regexp_rtl1 = new RegExp ('(^|[^' + rtl + '])\u200F([' + rtl + ']|$)');
regexp_rtl2 = new RegExp ('(^|[' + rtl + '])\u200E([^' + rtl + ']|$)');
regexp_zwj_ok = new RegExp ('[' + zwj_ok + '][\u200C\u200D][' + zwj_ok + ']');

$(mark);
}
},

mark: function() {
antispoof.count = 0;
var todo = [
//regexp, hint, color, count
 [antispoof.regexp_unsichtbar,
  function (x) {
    if (x.indexOf('\u00AD') != -1) return 'An dieser Stelle steht ein weiches Trennzeichen!';
    if (x.indexOf('\u200B') != -1) return 'An dieser Stelle steht ein nullbreites Leerzeichen!';
    if (x.indexOf('\u200C') != -1) return 'An dieser Stelle steht ein nullbreiter Nichtverbinder!';
    if (x.indexOf('\u200D') != -1) return 'An dieser Stelle steht ein nullbreiter Verbinder!';
    if (x.indexOf('\u200E') != -1) return 'An dieser Stelle steht ein Links-nach-rechts-Zeichen!';
    if (x.indexOf('\u200F') != -1) return 'An dieser Stelle steht ein Rechts-nach-links-Zeichen!';
    return 'Dieses unsichtbare Zeichen ist kein normales Leerzeichen!';},
  function (x) {
    if (x.match(antispoof.regexp_rtl1)) return antispoof.grau;
    if (x.match(antispoof.regexp_rtl2)) return antispoof.grau;
    if (x.match(antispoof.regexp_zwj_ok)) return antispoof.grau;
    return antispoof.rot;},
  true],
 [antispoof.regexp_privat,
  'Dieses Zeichen gehört Unicode-Block "Privater Gebrauch" und hat daher in einem Text normalerweise nichts verloren!',
  antispoof.rot,
  true],
 [antispoof.regexp_unerwuenscht,
  function (x) {
    if (x.indexOf('\u2010') != -1) return 'Dies ist ein Unicode-Bindestrich!';
    if (x.indexOf('\u2011') != -1) return 'Dies ist ein nicht-umbrechender Bindestrich!';
    if (x.indexOf('\u2012') != -1) return 'Dies ist ein ziffernbreiter Bindestrich!';
    if (x.indexOf('\u2014') != -1) return 'Dies ist ein Geviertstrich!';
    if (x.indexOf('\u2015') != -1) return 'Dies ist ein horizontaler Strich!';
    if (x.indexOf('\u2043') != -1) return 'Dies ist ein Aufzählungsstrich!';
    return 'Dieses Zeichen ist normalerweise in Texten nicht erwünscht!';},
  antispoof.rot,
  true],
 [antispoof.regexp_kombinierend,
  'Dieses Zeichen ist aus zwei Zeichen zusammengesetzt, einem Akzent und einem Buchstaben!',
  antispoof.grau,
  false],
 [antispoof.regexp_griechisch,
  'Dieses Zeichen ist ein griechischer Buchstabe, anders als das vorhergehende!',
  antispoof.rot,
  true],
 [antispoof.regexp_kyrillisch,
  'Dieses Zeichen ist ein kyrillischer Buchstabe, anders als das vorhergehende!',
  antispoof.rot,
  true],
 [antispoof.regexp_sonstiges,
  'Dieses Zeichen ist ein Buchstabe aus einem sonstigen Alphabet, anders als das vorhergehende!',
  antispoof.rot,
  true],
 [antispoof.regexp_latein,
  'Dieses Zeichen ist ein lateinischer Buchstabe, anders als das vorhergehende!',
  antispoof.rot,
  true],
 [antispoof.regexp_benennen,
  function (x) {
    if (x == '\u00A0') return 'nbsp';
    if (x == '\u2009') return 'thinspace';
    if (x == '\u2013') return 'Gedanken-/Bis-/etc. -strich';
    if (x == '\u2212') return 'Minus';
    if (x == '\u2500') return 'horizontale Linie';
    if (x.search(/[\u0250-\u02AF]/) > -1) return 'IPA-Zeichen';
    return '\\u' + x.charCodeAt(0).toString(16);},
  antispoof.grau,
  false]];
var done = function() {
             if (antispoof.count > 0) {
                $('#firstHeading').after('<span class="antispoof-count noprint">' + antispoof.count + ' verdächtige Stelle' + (antispoof.count == 1 ? '' : 'n') + ' gefunden!</span>');
                mw.util.addCSS('.antispoof-mark {z-index: 20; position: relative;}');
                $(document.body).append('<div id="antispoof-overlay" style="position:absolute; top:0; left:0; z-index:10; width:100%; height:100%; background-color:#000; filter:alpha(opacity=60); opacity:0.60;"></div>');
                $('#antispoof-overlay').hide();
                $('.antispoof-count, #antispoof-overlay').click(function(){$('#antispoof-overlay').css('height', $(document).height()).toggle();});
            }};
$.eachAsync(todo, {end: done, loop: function(i, data) {
      var c = highlight.highlight(data[0], data[1], data[2], 'antispoof-mark');
      if (data[3]) antispoof.count += c; 
}});
}
};

if (typeof jsmodules != 'undefined') jsmodules.after('[[Benutzer:Schnark/js/antispoof.js]]');
mw.loader.using('jquery.async', antispoof.init);

//</nowiki>