Merge "Remember checkbox state on Special:Block if checkbox disabled"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 17 Jul 2019 20:44:38 +0000 (20:44 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 17 Jul 2019 20:44:38 +0000 (20:44 +0000)
resources/src/mediawiki.special.block.js

index 6d003aa..d1bada0 100644 (file)
                        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 === '',
                                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 ) {
                                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();
                }
        } );