Make WordPress Core

Ticket #32894: 32894-with-32781.diff

File 32894-with-32781.diff, 4.4 KB (added by westonruter, 9 years ago)
  • src/wp-includes/class-wp-customize-nav-menus.php

    diff --git src/wp-includes/class-wp-customize-nav-menus.php src/wp-includes/class-wp-customize-nav-menus.php
    index e7b7e0f..c13ed93 100644
    final class WP_Customize_Nav_Menus { 
    771771                );
    772772                $args['can_partial_refresh'] = $can_partial_refresh;
    773773
     774                $hashed_args = $args;
     775
    774776                if ( ! $can_partial_refresh ) {
    775                         $args['fallback_cb'] = '';
    776                         $args['walker'] = '';
     777                        $hashed_args['fallback_cb'] = '';
     778                        $hashed_args['walker'] = '';
    777779                }
    778780
    779                 ksort( $args );
    780                 $args['args_hash'] = $this->hash_nav_menu_args( $args );
     781                ksort( $hashed_args );
     782                $hashed_args['args_hash'] = $this->hash_nav_menu_args( $hashed_args );
    781783
    782                 $this->preview_nav_menu_instance_args[ $this->preview_nav_menu_instance_number ] = $args;
     784                $this->preview_nav_menu_instance_args[ $this->preview_nav_menu_instance_number ] = $hashed_args;
    783785                return $args;
    784786        }
    785787
  • src/wp-includes/js/customize-preview-nav-menus.js

    diff --git src/wp-includes/js/customize-preview-nav-menus.js src/wp-includes/js/customize-preview-nav-menus.js
    index 2b6c994..ce962d6 100644
    wp.customize.menusPreview = ( function( $, api ) { 
    99                renderNonceValue: null,
    1010                renderNoncePostKey: null,
    1111                previewCustomizeNonce: null,
    12                 previewReady: $.Deferred(),
    1312                requestUri: '/',
    1413                theme: {
    1514                        active: false,
    wp.customize.menusPreview = ( function( $, api ) { 
    2019        };
    2120
    2221        api.bind( 'preview-ready', function() {
    23                 self.previewReady.resolve();
    24         } );
    25         self.previewReady.done( function() {
    26                 self.init();
     22                api.preview.bind( 'active', function() {
     23                        self.init();
     24                } );
    2725        } );
    2826
    2927        /**
    wp.customize.menusPreview = ( function( $, api ) { 
    3634                        $.extend( self, _wpCustomizePreviewNavMenusExports );
    3735                }
    3836
    39                 self.previewReady.done( function() {
    40                         api.each( function( setting, id ) {
    41                                 setting.id = id;
    42                                 self.bindListener( setting );
    43                         } );
     37                api.each( function( setting, id ) {
     38                        setting.id = id;
     39                        self.bindListener( setting );
     40                } );
    4441
    45                         api.preview.bind( 'setting', function( args ) {
    46                                 var id, value, setting;
    47                                 args = args.slice();
    48                                 id = args.shift();
    49                                 value = args.shift();
    50                                 if ( ! api.has( id ) ) {
    51                                         // Currently customize-preview.js is not creating settings for dynamically-created settings in the pane; so we have to do it
    52                                         setting = api.create( id, value ); // @todo This should be in core
    53                                         setting.id = id;
    54                                         if ( self.bindListener( setting ) ) {
    55                                                 setting.callbacks.fireWith( setting, [ setting(), setting() ] );
    56                                         }
     42                api.preview.bind( 'setting', function( args ) {
     43                        var id, value, setting;
     44                        args = args.slice();
     45                        id = args.shift();
     46                        value = args.shift();
     47                        if ( ! api.has( id ) ) {
     48                                // Currently customize-preview.js is not creating settings for dynamically-created settings in the pane; so we have to do it
     49                                setting = api.create( id, value ); // @todo This should be in core
     50                                setting.id = id;
     51                                if ( self.bindListener( setting ) ) {
     52                                        setting.callbacks.fireWith( setting, [ setting(), null ] );
    5753                                }
    58                         } );
     54                        }
    5955                } );
    6056        };
    6157
  • tests/phpunit/tests/customize/nav-menus.php

    diff --git tests/phpunit/tests/customize/nav-menus.php tests/phpunit/tests/customize/nav-menus.php
    index 7c0ee3d..616bf0b 100644
    class Test_WP_Customize_Nav_Menus extends WP_UnitTestCase { 
    358358
    359359                $expected = array(
    360360                        'echo',
    361                         'args_hash',
    362361                        'can_partial_refresh',
    363362                        'fallback_cb',
    364363                        'instance_number',
    class Test_WP_Customize_Nav_Menus extends WP_UnitTestCase { 
    370369                        'walker'          => new Walker_Nav_Menu(),
    371370                ) );
    372371                $this->assertEqualSets( $expected, array_keys( $results ) );
    373                 $this->assertEquals( '', $results['fallback_cb'] );
    374                 $this->assertEquals( '', $results['walker'] );
     372                $this->assertEquals( 'wp_page_menu', $results['fallback_cb'] );
    375373                $this->assertEquals( 0, $results['can_partial_refresh'] );
     374
     375                $this->assertNotEmpty( $menus->preview_nav_menu_instance_args[ $results['instance_number'] ] );
     376                $preview_nav_menu_instance_args = $menus->preview_nav_menu_instance_args[ $results['instance_number'] ];
     377                $this->assertEquals( '', $preview_nav_menu_instance_args['fallback_cb'] );
     378                $this->assertEquals( '', $preview_nav_menu_instance_args['walker'] );
     379                $this->assertNotEmpty( $preview_nav_menu_instance_args['args_hash'] );
    376380        }
    377381
    378382        /**