diff --git a/app/assets/javascripts/app/app.js b/app/assets/javascripts/app/app.js index 2991abf414b0fa1d174e4549454097817084744b..21849fcacb1df18bc05315bf7421b74a9140502c 100644 --- a/app/assets/javascripts/app/app.js +++ b/app/assets/javascripts/app/app.js @@ -61,7 +61,7 @@ var app = { var preload = window.preloads[prop] delete window.preloads[prop] //prevent dirty state across navigates - return JSON.parse(preload) + return(preload) } }; diff --git a/app/assets/javascripts/app/models/post.js b/app/assets/javascripts/app/models/post.js index 0f3b2b771f2d9c2b2982e71e1818e0ade644c600..e6f01de60d83ed7183ba68e5f16ea7036f065c81 100644 --- a/app/assets/javascripts/app/models/post.js +++ b/app/assets/javascripts/app/models/post.js @@ -91,6 +91,12 @@ app.models.Post = Backbone.Model.extend(_.extend({}, app.models.formatDateMixin, var body = this.get("text").trim() , newlineIdx = body.indexOf("\n") return (newlineIdx > 0 ) ? body.substr(newlineIdx+1, body.length) : "" + }, + + //returns a promise + preloadOrFetch : function(){ + var action = app.hasPreload("post") ? this.set(app.parsePreload("post")) : this.fetch() + return $.when(action) } }), { headlineLimit : 118, diff --git a/app/assets/javascripts/app/pages/post-viewer.js b/app/assets/javascripts/app/pages/post-viewer.js index 45b88b4abf5824390004b0b5de991cd95342911a..832f95cc60ad95ba2a7d288f0d4849dd82076f83 100644 --- a/app/assets/javascripts/app/pages/post-viewer.js +++ b/app/assets/javascripts/app/pages/post-viewer.js @@ -10,7 +10,7 @@ app.pages.PostViewer = app.views.Base.extend({ initialize : function(options) { this.model = new app.models.Post({ id : options.id }); - this.model.fetch().success(_.bind(this.initViews, this)); + this.model.preloadOrFetch().done(_.bind(this.initViews, this)); this.prepIdleHooks(); diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 379ee52f91521e89a15de18aa12e66eb66fa5fcc..81a3b2b836eedf9652fe7d475b013b7aeafb349e 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -119,8 +119,7 @@ class PeopleController < ApplicationController format.all do if params[:ex] @page = :experimental - json = @stream.stream_posts.as_api_response(:backbone).to_json - gon.stream = json + gon.stream = @stream.stream_posts.as_api_response(:backbone).as_json render :nothing => true, :layout => 'post' else respond_with @person, :locals => {:post_type => :all} diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index 7e9aa8a621016b109982285e9870c3aa23ce195b..e3d86b0c40c5ee072c2c907b27133f8d58e40252 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -35,10 +35,10 @@ class PostsController < ApplicationController end respond_to do |format| - format.html{render 'posts/show.html.haml'} + format.html{ gon.post = postJson; render 'posts/show.html.haml' } format.xml{ render :xml => @post.to_diaspora_xml } format.mobile{render 'posts/show.mobile.haml', :layout => "application"} - format.json{ render :json => PostPresenter.new(@post, current_user).to_json } + format.json{ render :json => postJson } end else @@ -88,7 +88,11 @@ class PostsController < ApplicationController end end - private + protected + + def postJson + PostPresenter.new(@post, current_user).to_json + end def find_by_guid_or_id_with_current_user(id) key = id.to_s.length <= 8 ? :id : :guid