User:Yair rand/watchlistnotifications.js

// Notifies the user when something new shows up on their watchlist, excluding one's own edits. // Desktop notifications only work for Chrome at the moment. // To enable, add importScript("User:Yair rand/watchlistnotifications.js"); to Special:MyPage/common.js, // go to your watchlist, and click the "Enable watchlist desktop notifications" button in the top-right corner. // This is a modified version of the earlier wikt:User:Yair rand/watchlistnotifications.js. function watchlistNotifier{ var t, nc = window.webkitNotifications || window.mozNotifications || window.oNotifications || window.msNotifications || window.notifications || null; function checkWatchlistForUpdates{ $.get(mw.config.get('wgServer')+mw.config.get('wgScriptPath')+"/api.php?format=json&action=query&list=watchlist&wlexcludeuser="+mw.config.get('wgUserName')+"&wlprop=user|title|timestamp&wlend="+(t?t:1),function(r){     r = r.query.watchlist;      for(var i = 0; t && t < r[i].timestamp; i++){        var w=nc.createNotification('',r[i].title,'has been edited by ' + r[i].user)        w.show        w.onclick = function{w.cancel;window.focus;}        document.title = r[i].title+' has been edited by ' + r[i].user        onfocus = function{location.reload(true)}        }      t = r[0].timestamp;      setTimeout(checkWatchlistForUpdates, 15000)      }) } nc && nc.checkPermission == 0 && checkWatchlistForUpdates if(nc && nc.checkPermission == 1){ var a = document.getElementById('firstHeading').appendChild(document.createElement('a')); a.appendChild(document.createTextNode("Enable watchlist desktop notifications")); a.style.float = 'right'; a.style.cursor = 'pointer'; a.style.fontSize = '13px'; a.onclick = function{nc.requestPermission(function{location.reload}); this.innerHTML = 'Waiting for permission to use desktop notifications...'} } }

mw.config.get('wgPageName') == "Special:Watchlist" && jQuery(document).ready(watchlistNotifier)