/**
 * 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;
	} );
};