Jump to content

User:Garzfoth/Scripts/WatchlistUpdateNotice.js

From Wikipedia, the free encyclopedia
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.
// Migrated from https://en.wikipedia.org/wiki/User:Garzfoth/common.js on 2021-05-05

// Notes:
// • For changelogs prior to migration, see https://en.wikipedia.org/enwiki/w/index.php?title=User:Garzfoth/common.js&action=history
// • The way this uses mw.loader to create functions as vars (anonymous functions or such, I forget the term + function declarations within blocks), and especially the way it's initialized, is a bit odd and deserves further investigation.
// • I also need to make sure this isn't interfering with e.g. the watchlist update hooks.
// • TODO: Review, improvements, diff, cleanup, etc.

// Custom watchlist update notice in top toolbar
// Originally from: [[User:APerson/watchlist-notice.js]]
// Note: if it acts odd, mark all pages as visited. in the future, look at showing # of unread articles,
// or checking only recent ones (not worth the time right now)
// (THIS WAS PATCHED FOR THE UI CHANGE ISSUE)

mw.loader.using('mediawiki.util', function () {
	var showNotice = function () {
		// Stick a "Watchlist update!" notice after the notification count
		$("#pt-userpage").before(
			$("<li>").append(
				$("<a>")
				.text( "Watchlist update!" )
				.css({
					"background-color": "green",
					"color": "white",
					"border-radius": "2px",
					"padding": "0.25em 0.45em 0.2em",
					"cursor": "pointer",
					"font-weight": "bold",
					"transition": "background-color 0.5s"
				})
				.attr("href", "/wiki/Special:Watchlist")
				.mouseover(updateNotice)
			)
			.attr("id", "watchlist-update-notice")
		);
	};
	
	var updateNotice = function () {
		// Lighten the background color so the user knows we're updating
		$("#watchlist-update-notice a").css("background-color", "#7bff7b");
		
		// Update the notice
		$.getJSON(
			mw.util.wikiScript('api'),
			{
				format: "json",
				action: "query",
				list: "watchlist",
				wlshow: "unread",
				wllimit: 1 // Because we're checking if there are *any* entries
			} ).done(function (data) {
				if (!data.query) return;
				if (data.query.watchlist.length) {
					// There are new watchlist diffs to read, so show notice
					if(!$("#watchlist-update-notice").length) {
						// That is, if it isn't shown already
						showNotice();
					} else {
						// There's already a notice, so change background
						$("#watchlist-update-notice a").css("background-color", "green");
					}
				} else {
					// No new watchlist diffs to read, so hide notice
					$("#watchlist-update-notice").remove();
				}
			}
		);
	};
 
	$(document).ready(function () {
		updateNotice();
	});
});