Make WordPress Core

Changeset 36407


Ignore:
Timestamp:
01/26/2016 11:51:17 PM (11 years ago)
Author:
westonruter
Message:

Customizer: Improve parity between JS Setting models in preview with JS Setting models in pane.

  • Ensure that Setting Value objects in preview get initial _dirty flag set if values among POST data.
  • Upon saved event, send saved message to preview with the response to trigger saved event there.
  • Reset _dirty flag for all setting Value objects in preview upon saved.
  • Continue to create settings synced from pane even after initial bootstrap, and create them as dirty.
  • Ensure that id property is set for setting Value objects in preview.

See #27355.
Fixes #35616.

Location:
trunk/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/js/customize-controls.js

    r36388 r36407  
    33463346                                                } );
    33473347
     3348                                                api.previewer.send( 'saved', response );
     3349
    33483350                                                api.trigger( 'saved', response );
    33493351                                        } );
  • trunk/src/wp-includes/class-wp-customize-manager.php

    r36262 r36407  
    806806                        'activeSections' => array(),
    807807                        'activeControls' => array(),
     808                        '_dirty' => array_keys( $this->unsanitized_post_values() ),
    808809                );
    809810
  • trunk/src/wp-includes/js/customize-preview.js

    r36371 r36407  
    8585
    8686        $( function() {
     87                var bg, setValue;
     88
    8789                api.settings = window._wpCustomizeSettings;
    88                 if ( ! api.settings )
     90                if ( ! api.settings ) {
    8991                        return;
    90 
    91                 var bg;
     92                }
    9293
    9394                api.preview = new api.Preview({
    … …  
    9697                });
    9798
     99                /**
     100                 * Create/update a setting value.
     101                 *
     102                 * @param {string}  id            - Setting ID.
     103                 * @param {*}       value         - Setting value.
     104                 * @param {boolean} [createDirty] - Whether to create a setting as dirty. Defaults to false.
     105                 */
     106                setValue = function( id, value, createDirty ) {
     107                        var setting = api( id );
     108                        if ( setting ) {
     109                                setting.set( value );
     110                        } else {
     111                                createDirty = createDirty || false;
     112                                setting = api.create( id, value, {
     113                                        id: id
     114                                } );
     115
     116                                // Mark dynamically-created settings as dirty so they will get posted.
     117                                if ( createDirty ) {
     118                                        setting._dirty = true;
     119                                }
     120                        }
     121                };
     122
    98123                api.preview.bind( 'settings', function( values ) {
    99                         $.each( values, function( id, value ) {
    100                                 if ( api.has( id ) )
    101                                         api( id ).set( value );
    102                                 else
    103                                         api.create( id, value );
    104                         });
     124                        $.each( values, setValue );
    105125                });
    106126
    107127                api.preview.trigger( 'settings', api.settings.values );
    108128
     129                $.each( api.settings._dirty, function( i, id ) {
     130                        var setting = api( id );
     131                        if ( setting ) {
     132                                setting._dirty = true;
     133                        }
     134                } );
     135
    109136                api.preview.bind( 'setting', function( args ) {
    110                         var value;
    111 
    112                         args = args.slice();
    113 
    114                         if ( value = api( args.shift() ) )
    115                                 value.set.apply( value, args );
     137                        var createDirty = true;
     138                        setValue.apply( null, args.concat( createDirty ) );
    116139                });
    117140
    … …  
    130153                        api.preview.send( 'documentTitle', document.title );
    131154                });
     155
     156                api.preview.bind( 'saved', function( response ) {
     157                        api.trigger( 'saved', response );
     158                } );
     159
     160                api.bind( 'saved', function() {
     161                        api.each( function( setting ) {
     162                                setting._dirty = false;
     163                        } );
     164                } );
    132165
    133166                /*
Note: See TracChangeset for help on using the changeset viewer.