mediawiki-skins-MinervaNeue/resources/skins.minerva.scripts/watchstar.js
Ed Sanders 527e018af1 Remove all use of IIFEs across Minerva codebase
These will make JSDoc easier to configure later and is
better suited to ES6 module format.
The dependency injection pattern can be retained by moving
the import to the top of the file.

Change-Id: I0fe692eb7066e52815ef3d21724c7439d82b2c5f
2024-06-28 18:54:38 +00:00

46 lines
1.2 KiB
JavaScript

const watchstar = require( 'mediawiki.page.watch.ajax' ).watchstar;
const WATCHED_ICON_CLASS = 'minerva-icon--unStar-progressive';
const TEMP_WATCHED_ICON_CLASS = 'minerva-icon--halfStar-progressive';
const UNWATCHED_ICON_CLASS = 'minerva-icon--star-base20';
/**
* Tweaks the global watchstar handler in core to use the correct classes for Minerva.
*
* @param {jQuery} $icon
*/
function init( $icon ) {
const $watchlink = $icon.find( 'a' );
watchstar( $watchlink, mw.config.get( 'wgRelevantPageName' ), toggleClasses );
}
/**
* @param {jQuery} $link
* @param {boolean} isWatched
* @param {string} expiry
*/
function toggleClasses( $link, isWatched, expiry ) {
const $icon = $link.find( '.minerva-icon' );
$icon.removeClass( [ WATCHED_ICON_CLASS, UNWATCHED_ICON_CLASS, TEMP_WATCHED_ICON_CLASS ] )
.addClass( () => {
let classes = UNWATCHED_ICON_CLASS;
if ( isWatched ) {
if ( expiry !== null && expiry !== undefined && expiry !== 'infinity' ) {
classes = TEMP_WATCHED_ICON_CLASS;
} else {
classes = WATCHED_ICON_CLASS;
}
}
return classes;
} );
}
module.exports = {
init: init,
test: {
toggleClasses,
TEMP_WATCHED_ICON_CLASS,
WATCHED_ICON_CLASS,
UNWATCHED_ICON_CLASS
}
};