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();

    });

    });