From 4253796f557f78c64d0e84c1f34d203468093713 Mon Sep 17 00:00:00 2001 From: Dennis Collinson Date: Fri, 4 May 2012 16:55:09 -0700 Subject: [PATCH] preload post on post show --- app/assets/javascripts/app/app.js | 2 +- app/assets/javascripts/app/models/post.js | 6 ++++++ app/assets/javascripts/app/pages/post-viewer.js | 2 +- app/controllers/people_controller.rb | 3 +-- app/controllers/posts_controller.rb | 10 +++++++--- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/assets/javascripts/app/app.js b/app/assets/javascripts/app/app.js index 2991abf41..21849fcac 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 0f3b2b771..e6f01de60 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 45b88b4ab..832f95cc6 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 379ee52f9..81a3b2b83 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 7e9aa8a62..e3d86b0c4 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