/**
* Enable checkboxes to be checked or unchecked in a row by clicking one,
* holding shift and clicking another one.
*
* @method checkboxShift
* @memberof module:mediawiki.page.ready
* @param {jQuery} $box
*/
module.exports = function ( $box ) {
let prev;
// When our boxes are clicked..
$box.on( 'click', ( e ) => {
// And one has been clicked before...
if ( prev && e.shiftKey ) {
// Check or uncheck this one and all in-between checkboxes,
// except for disabled ones
$box
.slice(
Math.min( $box.index( prev ), $box.index( e.target ) ),
Math.max( $box.index( prev ), $box.index( e.target ) ) + 1
)
.filter( function () {
return !this.disabled && this.checked !== e.target.checked;
} )
.prop( 'checked', e.target.checked )
// Since the state change is a consequence of direct user action,
// fire the 'change' event (see T313077).
.trigger( 'change' );
}
// Either way, remember this as the last clicked one
prev = e.target;
} );
};