User:Splarka/diffreveal.js

/* Reveal unicode whitespace and invisible formatting characters in diffs, version [0.0.1]

Originally from: http://en.wikipedia.org/wiki/User:Splarka/diffreveal.js

  • /

var eucChars = [160,173,847,1536,1537,1538,1539,1757,1807,3852,4447,4448,5760,6155,6156,6157,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8209,8232,8233,8234,8235,8236,8237,8238,8239,8239,8260,8287,8288,8289,8290,8291,8292,8298,8299,8300,8301,8302,8303,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12288,12350,65279,65408,65532];

if(mw.config.get('wgAction') == 'view' || mw.config.get('wgAction') == 'submit') {

$(document).ready(diffRevealInit);

}

function diffRevealInit() {

var dt = document.querySelectorAll('table.diff');

if(!dt || dt.length < 1) return;

dt = dt[0];

var diff = document.querySelectorAll('span.diffchange-inline');

for(var i=0;i

var chr = utf8array(getText(diff[i]));

var txt = '';

for(var j=0;j

txt += character(chr[j]);

//if(chr[j] > 128) {

if($.inArray(chr[j], eucChars) != -1) {

txt += '[U+' + hex(chr[j]) + ']';

}

}

//diff[i].title = '' + txt;

while(diff[i].firstChild) diff[i].removeChild(diff[i].firstChild)

diff[i].appendChild(document.createTextNode(txt));

}

}

function getText(object) {

if (object.nodeType == 3) return object.nodeValue;

var txt = [];

var i=0;

while(object.childNodes[i]) {

txt[txt.length] = getText(object.childNodes[i]);

i++;

}

return txt.join('');

}

function utf8array(txt) {

var list = [];

for(var i=0;i

var num = txt.charCodeAt(i);

if(num >= 55296 && num <= 56319) {

var num2 = txt.charCodeAt(i+1);

num = ((num-55296)*1024) + (num2-56320) + 65536;

list.push(num);

i++;

} else {

list.push(num);

}

}

return list;

}

function hex(num) {

var hex = num.toString(16).toUpperCase();

while(hex.length < 4) hex = '0' + hex

return hex;

}

function character(num) {

if(num >= 65536 && num <= 1114111) {

var num1 = Math.floor((num - 65536) / 1024) + 55296;

var num2 = ((num - 65536) % 1024) + 56320;

return String.fromCharCode(num1) + String.fromCharCode(num2);

} else {

return String.fromCharCode(num);

}

}