User:Msh210/watchlist.js
Note: You may have to bypass your browser’s cache to see the changes. In addition, after saving a sitewide CSS file such as MediaWiki:Common.css, it will take 5-10 minutes before the changes take effect, even if you clear your cache.
- Mozilla / Firefox / Safari: hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (Command-R on a Macintosh);
- Konqueror and Chrome: click Reload or press F5;
- Opera: clear the cache in Tools → Preferences;
- Internet Explorer: hold Ctrl while clicking Refresh, or press Ctrl-F5.
- This script lacks a documentation subpage. Please create it.
- Useful links: root page • root page’s subpages • links • redirects • your own
//Adds "unwatch" links to watchlist and recentchanges.
//Seems good for FF; not tested elsewhere.
//Todo: Add links for watchlist's log-entry lines also. (Difficulty is finding the right pagename.)
function unwatchlinks() {
switch(mw.config.get('wgCanonicalSpecialPageName')){
case 'Watchlist':
lists=document.getElementsByTagName('ul');
for (i=0;i<lists.length;i++) {
if (lists[i].hasAttribute('class')) {
if (lists[i].getAttribute('class')=='special') {//It's a day's watchlist.
items=lists[i].childNodes;//li elements and whitespace
for (j=items.length-1;j>-1;j--) {
if (items[j].nodeType>1) continue;//li elements, not whitespace
difflink=items[j].firstChild;
while (difflink.nodeType>1) difflink=difflink.nextSibling;//first element sub the li
diffurl=difflink.getAttribute('href');// /w/index.php?title=TITLE&OTHERPARAMS if not a log entry
if (diffurl.indexOf('/wiki/')) {//not a log entry
title=diffurl.split('=')[1];
title=title.split('&')[0];//pagename of the watchlist item
newurl='/wiki/'+title+'?action=unwatch';
anch=document.createElement('a');
anch.setAttribute('href',newurl);
anch.appendChild(document.createTextNode('unwatch'));
items[j].insertBefore(anch,difflink);
spacer=document.createTextNode(') (');
items[j].insertBefore(spacer,difflink);
}//end if indexOf
}//end for j
}//end if special
}//end if hasAttr
};//end for i
break;//case 'My watchlist'
case 'Recentchanges':
strongs=document.getElementsByTagName('strong');
for (i=0;i<strongs.length;i++) {
strong=strongs[i];
if (strong.getAttribute('class')=='mw-watched') {//page is on watchlist
children=strong.childNodes;//a element and whitespace
for (j=0;j<children.length;j++) {
if (children[j].nodeType>1) continue;//elements only, so a element
pageurl=children[j].getAttribute('href');// /wiki/TITLE
unwatchurl=pageurl+'?action=unwatch';
anch=document.createElement('a');
anch.setAttribute('href',unwatchurl);
anch.appendChild(document.createTextNode('(unwatch)'));
strong.parentNode.insertBefore(anch,strong);
spacer=document.createTextNode(' ');
strong.parentNode.insertBefore(spacer,strong);
break;//for j, don't look at subsequent whitespace
}//end for j
}//end if mw-watched
}//end for i
break;//case 'Recent changes'
}//end switch
};//end function
$(unwatchlinks);