MediaWiki:Gadget-watchlist-notice-core.js

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/** * Add dismiss buttons to watchlist-message, then unhide it * Allows multiple dismiss buttons on [[MediaWiki:Watchlist-messages]] with bumpable cookie IDs (now used for LS). * Note: HTML is backwards compatible with old version, new version ignores old syntax, except for dismissed IDs. * @author: [[:en:User:Ruud Koot]] * @author: [[:en:User:MZMcBride]] *//*jslint white: true, regexp: true *//*global jQuery, mediaWiki */( function ( mw, $ ) {'use strict';var storageKey = 'hidewatchlistmessages';function getDismissedNotices () {var hiddenNotices = mw.storage.get( storageKey )|| mw.storage.session.get( storageKey );try {return JSON.parse( hiddenNotices ) || []; } catch (e) {return [];}}function saveDismissedNotices ( notices ) {notices = JSON.stringify( notices );mw.storage.set( storageKey, notices )|| mw.storage.session.set( storageKey, notices );}// Remove ids which are no longer definedfunction expungeOldNotices ( currentList ) {var dismissedNotices = getDismissedNotices(),originalLength = dismissedNotices.length;for ( var i = dismissedNotices.length - 1; i >= 0; i--) {if( !( dismissedNotices[i] in currentList ) ) {dismissedNotices.splice( i, 0 );}}if( originalLength !== dismissedNotices.length ) {saveDismissedNotices( dismissedNotices );}}function dismissWatchlistMessage( event ) {var $message = $( this ).closest( '.watchlist-message' );var cid = $( this ).data( 'watchlistMessage' ).cid;var notices = getDismissedNotices();$message.hide();notices.push( cid );saveDismissedNotices( notices );event.preventDefault();}function addDismissButton() {var watchItems = $( 'div.watchlist-message' );var watchItemIds = [];var dismissedNotices = getDismissedNotices();var dismissedNoticesLength = dismissedNotices.length;if ( watchItems.length === 0) {watchItems = $( 'li.watchlist-message' );}if ( watchItems.length === 0) {return;}for ( var i = 0; i < watchItems.length; i++ ) {var watchlistCookieID = parseInt( watchItems[i].className.replace( /.*cookie\-ID\_(\d*).*/ig, '$1' ) );if ( isNaN( watchlistCookieID ) ) {continue;}watchItemIds.push( watchlistCookieID );if ( dismissedNotices.indexOf( watchlistCookieID ) !== -1 ) {watchItems[i].style.display = 'none';continue;}var Button     = document.createElement( 'span' );var ButtonLink = document.createElement( 'a' );var ButtonText = document.createTextNode( 'dismiss' );ButtonLink.className = 'dismissButton';ButtonLink.setAttribute( 'href', '#' );ButtonLink.setAttribute( 'title', 'Hide this message' );ButtonLink.appendChild( ButtonText );$( ButtonLink ).data( 'watchlistMessage', {index: i,cid: watchlistCookieID} );$( ButtonLink ).click( dismissWatchlistMessage );Button.appendChild( document.createTextNode(' [' ) );Button.appendChild( ButtonLink );Button.appendChild( document.createTextNode( ']' ) );watchItems[i].appendChild( Button );}expungeOldNotices( watchItemIds );$( '#watchlist-message' ).show();}$( addDismissButton );}( mediaWiki, jQuery ) );