WordPress.org

Make WordPress Core

Changeset 36407


Ignore:
Timestamp:
01/26/2016 11:51:17 PM (5 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.