WordPress.org

Make WordPress Core

Ticket #5886: 5886.diff

File 5886.diff, 5.6 KB (added by mdawaffe, 7 years ago)
  • wp-includes/widgets.php

     
    608608                foreach ( $this_sidebar as $_widget_id ) { 
    609609                        if ( 'wp_widget_text' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) { 
    610610                                $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number']; 
    611                                 unset($options[$widget_number]); 
     611                                if ( !in_array( "text-$widget_number", $_POST['widget-id'] ) ) // the widget has been removed. 
     612                                        unset($options[$widget_number]); 
    612613                        } 
    613614                } 
    614615 
     
    743744                foreach ( $this_sidebar as $_widget_id ) { 
    744745                        if ( 'wp_widget_categories' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) { 
    745746                                $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number']; 
    746                                 unset($options[$widget_number]); 
     747                                if ( !in_array( "categories-$widget_number", $_POST['widget-id'] ) ) // the widget has been removed. 
     748                                        unset($options[$widget_number]); 
    747749                        } 
    748750                } 
    749751 
     
    11621164                foreach ( $this_sidebar as $_widget_id ) { 
    11631165                        if ( 'wp_widget_rss' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) { 
    11641166                                $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number']; 
    1165                                 unset($options[$widget_number]); 
     1167                                if ( !in_array( "rss-$widget_number", $_POST['widget-id'] ) ) // the widget has been removed. 
     1168                                        unset($options[$widget_number]); 
    11661169                        } 
    11671170                } 
    11681171 
     
    14501453                        // since widget ids aren't necessarily persistent across multiple updates 
    14511454                        if ( 'widget_many' == $wp_registered_widgets[$_widget_id]['callback'] && isset($wp_registered_widgets[$_widget_id]['params'][0]['number']) ) { 
    14521455                                $widget_number = $wp_registered_widgets[$_widget_id]['params'][0]['number']; 
    1453                                 unset($options[$widget_number]); 
     1456                                if ( !in_array( "many-$widget_number", $_POST['widget-id'] ) ) // the widget has been removed. "many-$widget_number" is "{id_base}-{widget_number} 
     1457                                        unset($options[$widget_number]); 
    14541458                        } 
    14551459                } 
    14561460 
  • wp-includes/script-loader.php

     
    181181                                'saveText' => attribute_escape(__('Save »')), 
    182182                                'confirmText' => __("Are you sure you want to delete the file '%title%'?\nClick ok to delete or cancel to go back.") 
    183183                        ) ); 
    184                         $this->add( 'admin-widgets', '/wp-admin/js/widgets.js', array( 'interface' ), '20080109' ); 
     184                        $this->add( 'admin-widgets', '/wp-admin/js/widgets.js', array( 'interface' ), '20080305' ); 
    185185                        $this->localize( 'admin-widgets', 'widgetsL10n', array( 
    186186                                'add' => __('Add'), 
    187187                                'edit' => __('Edit'), 
  • wp-admin/js/widgets.js

     
    44        var increment = 1; 
    55 
    66        // Open or close widget control form 
    7         var toggleWidget = function( li ) { 
     7        var toggleWidget = function( li, disableFields ) { 
    88                var width = li.find('input.widget-width').val(); 
    99 
    1010                // it seems IE chokes on these animations because of the positioning/floating 
    1111                var widgetAnim = $.browser.msie ? function() { 
    1212                        var t = $(this); 
    1313                        if ( t.is(':visible') ) { 
     14                                if ( disableFields ) { t.find( ':enabled' ).not( '[name="widget-id[]"]' ).attr( 'disabled', 'disabled' ); } 
    1415                                li.css( 'marginLeft', 0 ); 
    1516                                t.siblings('h4').children('a').text( widgetsL10n.edit ); 
    1617                        } else { 
     18                                t.find( ':disabled' ).attr( 'disabled', '' ); // always enable on open 
    1719                                if ( width > 250 ) 
    1820                                        li.css( 'marginLeft', ( width - 250 ) * -1 ); 
    1921                                t.siblings('h4').children('a').text( widgetsL10n.cancel ); 
     
    2325                        var t = $(this); 
    2426 
    2527                        if ( t.is(':visible') ) { 
     28                                if ( disableFields ) { t.find( ':enabled' ).not( '[name="widget-id[]"]' ).attr( 'disabled', 'disabled' ); } 
    2629                                if ( width > 250 ) 
    2730                                        li.animate( { marginLeft: 0 } ); 
    2831                                t.siblings('h4').children('a').text( widgetsL10n.edit ); 
    2932                        } else { 
     33                                t.find( ':disabled' ).attr( 'disabled', '' ); // always enable on open 
    3034                                if ( width > 250 ) 
    3135                                        li.animate( { marginLeft: ( width - 250 ) * -1 } ); 
    3236                                t.siblings('h4').children('a').text( widgetsL10n.cancel ); 
     
    3741                return li.children('div.widget-control').each( widgetAnim ).end(); 
    3842        }; 
    3943 
    40         // onclick for edit links 
     44        // onclick for edit/cancel links 
    4145        var editClick = function() { 
    4246                var q = wpAjax.unserialize( this.href ); 
    4347                // if link is in available widgets list, make sure it points to the current sidebar 
    4448                if ( ( q.sidebar && q.sidebar == $('#sidebar').val() ) || q.add ) { 
    4549                        var w = q.edit || q.add; 
    46                         toggleWidget( $('#current-sidebar .widget-control-list input[@name^="widget-id"][@value=' + w + ']').parents('li:first') ).blur(); 
     50                        toggleWidget( $('#current-sidebar .widget-control-list input[@name^="widget-id"][@value=' + w + ']').parents('li:first'), false ).blur(); 
    4751                        return false; 
    4852                } else if ( q.sidebar ) { // otherwise, redirect to correct page 
    4953                        return true; 
    5054                } 
    5155 
    5256                // If link is in current widgets list, just open the form 
    53                 toggleWidget( $(this).parents('li:first') ).blur(); 
     57                toggleWidget( $(this).parents('li:first'), true ).blur(); 
    5458                return false; 
    5559        }; 
    5660 
     
    9296 
    9397                // onclick for save links 
    9498                $('a.widget-control-save', context).click( function() { 
    95                         toggleWidget( $(this).parents('li:first') ).blur() 
     99                        toggleWidget( $(this).parents('li:first'), false ).blur() 
    96100                        return false; 
    97101                } ); 
    98102