User:Msh210/watchlist.js

From Wiktionary, the free dictionary
Jump to navigation Jump to search

Note – after saving, you may have to bypass your browser’s cache to see the changes.

  • 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.

//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&amp;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);