diff --git a/Changelog.md b/Changelog.md index faac7f05a..203135205 100644 --- a/Changelog.md +++ b/Changelog.md @@ -10,6 +10,8 @@ ## Bug fixes * Improve time agos by updating the plugin [#4280](https://github.com/diaspora/diaspora/issues/4280) * Use youtube HTTPS scheme for oEmbed [#4743](https://github.com/diaspora/diaspora/pull/4743) +* Fix infinite scroll on aspect streams [#4729](https://github.com/diaspora/diaspora/issues/4729) + ## Features * You can report a single post by clicking the correct icon in the controler section [#4517](https://github.com/diaspora/diaspora/pull/4517) diff --git a/app/assets/javascripts/app/models/stream.js b/app/assets/javascripts/app/models/stream.js index f417016fc..4cf5ff737 100644 --- a/app/assets/javascripts/app/models/stream.js +++ b/app/assets/javascripts/app/models/stream.js @@ -15,13 +15,18 @@ app.models.Stream = Backbone.Collection.extend({ return _.any(this.items.models) ? this.timeFilteredPath() : this.basePath() }, + _fetchOpts: function(opts) { + var defaultOpts = { + remove: false // tell backbone to keep existing items in the collection + }; + return _.extend({}, defaultOpts, opts); + }, + fetch: function() { if( this.isFetching() ) return false; var url = this.url(); - this.deferred = this.items.fetch({ - remove : false, - url : url - }).done(_.bind(this.triggerFetchedEvents, this)) + this.deferred = this.items.fetch(this._fetchOpts({url : url})) + .done(_.bind(this.triggerFetchedEvents, this)); }, isFetching : function() { diff --git a/app/assets/javascripts/app/models/stream_aspects.js b/app/assets/javascripts/app/models/stream_aspects.js index f8536c65d..4dc97899e 100644 --- a/app/assets/javascripts/app/models/stream_aspects.js +++ b/app/assets/javascripts/app/models/stream_aspects.js @@ -18,10 +18,7 @@ app.models.StreamAspects = app.models.Stream.extend({ if(this.isFetching()){ return false } var url = this.url(); var ids = this.aspects_ids; - this.deferred = this.items.fetch({ - add : true, - url : url, - data : { 'a_ids': ids } - }).done(_.bind(this.triggerFetchedEvents, this)) + this.deferred = this.items.fetch(this._fetchOpts({url : url, data : { 'a_ids': ids }})) + .done(_.bind(this.triggerFetchedEvents, this)); } }); diff --git a/spec/javascripts/app/models/stream_aspects_spec.js b/spec/javascripts/app/models/stream_aspects_spec.js new file mode 100644 index 000000000..f6d99195c --- /dev/null +++ b/spec/javascripts/app/models/stream_aspects_spec.js @@ -0,0 +1,28 @@ +describe("app.models.StreamAspects", function() { + describe("#fetch", function(){ + var fetch, + stream; + + beforeEach(function(){ + fetch = new $.Deferred(); + stream = new app.models.StreamAspects([], {aspects_ids: [1,2]}); + spyOn(stream.items, "fetch").andCallFake(function(options){ + stream.items.set([{name: 'a'}, {name: 'b'}, {name: 'c'}], options); + fetch.resolve(); + return fetch; + }); + }); + + it("fetches some posts", function(){ + stream.fetch(); + expect(stream.items.length).toEqual(3); + }); + + it("fetches more posts", function(){ + stream.fetch(); + expect(stream.items.length).toEqual(3); + stream.fetch(); + expect(stream.items.length).toEqual(6); + }); + }); +});