Make WordPress Core

Ticket #24859: 24859.2.diff

File 24859.2.diff, 3.1 KB (added by kadamwhite, 11 years ago)

Alter patch to fire events on media object itself, clean up events when view is removed, and remove view's awareness of the ajax promise

  • src/wp-includes/js/media-models.js

     
    3636
    3737        _.extend( media, { model: {}, view: {}, controller: {}, frames: {} });
    3838
     39        _.extend( media, Backbone.Events );
     40
    3941        // Link any localized strings.
    4042        l10n = media.model.l10n = typeof _wpMediaModelsL10n === 'undefined' ? {} : _wpMediaModelsL10n;
    4143
     
    9092                 * Sends an XHR request to WordPress.
    9193                 * See wp.ajax.send() in `wp-includes/js/wp-util.js`.
    9294                 */
    93                 ajax: wp.ajax.send,
     95                ajax: function( action, options ) {
     96                        if ( _.isObject( action ) ) {
     97                                options = action;
     98                        }
    9499
     100                        var result = wp.ajax.send.apply( this, arguments );
     101
     102                        media.trigger( 'ajax:start', options );
     103
     104                        result.always(function() {
     105                                media.trigger( 'ajax:end', options );
     106                        });
     107
     108                        return result;
     109                },
     110
    95111                // Scales a set of dimensions to fit within bounding dimensions.
    96112                fit: function( dimensions ) {
    97113                        var width     = dimensions.width,
  • src/wp-includes/js/media-views.js

     
    32573257        media.view.AttachmentsBrowser = media.View.extend({
    32583258                tagName:   'div',
    32593259                className: 'attachments-browser',
     3260                spinnerCount: 0,
    32603261
    32613262                initialize: function() {
    32623263                        _.defaults( this.options, {
     
    32673268                                AttachmentView: media.view.Attachment.Library
    32683269                        });
    32693270
     3271                        media.on( 'ajax:start', function( options ) {
     3272                                this.spinnerCount += 1;
     3273                                this.updateSpinner( options );
     3274                        }, this);
     3275
     3276                        media.on( 'ajax:end', function( options ) {
     3277                                this.spinnerCount -= 1;
     3278                                this.updateSpinner( options );
     3279                        }, this);
     3280
    32703281                        this.createToolbar();
    32713282                        this.updateContent();
    32723283                        this.createSidebar();
     
    32743285                        this.collection.on( 'add remove reset', this.updateContent, this );
    32753286                },
    32763287
     3288                updateSpinner: function( options ) {
     3289                        var spinnerActions = ['query-attachments'];
     3290
     3291                        if ( _.indexOf(spinnerActions, options.data.action) < 0 ) {
     3292                                return;
     3293                        }
     3294
     3295                        if ( 0 < this.spinnerCount ) {
     3296                                this.toolbar.get('spinner').show();
     3297                        } else {
     3298                                this.toolbar.get('spinner').hide();
     3299                        }
     3300                },
     3301
    32773302                dispose: function() {
    32783303                        this.options.selection.off( null, null, this );
     3304                        media.off( null, null, this );
    32793305                        media.View.prototype.dispose.apply( this, arguments );
    32803306                        return this;
    32813307                },
     
    33033329                                }).render() );
    33043330                        }
    33053331
     3332                        this.toolbar.set( 'spinner', new media.view.Spinner({
     3333                                priority: -70
     3334                        }) );
     3335
    33063336                        if ( this.options.search ) {
    33073337                                this.toolbar.set( 'search', new media.view.Search({
    33083338                                        controller: this.controller,
     
    39633993                        this.$('img').attr( 'src', this.model.get('url') );
    39643994                }
    39653995        });
    3966 }(jQuery));
    3967  No newline at end of file
     3996
     3997        media.view.Spinner = media.View.extend({
     3998                tagName:   'span',
     3999                className: 'spinner',
     4000
     4001                show: function() {
     4002                        this.$el.show();
     4003                        return this;
     4004                },
     4005
     4006                hide: function() {
     4007                        this.$el.hide();
     4008                        return this;
     4009                }
     4010        });
     4011
     4012}(jQuery));