User:Enterprisey/watchlist-notice.js

mw.loader.using( 'mediawiki.util', function () {

var showNotice = function () {

// Stick a "Watchlist update!" notice after the notification count

$( "#pt-notifications-notice" ).after(

$( "

  • " ).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();

    window.setInterval( updateNotice, 120000 );

    } );

    } );