User:Dl2000/Unwatcher.js

// ADD UNWATCH LINKS:

// addOnloadHook(function () { -- apparently deprecated --

$(function () {

if (!wgCanonicalSpecialPageName) return;

if ((wgCanonicalSpecialPageName != "Watchlist") &&

(wgCanonicalSpecialPageName != "Recentchangeslinked"))

{

return;

}

if (!document.forms[0]) return;

// if (!document.forms[0].namespace) return; -- namespace no longer defined within a watchlist page

//var query_prefix = "title="+encodeURIComponent(mw.config.get('wgPageName'))+"&action=submit&remove=1&id[]=";

var query_prefix = "action=unwatch&title=";

// get list of all links in content:

var links = document.getElementById('content').getElementsByTagName('a');

// make a static copy of the nodelist and lose the original for speed

// while we're at it, prune the uninteresting links from the list

var linksCopy = new Array ();

for (var i = 0; i < links.length; i++) {

if (/[?&]action=history([&#]|$)/.test(links[i].href)) linksCopy.push(links[i]);

}

links = linksCopy;

for (var i = 0; i < links.length; i++) {

// create unwatch link and append it after history link

var unwatch = document.createElement('a');

unwatch.href = wgScriptPath + "/index.php?" + query_prefix + encodeURIComponent(links[i].title);

unwatch.title = "Unwatch "+links[i].title;

unwatch.appendChild(document.createTextNode("unwatch"));

links[i].parentNode.insertBefore(unwatch, links[i].nextSibling);

// insert a delimiter between the two links

var delim = links[i].previousSibling;

delimText = (delim.nodeType == 3 ? delim.nodeValue : ""); // kluge to handle case where "diff" is unlinked

delim = document.createTextNode(delimText.replace(/^.*diff/, ""));

links[i].parentNode.insertBefore(delim, unwatch);

}

});

//