summaryrefslogtreecommitdiff
path: root/www/wiki/resources/src/mediawiki.special/mediawiki.special.block.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/resources/src/mediawiki.special/mediawiki.special.block.js')
-rw-r--r--www/wiki/resources/src/mediawiki.special/mediawiki.special.block.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/www/wiki/resources/src/mediawiki.special/mediawiki.special.block.js b/www/wiki/resources/src/mediawiki.special/mediawiki.special.block.js
new file mode 100644
index 00000000..ba931951
--- /dev/null
+++ b/www/wiki/resources/src/mediawiki.special/mediawiki.special.block.js
@@ -0,0 +1,61 @@
+/*!
+ * JavaScript for Special:Block
+ */
+( function ( mw, $ ) {
+ // Like OO.ui.infuse(), but if the element doesn't exist, return null instead of throwing an exception.
+ function infuseOrNull( elem ) {
+ try {
+ return OO.ui.infuse( elem );
+ } catch ( er ) {
+ return null;
+ }
+ }
+
+ $( function () {
+ // This code is also loaded on the "block succeeded" page where there is no form,
+ // so username and expiry fields might also be missing.
+ var blockTargetWidget = infuseOrNull( 'mw-bi-target' ),
+ anonOnlyField = infuseOrNull( $( '#mw-input-wpHardBlock' ).closest( '.oo-ui-fieldLayout' ) ),
+ enableAutoblockField = infuseOrNull( $( '#mw-input-wpAutoBlock' ).closest( '.oo-ui-fieldLayout' ) ),
+ hideUserField = infuseOrNull( $( '#mw-input-wpHideUser' ).closest( '.oo-ui-fieldLayout' ) ),
+ watchUserField = infuseOrNull( $( '#mw-input-wpWatch' ).closest( '.oo-ui-fieldLayout' ) ),
+ // mw.widgets.SelectWithInputWidget
+ expiryWidget = infuseOrNull( 'mw-input-wpExpiry' );
+
+ function updateBlockOptions() {
+ var blocktarget = blockTargetWidget.getValue().trim(),
+ isEmpty = blocktarget === '',
+ isIp = mw.util.isIPAddress( blocktarget, true ),
+ isIpRange = isIp && blocktarget.match( /\/\d+$/ ),
+ isNonEmptyIp = isIp && !isEmpty,
+ expiryValue = expiryWidget.dropdowninput.getValue(),
+ // infinityValues are the values the SpecialBlock class accepts as infinity (sf. wfIsInfinity)
+ infinityValues = [ 'infinite', 'indefinite', 'infinity', 'never' ],
+ isIndefinite = infinityValues.indexOf( expiryValue ) !== -1 ||
+ ( expiryValue === 'other' && infinityValues.indexOf( expiryWidget.textinput.getValue() ) !== -1 );
+
+ if ( enableAutoblockField ) {
+ enableAutoblockField.toggle( !( isNonEmptyIp ) );
+ }
+ if ( hideUserField ) {
+ hideUserField.toggle( !( isNonEmptyIp || !isIndefinite ) );
+ }
+ if ( anonOnlyField ) {
+ anonOnlyField.toggle( !( !isIp && !isEmpty ) );
+ }
+ if ( watchUserField ) {
+ watchUserField.toggle( !( isIpRange && !isEmpty ) );
+ }
+ }
+
+ if ( blockTargetWidget ) {
+ // Bind functions so they're checked whenever stuff changes
+ blockTargetWidget.on( 'change', updateBlockOptions );
+ expiryWidget.dropdowninput.on( 'change', updateBlockOptions );
+ expiryWidget.textinput.on( 'change', updateBlockOptions );
+
+ // Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
+ updateBlockOptions();
+ }
+ } );
+}( mediaWiki, jQuery ) );