User:SD0001/watchlist-update-title.js

Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/**
 * Updates the document title to show a prefixed number indicating the number of new 
 * changes when the watchlist undergoes a live update
 * 
 * Should work on any wiki.
 * 
 * Per request by Jürgen Eissink
 * [[Wikipedia:User_scripts/Requests/Archive_4#Watchlist_notifier:_number_of_(automated)_updates_in_browser_page_title]]
 *
 */

if (mw.config.get('wgCanonicalSpecialPageName') === 'Watchlist') {
	
	// Enable "Live updates" every time
	$.ready.then(function() { $('a:contains("' + mw.messages.get('rcfilters-liveupdates-button') + '")').click(); });
	
	var watchlistUpdateNumber = 0;
	var watchlistHeading = document.title;
	var markSeenButtonPressed = false;
	
	$('.mw-rcfilters-ui-markSeenButtonWidget').on('click', function() {
		markSeenButtonPressed = true;
	});
	
	mw.hook('wikipage.content').add(function($content) {
		if (!$content.hasClass('mw-rcfilters-ui-changesListWrapperWidget')) {
			return;
		}
		
		// Handle the hook being fired just after the "Mark all changes as seen" is clicked
		if (markSeenButtonPressed) {
			watchlistUpdateNumber = 0;
			document.title = watchlistHeading;
			markSeenButtonPressed = false;
			return;
		}

		$content.find('ul.special').children().each(function(i, e) {
			
			// exit on reaching the horizontal line separator
		    if (e.tagName === 'DIV') return false;
		    
		    // don't increment counter on one's own edits
		    if (e.querySelector('bdi').textContent !== mw.config.get('wgUserName')) {
		    	watchlistUpdateNumber += 1;
		    }
		    
		});
		
		if (watchlistUpdateNumber > 0) {
			document.title = '(' + watchlistUpdateNumber + ') ' + watchlistHeading;
		}
		
	});
	
	$(window).focus(function() {
		watchlistUpdateNumber = 0;
		document.title = watchlistHeading;
	});
	
}