diff options
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.js | 61 |
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 ) ); |