WordPress.org

Make WordPress Core

Ticket #22656: 22656.2.diff

File 22656.2.diff, 3.6 KB (added by koopersmith, 5 years ago)
  • wp-includes/js/media-models.js

     
    490490                },
    491491
    492492                more: function( options ) {
    493                         if ( this.mirroring && this.mirroring.more )
    494                                 return this.mirroring.more( options );
    495                         return $.Deferred().resolve().promise();
     493                        var deferred = $.Deferred(),
     494                                mirroring = this.mirroring,
     495                                attachments = this;
     496
     497                        if ( ! mirroring || ! mirroring.more )
     498                                return deferred.resolveWith( this ).promise();
     499
     500                        // If we're mirroring another collection, forward `more` to
     501                        // the mirrored collection. Account for a race condition by
     502                        // checking if we're still mirroring that collection when
     503                        // the request resolves.
     504                        mirroring.more( options ).done( function() {
     505                                if ( this === attachments.mirroring )
     506                                        deferred.resolveWith( this );
     507                        });
     508
     509                        return deferred.promise();
    496510                },
    497511
     512                hasMore: function() {
     513                        return this.mirroring ? this.mirroring.hasMore() : false;
     514                },
     515
    498516                parse: function( resp, xhr ) {
    499517                        return _.map( resp, function( attrs ) {
    500518                                var attachment = Attachment.get( attrs.id );
     
    583601                        options = options || {};
    584602                        Attachments.prototype.initialize.apply( this, arguments );
    585603
    586                         this.args    = options.args;
    587                         this.hasMore = true;
    588                         this.created = new Date();
     604                        this.args     = options.args;
     605                        this._hasMore = true;
     606                        this.created  = new Date();
    589607
    590608                        this.filters.order = function( attachment ) {
    591609                                var orderby = this.props.get('orderby'),
     
    627645                                this.observe( wp.Uploader.queue );
    628646                },
    629647
     648                hasMore: function() {
     649                        return this._hasMore;
     650                },
     651
    630652                more: function( options ) {
    631653                        var query = this;
    632654
    633655                        if ( this._more && 'pending' === this._more.state() )
    634656                                return this._more;
    635657
    636                         if ( ! this.hasMore )
    637                                 return $.Deferred().resolve().promise();
     658                        if ( ! this.hasMore() )
     659                                return $.Deferred().resolveWith( this ).promise();
    638660
    639661                        options = options || {};
    640662                        options.add = true;
    641663
    642664                        return this._more = this.fetch( options ).done( function( resp ) {
    643665                                if ( _.isEmpty( resp ) || -1 === this.args.posts_per_page || resp.length < this.args.posts_per_page )
    644                                         query.hasMore = false;
     666                                        query._hasMore = false;
    645667                        });
    646668                },
    647669
  • wp-includes/js/media-views.js

     
    28212821                        if ( ! this.$el.is(':visible') )
    28222822                                return;
    28232823
    2824                         if ( this.el.scrollHeight < this.el.scrollTop + ( this.el.clientHeight * this.options.refreshThreshold ) ) {
     2824                        if ( this.collection.hasMore() && this.el.scrollHeight < this.el.scrollTop + ( this.el.clientHeight * this.options.refreshThreshold ) ) {
    28252825                                this.collection.more().done( this.scroll );
    28262826                        }
    28272827                }
     
    30713071                        }
    30723072                },
    30733073
     3074                removeContent: function() {
     3075                        _.each(['attachments','uploader'], function( key ) {
     3076                                if ( this[ key ] ) {
     3077                                        this[ key ].remove();
     3078                                        delete this[ key ];
     3079                                }
     3080                        }, this );
     3081                },
     3082
    30743083                createUploader: function() {
    3075                         if ( this.attachments ) {
    3076                                 this.attachments.remove();
    3077                                 delete this.attachments;
    3078                         }
     3084                        this.removeContent();
    30793085
    30803086                        this.uploader = new media.view.UploaderInline({
    30813087                                controller: this.controller
     
    30853091                },
    30863092
    30873093                createAttachments: function() {
    3088                         if ( this.uploader ) {
    3089                                 this.uploader.remove();
    3090                                 delete this.uploader;
    3091                         }
     3094                        this.removeContent();
    30923095
    30933096                        this.attachments = new media.view.Attachments({
    30943097                                controller: this.controller,