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)