X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=resources%2Fsrc%2Fmediawiki.special.block.js;h=d1bada0c18081e1fcf772c0011110701704c6f2c;hb=c06bda1bed7db0312b71056ec666c00adeb45290;hp=58657dbd3e47f1736dad01a230b012817f5289d4;hpb=0cc1e921cb2714dbda4650b86f9f159bfe16e3b9;p=lhc%2Fweb%2Fwiklou.git diff --git a/resources/src/mediawiki.special.block.js b/resources/src/mediawiki.special.block.js index 58657dbd3e..d1bada0c18 100644 --- a/resources/src/mediawiki.special.block.js +++ b/resources/src/mediawiki.special.block.js @@ -16,6 +16,31 @@ pageRestrictionsWidget, namespaceRestrictionsWidget, createAccountWidget, data, enablePartialBlocks, blockAllowsUTEdit, userChangedCreateAccount, updatingBlockOptions; + function preserveSelectedStateOnDisable( widget ) { + var widgetWasSelected; + + if ( !widget ) { + return; + } + + // 'disable' event fires if disabled state changes + widget.on( 'disable', function ( disabled ) { + if ( disabled ) { + // Disabling an enabled widget + // Save selected and set selected to false + widgetWasSelected = widget.isSelected(); + widget.setSelected( false ); + } else { + // Enabling a disabled widget + // Set selected to the saved value + if ( widgetWasSelected !== undefined ) { + widget.setSelected( widgetWasSelected ); + } + widgetWasSelected = undefined; + } + } ); + } + function updateBlockOptions() { var blocktarget = blockTargetWidget.getValue().trim(), isEmpty = blocktarget === '', @@ -31,27 +56,15 @@ isSitewide = editingIsSelected && editingRestrictionValue === 'sitewide'; enableAutoblockWidget.setDisabled( isNonEmptyIp ); - if ( enableAutoblockWidget.isDisabled() ) { - enableAutoblockWidget.setSelected( false ); - } anonOnlyWidget.setDisabled( !isIp && !isEmpty ); - if ( anonOnlyWidget.isDisabled() ) { - anonOnlyWidget.setSelected( false ); - } if ( hideUserWidget ) { hideUserWidget.setDisabled( isNonEmptyIp || !isIndefinite || !isSitewide ); - if ( hideUserWidget.isDisabled() ) { - hideUserWidget.setSelected( false ); - } } if ( watchUserWidget ) { watchUserWidget.setDisabled( isIpRange && !isEmpty ); - if ( watchUserWidget.isDisabled() ) { - watchUserWidget.setSelected( false ); - } } if ( enablePartialBlocks ) { @@ -59,14 +72,17 @@ pageRestrictionsWidget.setDisabled( !editingIsSelected || isSitewide ); namespaceRestrictionsWidget.setDisabled( !editingIsSelected || isSitewide ); if ( blockAllowsUTEdit ) { - // This option is disabled for partial blocks unless a namespace restriction - // for the User_talk namespace is in place. + // Disable for partial blocks, unless the block is against the User_talk namespace preventTalkPageEditWidget.setDisabled( - editingIsSelected && - editingRestrictionValue === 'partial' && - namespaceRestrictionsWidget.getValue().indexOf( - String( mw.config.get( 'wgNamespaceIds' ).user_talk ) - ) === -1 + // Partial block that doesn't block editing + !editingIsSelected || + // Partial block that blocks editing and doesn't block the User_talk namespace + ( + editingRestrictionValue === 'partial' && + namespaceRestrictionsWidget.getValue().indexOf( + String( mw.config.get( 'wgNamespaceIds' ).user_talk ) + ) === -1 + ) ); } } @@ -121,6 +137,13 @@ preventTalkPageEditWidget = infuseIfExists( $( '#mw-input-wpDisableUTEdit' ) ); } + // When disabling checkboxes, preserve their selected state in case they are re-enabled + preserveSelectedStateOnDisable( enableAutoblockWidget ); + preserveSelectedStateOnDisable( anonOnlyWidget ); + preserveSelectedStateOnDisable( watchUserWidget ); + preserveSelectedStateOnDisable( hideUserWidget ); + preserveSelectedStateOnDisable( preventTalkPageEditWidget ); + updateBlockOptions(); } } );