],
'targets' => [ 'mobile', 'desktop' ],
],
- 'jquery.checkboxShiftClick' => [
- 'deprecated' => 'Please use "mediawiki.page.ready" instead.',
- 'dependencies' => [
- 'mediawiki.page.ready',
- ],
- 'targets' => [ 'desktop', 'mobile' ],
- ],
'jquery.chosen' => [
'scripts' => 'resources/lib/jquery.chosen/chosen.jquery.js',
'styles' => 'resources/lib/jquery.chosen/chosen.css',
]
],
'mediawiki.page.ready' => [
- 'scripts' => [
- 'resources/src/mediawiki.page.ready/checkboxShift.js',
- 'resources/src/mediawiki.page.ready/ready.js',
+ 'localBasePath' => "$IP/resources/src/mediawiki.page.ready",
+ 'remoteBasePath' => "$wgResourceBasePath/resources/src/mediawiki.page.ready",
+ 'packageFiles' => [
+ 'ready.js',
+ 'checkboxShift.js',
],
'dependencies' => [
'mediawiki.util',
/**
- * @class jQuery.plugin.checkboxShiftClick
+ * @private
+ * @class mw.plugin.pageready
*/
-( function () {
-
- /**
- * Enable checkboxes to be checked or unchecked in a row by clicking one,
- * holding shift and clicking another one.
- *
- * @return {jQuery}
- * @chainable
- */
- $.fn.checkboxShiftClick = function () {
- var prevCheckbox = null,
- $box = this;
- // When our boxes are clicked..
- $box.on( 'click', function ( e ) {
- // And one has been clicked before...
- if ( prevCheckbox !== null && e.shiftKey ) {
- // Check or uncheck this one and all in-between checkboxes,
- // except for disabled ones
- $box
- .slice(
- Math.min( $box.index( prevCheckbox ), $box.index( e.target ) ),
- Math.max( $box.index( prevCheckbox ), $box.index( e.target ) ) + 1
- )
- .filter( function () {
- return !this.disabled;
- } )
- .prop( 'checked', !!e.target.checked );
- }
- // Either way, update the prevCheckbox variable to the one clicked now
- prevCheckbox = e.target;
- } );
- return $box;
- };
-
- /**
- * @class jQuery
- * @mixins jQuery.plugin.checkboxShiftClick
- */
-
-}() );
+/**
+ * Enable checkboxes to be checked or unchecked in a row by clicking one,
+ * holding shift and clicking another one.
+ *
+ * @method checkboxShift
+ * @param {jQuery} $box
+ */
+module.exports = function ( $box ) {
+ var prev;
+ // When our boxes are clicked..
+ $box.on( 'click', function ( 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;
+ } )
+ .prop( 'checked', e.target.checked );
+ }
+ // Either way, remember this as the last clicked one
+ prev = e.target;
+ } );
+};
-( function () {
- mw.hook( 'wikipage.content' ).add( function ( $content ) {
- var $sortable, $collapsible;
+var checkboxShift = require( './checkboxShift.js' );
+mw.hook( 'wikipage.content' ).add( function ( $content ) {
+ var $sortable, $collapsible;
- $collapsible = $content.find( '.mw-collapsible' );
- if ( $collapsible.length ) {
- // Preloaded by Skin::getDefaultModules()
- mw.loader.using( 'jquery.makeCollapsible', function () {
- $collapsible.makeCollapsible();
- } );
- }
+ $collapsible = $content.find( '.mw-collapsible' );
+ if ( $collapsible.length ) {
+ // Preloaded by Skin::getDefaultModules()
+ mw.loader.using( 'jquery.makeCollapsible', function () {
+ $collapsible.makeCollapsible();
+ } );
+ }
- $sortable = $content.find( 'table.sortable' );
- if ( $sortable.length ) {
- // Preloaded by Skin::getDefaultModules()
- mw.loader.using( 'jquery.tablesorter', function () {
- $sortable.tablesorter();
- } );
- }
+ $sortable = $content.find( 'table.sortable' );
+ if ( $sortable.length ) {
+ // Preloaded by Skin::getDefaultModules()
+ mw.loader.using( 'jquery.tablesorter', function () {
+ $sortable.tablesorter();
+ } );
+ }
- // Run jquery.checkboxShiftClick
- $content.find( 'input[type="checkbox"]:not(.noshiftselect)' ).checkboxShiftClick();
- } );
+ checkboxShift( $content.find( 'input[type="checkbox"]:not(.noshiftselect)' ) );
+} );
- // Things outside the wikipage content
- $( function () {
- var $nodes;
+// Things outside the wikipage content
+$( function () {
+ var $nodes;
- // Add accesskey hints to the tooltips
- $( '[accesskey]' ).updateTooltipAccessKeys();
+ // Add accesskey hints to the tooltips
+ $( '[accesskey]' ).updateTooltipAccessKeys();
- $nodes = $( '.catlinks[data-mw="interface"]' );
- if ( $nodes.length ) {
- /**
- * Fired when categories are being added to the DOM
- *
- * It is encouraged to fire it before the main DOM is changed (when $content
- * is still detached). However, this order is not defined either way, so you
- * should only rely on $content itself.
- *
- * This includes the ready event on a page load (including post-edit loads)
- * and when content has been previewed with LivePreview.
- *
- * @event wikipage_categories
- * @member mw.hook
- * @param {jQuery} $content The most appropriate element containing the content,
- * such as .catlinks
- */
- mw.hook( 'wikipage.categories' ).fire( $nodes );
- }
+ $nodes = $( '.catlinks[data-mw="interface"]' );
+ if ( $nodes.length ) {
+ /**
+ * Fired when categories are being added to the DOM
+ *
+ * It is encouraged to fire it before the main DOM is changed (when $content
+ * is still detached). However, this order is not defined either way, so you
+ * should only rely on $content itself.
+ *
+ * This includes the ready event on a page load (including post-edit loads)
+ * and when content has been previewed with LivePreview.
+ *
+ * @event wikipage_categories
+ * @member mw.hook
+ * @param {jQuery} $content The most appropriate element containing the content,
+ * such as .catlinks
+ */
+ mw.hook( 'wikipage.categories' ).fire( $nodes );
+ }
- $( '#t-print a' ).on( 'click', function ( e ) {
- window.print();
- e.preventDefault();
- } );
-
- // Turn logout to a POST action
- $( '#pt-logout a' ).on( 'click', function ( e ) {
- var api = new mw.Api(),
- returnUrl = $( '#pt-logout a' ).attr( 'href' );
- mw.notify(
- mw.message( 'logging-out-notify' ),
- { tag: 'logout', autoHide: false }
- );
- api.postWithToken( 'csrf', {
- action: 'logout'
- } ).then(
- function () {
- location.href = returnUrl;
- },
- function ( e ) {
- mw.notify(
- mw.message( 'logout-failed', e ),
- { type: 'error', tag: 'logout', autoHide: false }
- );
- }
- );
- e.preventDefault();
- } );
+ $( '#t-print a' ).on( 'click', function ( e ) {
+ window.print();
+ e.preventDefault();
} );
-}() );
+ // Turn logout to a POST action
+ $( '#pt-logout a' ).on( 'click', function ( e ) {
+ var api = new mw.Api(),
+ returnUrl = $( '#pt-logout a' ).attr( 'href' );
+ mw.notify(
+ mw.message( 'logging-out-notify' ),
+ { tag: 'logout', autoHide: false }
+ );
+ api.postWithToken( 'csrf', {
+ action: 'logout'
+ } ).then(
+ function () {
+ location.href = returnUrl;
+ },
+ function ( e ) {
+ mw.notify(
+ mw.message( 'logout-failed', e ),
+ { type: 'error', tag: 'logout', autoHide: false }
+ );
+ }
+ );
+ e.preventDefault();
+ } );
+} );