Users with the hideuser right have an extra checkmark on Special:Block
to hide user, however this functionality can only be used on registered
users (not IPs) and only if a block is set to never expire. With this js
enhancement, hide the "hideuser" checkbox and label if the block time is
not set to infinite (either as selected from the dropdown or written
into the "other" input box).
Attribution to meta.wikimedia.org/wiki/User:Margott who uploaded a
draft for this patch on the task a while ago.
Bug: T133036
Change-Id: Ia8c3e25d923e1df57d5afd69e9de3d6f2543f628
* @since 1.25
*/
function wfIsInfinity( $str ) {
* @since 1.25
*/
function wfIsInfinity( $str ) {
+ // These are hardcoded elsewhere in MediaWiki (e.g. mediawiki.special.block.js).
$infinityValues = [ 'infinite', 'indefinite', 'infinity', 'never' ];
return in_array( $str, $infinityValues );
}
$infinityValues = [ 'infinite', 'indefinite', 'infinity', 'never' ];
return in_array( $str, $infinityValues );
}
$anonOnlyRow = $( '#mw-input-wpHardBlock' ).closest( 'tr' ),
$enableAutoblockRow = $( '#mw-input-wpAutoBlock' ).closest( 'tr' ),
$hideUser = $( '#mw-input-wpHideUser' ).closest( 'tr' ),
$anonOnlyRow = $( '#mw-input-wpHardBlock' ).closest( 'tr' ),
$enableAutoblockRow = $( '#mw-input-wpAutoBlock' ).closest( 'tr' ),
$hideUser = $( '#mw-input-wpHideUser' ).closest( 'tr' ),
- $watchUser = $( '#mw-input-wpWatch' ).closest( 'tr' );
+ $watchUser = $( '#mw-input-wpWatch' ).closest( 'tr' ),
+ $expiry = $( '#mw-input-wpExpiry' ),
+ $otherExpiry = $( '#mw-input-wpExpiry-other' );
function updateBlockOptions( instant ) {
var blocktarget = $.trim( $blockTarget.val() ),
isEmpty = blocktarget === '',
isIp = mw.util.isIPAddress( blocktarget, true ),
function updateBlockOptions( instant ) {
var blocktarget = $.trim( $blockTarget.val() ),
isEmpty = blocktarget === '',
isIp = mw.util.isIPAddress( blocktarget, true ),
- isIpRange = isIp && blocktarget.match( /\/\d+$/ );
+ isIpRange = isIp && blocktarget.match( /\/\d+$/ ),
+ isNonEmptyIp = isIp && !isEmpty,
+ expiryValue = $expiry.val(),
+ // infinityValues are the values the SpecialBlock class accepts as infinity (sf. wfIsInfinity)
+ infinityValues = [ 'infinite', 'indefinite', 'infinity', 'never' ],
+ isIndefinite = $.inArray( expiryValue, infinityValues ) !== -1 ||
+ ( expiryValue === 'other' && $.inArray( $otherExpiry.val(), infinityValues ) !== -1 );
- if ( isIp && !isEmpty ) {
$enableAutoblockRow.goOut( instant );
$enableAutoblockRow.goOut( instant );
- $hideUser.goOut( instant );
} else {
$enableAutoblockRow.goIn( instant );
} else {
$enableAutoblockRow.goIn( instant );
+ }
+ if ( isNonEmptyIp || !isIndefinite ) {
+ $hideUser.goOut( instant );
+ } else {
$hideUser.goIn( instant );
}
if ( !isIp && !isEmpty ) {
$hideUser.goIn( instant );
}
if ( !isIp && !isEmpty ) {
if ( $blockTarget.length ) {
// Bind functions so they're checked whenever stuff changes
$blockTarget.keyup( updateBlockOptions );
if ( $blockTarget.length ) {
// Bind functions so they're checked whenever stuff changes
$blockTarget.keyup( updateBlockOptions );
+ $expiry.change( updateBlockOptions );
+ $otherExpiry.keyup( updateBlockOptions );
// Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
updateBlockOptions( /* instant= */ true );
// Call them now to set initial state (ie. Special:Block/Foobar?wpBlockExpiry=2+hours)
updateBlockOptions( /* instant= */ true );