User:Garzfoth/Scripts/WatchlistUpdateNotice.js

// 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/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( $("").append(				$("")				.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; }); });