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); } }