MediaWiki:Gadget-WatchlistNoticeCore.js
Apparence
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./**
* Display the watchlist messages (by unhiding them), and add dismiss buttons to them.
* The messages are defined in [[MediaWiki:Watchlist-messages]], with bumpable message ids.
* @author: [[:en:User:Ruud Koot]]
* @author: [[:en:User:MZMcBride]]
*/
/* globals WeakMap, mw, $ */
( function () {
'use strict';
var linkIds = new WeakMap();
var storageKey = 'hidewatchlistmessages';
var i18n = ( function () {
var translations = {
fr: {
'Masquer ce message': 'Masquer ce message',
'masquer': 'masquer',
},
en: {
'Masquer ce message': 'Hide this message',
'masquer': 'hide',
},
};
var userlanguage = mw.config.get( 'wgUserLanguage' );
var defaultLanguage = 'fr';
return function ( key ) {
if ( translations[ userlanguage ] && translations[ userlanguage ][ key ] !== undefined ) {
return translations[ userlanguage ][ key ];
}
if ( translations[ defaultLanguage ][ key ] !== undefined ) {
return translations[ defaultLanguage ][ key ];
}
return '';
};
} )();
function getDismissedNotices() {
var hiddenNotices = mw.storage.getObject( storageKey );
return Array.isArray( hiddenNotices ) ? hiddenNotices : [];
}
function saveDismissedNotices( notices ) {
mw.storage.setObject( storageKey, notices );
}
// Remove ids that are no longer defined
function expungeOldNotices( currentList, dismissedNotices ) {
var newDismissed = dismissedNotices.filter( function ( notice ) {
return currentList.includes( notice );
} );
if ( dismissedNotices.length !== newDismissed.length ) {
saveDismissedNotices( newDismissed );
}
}
function dismissWatchlistMessage( event ) {
event.preventDefault();
var ButtonLink = event.currentTarget;
var $message = $( ButtonLink ).closest( '.watchlist-message' );
$message.hide();
var notices = getDismissedNotices();
var messageId = linkIds.get( ButtonLink );
// The conditional prevents multiple insertions of the same id,
// in case the user closed the same message in several browser tabs
if ( !notices.includes( messageId ) ) {
notices.push( messageId );
saveDismissedNotices( notices );
}
}
function addDismissButton() {
var $watchItems = $( '.watchlist-message' );
var watchItemIds = [];
var dismissedNotices = getDismissedNotices();
var hasMessagesToShow = false;
for ( var i = 0; i < $watchItems.length; i++ ) {
var messageId = parseInt( $watchItems[ i ].dataset.messageId );
if ( isNaN( messageId ) ) {
continue;
}
watchItemIds.push( messageId );
if ( dismissedNotices.includes( messageId ) ) {
$watchItems[ i ].style.display = 'none';
} else {
hasMessagesToShow = true;
var Button = document.createElement( 'span' );
var ButtonLink = document.createElement( 'a' );
linkIds.set( ButtonLink, messageId );
ButtonLink.href = '#';
ButtonLink.title = i18n( 'Masquer ce message' );
ButtonLink.textContent = i18n( 'masquer' );
ButtonLink.addEventListener( 'click', dismissWatchlistMessage );
Button.appendChild( document.createTextNode( ' [' ) );
Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( ']' ) );
$watchItems[ i ].appendChild( Button );
}
}
expungeOldNotices( watchItemIds, dismissedNotices );
if ( hasMessagesToShow ) {
$( '#watchlist-messages' ).show();
}
}
$( addDismissButton );
}() );