* Move all Diaspora-specific javascripts to app/assets/javascripts * Move all vendored javascripts to vendor/assets/javascripts * Add the appropriate Sprockets require directives to make sure everything gets included in the right order * Remove Jammit dependencies * Fix all templates that were using Jammit's include_javascripts helper * Add handlebars_assets gem for compiling Handlebars templates * Move all Handlebars templates to app/assets/templates and rename from .handlebars to .jst.hbs (this is to keep them in the same global JST namespace that they were in under Jammit) * Add public/assets to .gitignore since these files can and should be re-generated by Heroku or Capistrano during each deploy * Fix a few Handlebars templates that were looking for images in the wrong location (I'm sure there are others, but it's late) * Configure application.rb to precompile all javascript and css assets that were compiled by Jammit in the Rails 3.0 code
68 lines
1.6 KiB
JavaScript
68 lines
1.6 KiB
JavaScript
//= require ../collections/posts
|
|
app.models.Stream = Backbone.Collection.extend({
|
|
initialize : function(){
|
|
this.posts = new app.collections.Posts([], this.postOptions());
|
|
},
|
|
|
|
postOptions :function(){
|
|
var order = this.sortOrder();
|
|
return {
|
|
comparator : function(post) { return -post[order](); }
|
|
}
|
|
},
|
|
|
|
url : function(){
|
|
return _.any(this.posts.models) ? this.timeFilteredPath() : this.basePath()
|
|
},
|
|
|
|
_fetching : false,
|
|
|
|
fetch: function() {
|
|
if(this._fetching) { return false; }
|
|
var self = this
|
|
|
|
// we're fetching the collection... there is probably a better way to do this
|
|
self._fetching = true;
|
|
|
|
this.posts
|
|
.fetch({
|
|
add : true,
|
|
url : self.url()
|
|
})
|
|
.done(
|
|
function(resp){
|
|
// we're done fetching... there is probably a better way to handle this
|
|
self._fetching = false;
|
|
|
|
self.trigger("fetched", self);
|
|
|
|
// all loaded?
|
|
if(resp.posts && (resp.posts.author || resp.posts.length == 0)) {
|
|
self.trigger("allPostsLoaded", self);
|
|
}
|
|
}
|
|
)
|
|
return this;
|
|
},
|
|
|
|
basePath : function(){
|
|
return document.location.pathname;
|
|
},
|
|
|
|
timeFilteredPath : function(){
|
|
return this.basePath() + "?max_time=" + this.maxTime();
|
|
},
|
|
|
|
maxTime: function(){
|
|
var lastPost = _.last(this.posts.models);
|
|
return lastPost[this.sortOrder()]()
|
|
},
|
|
|
|
sortOrder : function() {
|
|
return this.basePath().match(/activity/) ? "interactedAt" : "createdAt"
|
|
},
|
|
|
|
add : function(models){
|
|
this.posts.add(models)
|
|
}
|
|
});
|