Commit 6fcba2dd authored by Dennis Collinson's avatar Dennis Collinson
Browse files

preload javascript vars using gon

parent 9f930a9b
......@@ -104,6 +104,7 @@ gem 'mobile-fu'
gem 'will_paginate'
gem 'client_side_validations'
gem 'gon'
# assets
......
......@@ -196,6 +196,9 @@ GEM
gem_plugin (0.2.3)
gherkin (2.9.3)
json (>= 1.4.6)
gon (3.0.2)
actionpack (>= 2.3.0)
json
guard (1.0.1)
ffi (>= 0.5.0)
thor (~> 0.14.6)
......@@ -522,6 +525,7 @@ DEPENDENCIES
foreigner (~> 1.1.0)
foreman (= 0.41)
fuubar (>= 1.0)
gon
guard-cucumber
guard-rspec
guard-spork
......
......@@ -49,6 +49,19 @@ var app = {
$(".stream_title").text(link.text())
app.router.navigate(link.attr("href").substring(1) ,true)
})
},
hasPreload : function(prop) {
return !!(window.preloads && window.preloads[prop]) //returning boolean variable so that parsePreloads, which cleans up properly is used instead
},
parsePreload : function(prop){
if(!app.hasPreload(prop)) { return }
var preload = window.preloads[prop]
delete window.preloads[prop] //prevent dirty state across navigates
return JSON.parse(preload)
}
};
......
......@@ -61,20 +61,17 @@ app.models.Stream = Backbone.Collection.extend({
this.items.add(models)
},
preloadOrFetch : function(){ //hai, plz test me THNX
this.preload()
if(this.items.length == 0) {
if(app.hasPreload("stream")){
this.preload()
} else {
this.fetch()
}
},
preload : function(){
var preloadJson = window.preLoadContent && JSON.parse(window.preLoadContent)
delete window.preLoadContent // always do this just to be safe in preventing dirty state across navigates
if(preloadJson) {
this.items.reset(preloadJson)
this.trigger("fetched")
}
this.items.reset(app.parsePreload("stream"))
this.trigger("fetched")
}
});
......@@ -81,13 +81,11 @@ class PeopleController < ApplicationController
def show
@person = Person.find_from_guid_or_username(params)
flag = FeatureFlagger.new(current_user, @person)
logger.info(request.format)
raise(ActiveRecord::RecordNotFound) if remote_profile_with_no_user_session?
return redirect_to :back, :notice => t("people.show.closed_account") if @person.closed_account?
return redirect_to person_path(@person) if params[:ex] && !flag.new_profile?
return redirect_to person_path(@person, :ex => true) if !params[:ex] && flag.new_profile? && flag.new_hotness? && request.format == "text/html"
return redirect_to person_path(@person) if cant_experimental
return redirect_to person_path(@person, :ex => true) if needs_experimental
@post_type = :all
@aspect = :profile
......@@ -121,7 +119,9 @@ class PeopleController < ApplicationController
format.all do
if params[:ex]
@page = :experimental
render :text => @stream.stream_posts.as_api_response(:backbone).to_json, :layout => 'post'
json = @stream.stream_posts.as_api_response(:backbone).to_json
gon.stream = json
render :nothing => true, :layout => 'post'
else
respond_with @person, :locals => {:post_type => :all}
end
......@@ -189,9 +189,21 @@ class PeopleController < ApplicationController
end
end
private
protected
def flag
@flag ||= FeatureFlagger.new(current_user, @person)
end
def cant_experimental
params[:ex] && !flag.new_profile?
end
def needs_experimental
!params[:ex] && flag.new_profile? && flag.new_hotness? && request.format == "text/html"
end
def remote_profile_with_no_user_session?
@person && @person.remote? && !user_signed_in?
@person.try(:remote?) && !user_signed_in?
end
end
......@@ -56,9 +56,11 @@
= yield(:head)
= csrf_meta_tag
= include_gon(:camel_case => true, :namespace => :preloads)
%body
= flash_messages
#container
= javascript_tag "window.preLoadContent = '#{escape_javascript(yield)}'"
= yield
= include_chartbeat
......@@ -20,8 +20,13 @@ describe("app.pages.Profile", function(){
it("preloads the stream for the user", function(){
spyOn(this.stream, "preload")
window.preloads = {stream : JSON.stringify(["unicorns"]) }
new app.pages.Profile({stream : this.stream})
expect(this.stream.preload).toHaveBeenCalled()
delete window.preloads //cleanup
})
describe("rendering", function(){
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment