User:Quarl/watchlist.js
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
// [[User:Quarl/watchlist.js]] - adds buttons to watchlist: "unwatch", "diff // since" // UNWATCH button asynchronously unwatches and crosses the entry off the // watchlist. // // DIFF SINCE button shows differences since last edited. // quarl 2006-01-09 added asynchronous feature. // quarl 2006-02-03 factored; added diff since. // requires: wikipage.js, util.js, wikiwatch.js, diffsince.js // originally based on http://en.wikipedia.org/wiki/User:Omegatron/monobook.js // see also http://en.wikipedia.org/wiki/User:Matthewmayer/monobook.js // see also Bug 424 http://bugzilla.wikipedia.org/show_bug.cgi?id=424 // <pre><nowiki> var watchlist = new Object(); watchlist.wp = {}; watchlist.unwatchAsync = function(pagename) { var wp = watchlist.wp[pagename]; if (!wp) { alert("## internal error 72192d74-ab57-4a98-917f-8c6ca03b0559"); return; } wikiwatch.unwatchAsync(wp, watchlist._unwatchSuccess, wp.unwatchSpan); return false; } watchlist.watchAsync = function(pagename) { var wp = watchlist.wp[pagename]; if (!wp) { alert("## internal error 72192d74-ab57-4a98-917f-8c6ca03b0559"); return; } wikiwatch.watchAsync(wp, watchlist._watchSuccess, wp.unwatchSpan); return false; } watchlist.diffSince = function(pagename) { var wp = watchlist.wp[pagename]; if (!wp) { alert("## internal error 72192d74-ab57-4a98-917f-8c6ca03b0559"); return; } return diffsince.diffPageAsync(wp, wp.diffsinceSpan); } watchlist._addStrikeThrough = function(node) { // return node && insertNode(node, document.createElement('s')); if (!node) return 0; addClass(ensureSpan(node), 'history-deleted'); return 1; } watchlist._removeStrikeThrough = function(node) { if (!node) return 0; removeClass(ensureSpan(node), 'history-deleted'); return 1; } watchlist._unwatchSuccess = function(wp) { var wpNT = wp.notalkPage(); var wpT = wp.talkPage(); if (0 == (watchlist._addStrikeThrough(findHref(wpNT.url)) + watchlist._addStrikeThrough(findHref(wpT.url)))) { alert("Unwatched article '"+wp.page+"', but couldn't annotate current page."); return; } watchlist._updateWuwLink(wpT, 'watch'); watchlist._updateWuwLink(wpNT, 'watch'); } watchlist._watchSuccess = function(wp) { var wpNT = wp.notalkPage(); var wpT = wp.talkPage(); if (0 == (watchlist._removeStrikeThrough(findHref(wpNT.url)) + watchlist._removeStrikeThrough(findHref(wpT.url)))) { alert("Watched article '"+wp.page+"', but couldn't annotate current page."); return; } watchlist._updateWuwLink(wpT, 'unwatch'); watchlist._updateWuwLink(wpNT, 'unwatch'); } // Update a watch/unwatch link. Returns 1 on success, 0 if not found. // // wuw must be 'watch' or 'unwatch' watchlist._updateWuwLink = function(wpX, wuw) { wp = watchlist.wp[wpX.page]; if (!wp) return 0; var link = "javascript:return watchlist."+wuw+"Async("+string_quote_escape(wp.page)+")"; var url = wp.qurl+'&action='+wuw; wp.unwatchSpan.innerHTML = '<a onclick="'+link+'" href="' + url + '">'+wuw+'</a>'; return 1; } watchlist._load = function() { if (wikiPage.page == "Special:Watchlist") watchlist._annotatePage(); } watchlist._annotatePage = function() { var links = copyArray(document.getElementById('bodyContent').getElementsByTagName('a')); for (i in links) { var link = links[i]; if (link.href && link.href.match(/action=history$/)) { var wp = new WikiPage(link.href); watchlist.wp[wp.page] = wp; wp.unwatchSpan = document.createElement('span'); var unwatchLink = "javascript:return watchlist.unwatchAsync("+string_quote_escape(wp.page)+")"; var unwatchUrl = wp.qurl+'&action=unwatch'; wp.unwatchSpan.innerHTML = '<a onclick="'+unwatchLink+'" href="' + unwatchUrl + '">unwatch</a>'; add_after(link, wp.unwatchSpan); add_after(link, document.createTextNode('; ')); wp.diffsinceSpan = document.createElement('span'); diffsinceLink = "javascript:return watchlist.diffSince("+string_quote_escape(wp.page)+")"; var diffsinceUrl = diffsince.makeUrl(wp); wp.diffsinceSpan.innerHTML = '<a onclick="'+diffsinceLink+'" href="' + diffsinceUrl + '">since</a>'; add_before(link, wp.diffsinceSpan); add_before(link, document.createTextNode('; ')); } } } addOnloadHook(watchlist._load); // </nowiki></pre>

