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