User:Stevage/filterwatchlist.user.js

// ==UserScript==

// @name Filter watchlist

// @namespace stevage

// @description Removes various namespaces from watchlist display

// @include *.wikipedia.org/*Special:Watchlist*

// ==/UserScript==

(

function() {

function hideNamespace() {

if (!document.getElementById('bodyContent')) {

return;

}

this.add_buttons();

}

hideNamespace.prototype.add_buttons = function() {

GM_log('in add_buttons');

// Create the hide Wikipedia namespace buttion

var

button1 = document.createElement('input');

button1.setAttribute('id', 'hideNamespace_button1');

button1.className = 'searchbutton';

button1.style.marginLeft = '5px';

button1.setAttribute('type', 'button');

button1.value = 'Hide Wikipedia:';

button1.onclick = function() { hideNamespace.start('Wikipedia:',0); }

var

button2 = document.createElement('input');

button2.setAttribute('id', 'hideNamespace_button2');

button2.className = 'searchbutton';

button2.style.marginLeft = '5px';

button2.setAttribute('type', 'button');

button2.value = 'Hide Wikipedia talk:';

button2.onclick = function() { hideNamespace.start('Wikipedia_talk:',0); }

var

button3 = document.createElement('input');

button3.setAttribute('id', 'hideNamespace_button3');

button3.className = 'searchbutton';

button3.style.marginLeft = '5px';

button3.setAttribute('type', 'button');

button3.value = 'Hide article talk:';

button3.onclick = function() { hideNamespace.start('Talk:',0); }

var

button4 = document.createElement('input');

button4.setAttribute('id', 'hideNamespace_button4');

button4.className = 'searchbutton';

button4.style.marginLeft = '5px';

button4.setAttribute('type', 'button');

button4.value = 'Hide userspace/talk:';

button4.onclick = function() {

hideNamespace.start('User:',0);

hideNamespace.start('User_talk:',0);

}

var

button5 = document.createElement('input');

button5.setAttribute('id', 'hideNamespace_button5');

button5.className = 'searchbutton';

button5.style.marginLeft = '5px';

button5.setAttribute('type', 'button');

button5.value = 'Hide all talk:';

button5.onclick = function() {

hideNamespace.start('Talk:',0);

hideNamespace.start('User_talk:',0);

hideNamespace.start('Wikipedia_talk:',0);

hideNamespace.start('Template_talk:',0);

}

var

button6 = document.createElement('input');

button6.setAttribute('id', 'hideNamespace_button6');

button6.className = 'searchbutton';

button6.style.marginLeft = '5px';

button6.setAttribute('type', 'button');

button6.value = 'Hide everything:';

button6.onclick = function() {

hideNamespace.start('Talk:',0);

hideNamespace.start('User:',0);

hideNamespace.start('User_talk:',0);

hideNamespace.start('Wikipedia:',0);

hideNamespace.start('Wikipedia_talk:',0);

hideNamespace.start('Template:',0);

hideNamespace.start('Template_talk:',0);

}

var

button7 = document.createElement('input');

button7.setAttribute('id', 'hideNamespace_button7');

button7.className = 'searchbutton';

button7.style.marginLeft = '5px';

button7.setAttribute('type', 'button');

button7.value = 'Hide logged in users:';

button7.onclick = function() {

hideNamespace.start('',1);

}

// Add the buttons to the page

var whereto = document.getElementById('bodyContent');

whereto.parentNode.insertBefore(button1, whereto);

whereto.parentNode.insertBefore(button2, whereto);

whereto.parentNode.insertBefore(button3, whereto);

whereto.parentNode.insertBefore(button4, whereto);

whereto.parentNode.insertBefore(button5, whereto);

whereto.parentNode.insertBefore(button6, whereto);

whereto.parentNode.insertBefore(button7, whereto);

}

hideNamespace.prototype.start = function(namespacetohide, hideloggedin) {

var body;

body = document.getElementById('bodyContent');

if (body) {

var changes;

if (!hideloggedin) {

changes = document.evaluate(

'id("bodyContent")/DIV/A[starts-with(@HREF,"/wiki/' + namespacetohide + '") and @title=text()]',

document,

null,

XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,

null

);

GM_log(changes.snapshotLength + " A's starting with " + namespacetohide);

} else {

changes= document.evaluate(

// 'id("bodyContent")/DIV/A[@title="Special:Contributions" and text() != "contribs"]',

'id("bodyContent")/DIV/A[text() = "contribs"]',

document,

null,

XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,

null

);

GM_log(changes.snapshotLength + " A's not by logged-in users.");

}

for (var i = 0; i < changes.snapshotLength; i++) {

var change = changes.snapshotItem(i);

var x = change.previousSibling;

while (x != null && x.nodeName != "BR") {

GM_log("Deleting node: " + change.href + " --> " + x.nodeName);

var y = x.previousSibling;

//GM_log(" next: " + y.innerHTML + " (" + y.nodeName + ")");

x.parentNode.removeChild(x);

//GM_log("Deleted node.");

x = y;

}

x = change.nextSibling;

while (x != null && x.nodeName != "BR") {

GM_log("Deleting node2: " + change.href + " --> " + x.nodeName);

var y = x.nextSibling;

x.parentNode.removeChild(x);

x = y;

}

GM_log("Deleting node: " + change.href);

change.parentNode.removeChild(x); //rm BR

change.parentNode.removeChild(change);

}//for

} //if hist

} // function 'start'

var hideNamespace = new hideNamespace();

document.hideNamespace = hideNamespace;

} // unnamed function

) ();