User:Splarka/wbfilter.js
/* Watchlist line filter script, version [0.0.2]
Originally from http://en.wikipedia.org/wiki/User:Splarka/wbfilter.js
Triggers on watchlists, lets you filter by byte change.
- /
if(wgCanonicalSpecialPageName == 'Watchlist') addOnloadHook(watchlistByteFilter)
function watchlistByteFilter() {
var obj = document.getElementById('contentSub') || document.getElementById('topbar')
if(!obj) return;
var wbf = document.createElement('div');
wbf.setAttribute('id','wbffrm');
wbf.style.color = 'black';
var fs = document.createElement('fieldset');
var lg = document.createElement('legend');
lg.appendChild(document.createTextNode('Byte change threshold filter'));
fs.appendChild(lg);
var lab1 = document.createElement('label');
lab1.appendChild(document.createTextNode('Byte threshold '));
lab1.setAttribute('for','wbfinput1');
fs.appendChild(lab1);
var inp1 = document.createElement('input');
inp1.setAttribute('id','wbfinput1');
inp1.setAttribute('name','wbfinput1');
inp1.setAttribute('type','text');
fs.appendChild(inp1);
var inp2 = document.createElement('input');
inp2.setAttribute('id','wbfinput2');
inp2.setAttribute('name','wbfinput2');
inp2.setAttribute('type','checkbox');
fs.appendChild(inp2);
var lab2 = document.createElement('label');
lab2.style.fontSize = '200%'
lab2.appendChild(document.createTextNode(String.fromCharCode(177) + ' '));
lab2.setAttribute('for','wbfinput2');
fs.appendChild(lab2);
var sub1 = document.createElement('input');
sub1.setAttribute('type','button');
sub1.setAttribute('value','greater than');
addClickHandler(sub1,function() { filterWbf(true) });
sub1.setAttribute('onclick','');
fs.appendChild(sub1)
fs.appendChild(document.createTextNode(' '));
var sub2 = document.createElement('input');
sub2.setAttribute('type','button');
sub2.setAttribute('value','less than');
addClickHandler(sub2,function() { filterWbf(false) });
fs.appendChild(sub2)
wbf.appendChild(fs);
obj.appendChild(wbf);
}
function filterWbf(greater) {
var plusminus = document.getElementById('wbfinput2').checked;
var bt = parseInt(document.getElementById('wbfinput1').value);
var docobj = document.getElementById('bodyContent') || document.getElementById('content') || document.body
var pos = getElementsByClassName(docobj,'*','mw-plusminus-pos');
var neg = getElementsByClassName(docobj,'*','mw-plusminus-neg');
var nul = getElementsByClassName(docobj,'*','mw-plusminus-null');
var posneg = pos.concat(neg).concat(nul);
for(var i=0;i if(plusminus) { spans = posneg; } else if(bt > 0) { spans = pos.concat(nul); } else if(bt < 0) { spans = neg.concat(nul); } else { alert('bad input'); return; } for(var i=0;i spans[i].parentNode.style.backgroundColor = ''; var val = gettext(spans[i]); val = parseInt(val.replace(/[^\d+-]/ig,'')); if((Math.abs(val) > Math.abs(bt) && greater) || (Math.abs(val) < Math.abs(bt) && !greater)) { spans[i].parentNode.style.backgroundColor = '#ffff99'; } } } 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(''); }