Make WordPress Core

Ticket #38947: 38947.patch

File 38947.patch, 4.0 KB (added by nikeo, 8 years ago)
  • src/wp-includes/js/customize-base.js

    diff --git a/src/wp-includes/js/customize-base.js b/src/wp-includes/js/customize-base.js
    index a1528de4f..53790909a 100644
    a b window.wp = window.wp || {}; 
    203203                 * Set the value and trigger all bound callbacks.
    204204                 *
    205205                 * @param {object} to New value.
     206     * @param {object} set of optional arguments when setting the value
    206207                 */
    207                 set: function( to ) {
    208                         var from = this._value;
     208                set: function( to, args ) {
     209                        var from = this._value, self = this;
    209210
    210211                        to = this._setter.apply( this, arguments );
    211212                        to = this.validate( to );
     213      args = _.extend( { silent : false }, _.isObject( args ) ? args : {} );
    212214
    213215                        // Bail if the sanitized value is null or unchanged.
    214216                        if ( null === to || _.isEqual( from, to ) ) {
    window.wp = window.wp || {}; 
    217219
    218220                        this._value = to;
    219221                        this._dirty = true;
     222      if ( args.silent ) {
     223        return this;
     224      }
    220225
    221226                        this.callbacks.fireWith( this, [ to, from ] );
     227      if ( this.topics ) {
     228        _.each( self.topics, function( _cbs ){
     229            _cbs.fireWith( self, [ to, from ] );
     230        });
     231      }
    222232
    223233                        return this;
    224234                },
    window.wp = window.wp || {}; 
    246256                        return value;
    247257                },
    248258
     259    /**
     260     * Trigger the bound callbacks of a specific topic, or trigger the anonymous callbacks
     261     *
     262     * @param {string} the topic id
     263     * @param {to} the optional new value
     264     * @param {from} the optional previous value
     265     */
     266    trigger: function( id, to, from ) {
     267      to = to || this();
     268      from = from || this();
     269      if ( this.topics && this.topics[ id ] ) {
     270        this.topics[ id ].fireWith( this, [ to, from ] );
     271      } else {
     272        this.callbacks.fireWith( this, [ to, from ] );
     273      }
     274      return this;
     275    },
     276
    249277                /**
    250                  * Bind a function to be invoked whenever the value changes.
    251                  *
    252                  * @param {...Function} A function, or multiple functions, to add to the callback stack.
    253                  */
    254                 bind: function() {
    255                         this.callbacks.add.apply( this.callbacks, arguments );
    256                         return this;
    257                 },
     278     * Bind a function to be invoked whenever the value changes.
     279     * @param {string} the optional id of the callbacks topic
     280     * @param {...Function} A function, or multiple functions, to add to the callback stack.
     281     */
     282    bind: function( id ) {
     283      if ( _.isFunction( id ) ) {
     284        this.callbacks.add.apply( this.callbacks, arguments );
     285      } else {
     286        this.topics = this.topics || {};
     287        this.topics[ id ] = this.topics[ id ] || $.Callbacks();
     288        this.topics[ id ].add.apply( this.topics[ id ], slice.call( arguments, 1 ) );
     289      }
     290      return this;
     291    },
    258292
    259293                /**
    260                  * Unbind a previously bound function.
    261                  *
    262                  * @param {...Function} A function, or multiple functions, to remove from the callback stack.
    263                  */
    264                 unbind: function() {
    265                         this.callbacks.remove.apply( this.callbacks, arguments );
    266                         return this;
    267                 },
     294     * Unbind a previously bound function.
     295     *
     296     * @param {string} the optional id of the callbacks topic
     297     * @param {...Function} A function, or multiple functions, to remove from the callback stack.
     298     */
     299    unbind: function( id ) {
     300      if ( _.isFunction( id ) ) {
     301        this.callbacks.remove.apply( this.callbacks, arguments );
     302      } else if ( this.topics && this.topics[ id ] ) {
     303        this.topics[ id ].remove.apply( this.topics[ id ], slice.call( arguments, 1 ) );
     304      }
     305      return this;
     306    },
     307
     308    /**
     309     * Unbind all previously bound function of a callbacks topic if specified
     310     * Or unbind all functions if no topic is specified
     311     *
     312     * @param {string} optional topic id
     313     */
     314    unbindAll: function( id ) {
     315      if ( this.topics && this.topics[ id ] ) {
     316        this.topics[ id ] = $.Callbacks();
     317      } else if ( this.topics ) {
     318        this.topics = {};
     319      } else {
     320        this.callbacks = $.Callbacks();
     321      }
     322      return this;
     323    },
    268324
    269325                link: function() { // values*
    270326                        var set = this.set;