Skip to content
Extraits de code Groupes Projets
Valider 6fcba2dd rédigé par Dennis Collinson's avatar Dennis Collinson
Parcourir les fichiers

preload javascript vars using gon

parent 9f930a9b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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(){
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter