mediawiki.page.ready: Convert to packageFiles, remove jquery.checkboxShiftClick
* Remove redundant closures around the two files. * Export checkboxShiftClick as a regular function. This jQuery plugin is not used anywhere in Wikimedia Gerrit, nor elsewhere indexed by Codesearch, nor anywhere on-wiki in User, Project or MediaWiki namespaces. As such, remove the deprecated module alias as well. Change-Id: I6bc41036829964080abf1ab0bbd306356bb8fe57
This commit is contained in:
parent
1490e9dac8
commit
97fffb3fd0
5 changed files with 116 additions and 127 deletions
|
|
@ -303,6 +303,8 @@ because of Phabricator reports.
|
|||
* mw.language.specialCharacters, deprecated in 1.33, has been removed.
|
||||
Use require( 'mediawiki.language.specialCharacters' ) instead.
|
||||
* The jquery.colorUtil module was removed. Use jquery.color instead.
|
||||
* The jquery.checkboxShiftClick module was removed. The functionality
|
||||
is provided by mediawiki.page.ready instead (T232688).
|
||||
* EditPage::submit(), deprecated in 1.29, has been removed. Use $this->edit()
|
||||
directly.
|
||||
* HTMLForm::getErrors(), deprecated in 1.28, has been removed. Use
|
||||
|
|
|
|||
|
|
@ -162,13 +162,6 @@ return [
|
|||
],
|
||||
'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',
|
||||
|
|
@ -1666,9 +1659,11 @@ return [
|
|||
]
|
||||
],
|
||||
'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',
|
||||
|
|
|
|||
5
resources/src/mediawiki.page.ready/.eslintrc.json
Normal file
5
resources/src/mediawiki.page.ready/.eslintrc.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"parserOptions": {
|
||||
"sourceType": "module"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,43 +1,33 @@
|
|||
/**
|
||||
* @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;
|
||||
} );
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,82 +1,79 @@
|
|||
( 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;
|
||||
|
||||
// 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 );
|
||||
}
|
||||
|
||||
$( '#t-print a' ).on( 'click', function ( e ) {
|
||||
window.print();
|
||||
e.preventDefault();
|
||||
} );
|
||||
|
||||
// Things outside the wikipage content
|
||||
$( function () {
|
||||
var $nodes;
|
||||
|
||||
// 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 );
|
||||
}
|
||||
|
||||
$( '#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();
|
||||
} );
|
||||
// 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();
|
||||
} );
|
||||
|
||||
}() );
|
||||
} );
|
||||
|
|
|
|||
Loading…
Reference in a new issue