MediaWiki:Gadget-watchlist-notice-core.js

In today's world, MediaWiki:Gadget-watchlist-notice-core.js is a topic that has caught the attention of millions of people around the world. Its relevance and impact ranges from personal to global aspects, and its impact is felt in all areas of daily life. As time progresses, MediaWiki:Gadget-watchlist-notice-core.js continues to challenge the boundaries of knowledge and generate debate in society. In this context, it is imperative to fully explore this topic, understand its implications and reflect on its influence on our lives. In this article, we will delve into the fascinating world of MediaWiki:Gadget-watchlist-notice-core.js, analyzing its many facets and discovering how it can affect our perceptions and actions.
/**
 * Add dismiss buttons to watchlist-message, then unhide it
 * Allows multiple dismiss buttons on ] 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: ]
 * @author: ]
 */
/*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 defined
function expungeOldNotices ( currentList ) {
	var dismissedNotices = getDismissedNotices(),
		originalLength = dismissedNotices.length;
	for ( var i = dismissedNotices.length - 1; i >= 0; i--) {
		if( currentList.indexOf( dismissedNotices ) === -1 ) {
			dismissedNotices.splice( i, 1 );
		}
	}
	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.className.replace( /.*cookie\-ID\_(\d*).*/ig, '$1' ) );
		if ( isNaN( watchlistCookieID ) ) {
			continue;
		}
		watchItemIds.push( watchlistCookieID );
		if ( dismissedNotices.indexOf( watchlistCookieID ) !== -1 ) {
			watchItems.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.appendChild( Button );
	}
	expungeOldNotices( watchItemIds );
	
	$( '#watchlist-message' ).show();
}

$( addDismissButton );

}( mediaWiki, jQuery ) );