|
@@ -80,5 +80,45 @@ module Blazer
|
|
|
send(Blazer.user_method) if Blazer.user_method && respond_to?(Blazer.user_method)
|
|
|
end
|
|
|
helper_method :blazer_user
|
|
|
+
|
|
|
+ # from turbolinks
|
|
|
+ # https://github.com/turbolinks/turbolinks-rails/blob/master/lib/turbolinks/redirection.rb
|
|
|
+ def redirect_to(url = {}, options = {})
|
|
|
+ turbolinks = options.delete(:turbolinks)
|
|
|
+
|
|
|
+ super.tap do
|
|
|
+ if turbolinks != false && request.xhr? && !request.get?
|
|
|
+ visit_location_with_turbolinks(location, turbolinks)
|
|
|
+ else
|
|
|
+ if request.headers["Turbolinks-Referrer"]
|
|
|
+ store_turbolinks_location_in_session(location)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ def visit_location_with_turbolinks(location, action)
|
|
|
+ visit_options = {
|
|
|
+ action: action.to_s == "advance" ? action : "replace"
|
|
|
+ }
|
|
|
+
|
|
|
+ script = []
|
|
|
+ script << "Turbolinks.clearCache()"
|
|
|
+ script << "Turbolinks.visit(#{location.to_json}, #{visit_options.to_json})"
|
|
|
+
|
|
|
+ self.status = 200
|
|
|
+ self.response_body = script.join("\n")
|
|
|
+ response.content_type = "text/javascript"
|
|
|
+ end
|
|
|
+
|
|
|
+ def store_turbolinks_location_in_session(location)
|
|
|
+ session[:_turbolinks_location] = location if session
|
|
|
+ end
|
|
|
+
|
|
|
+ def set_turbolinks_location_header_from_session
|
|
|
+ if session && session[:_turbolinks_location]
|
|
|
+ response.headers["Turbolinks-Location"] = session.delete(:_turbolinks_location)
|
|
|
+ end
|
|
|
+ end
|
|
|
end
|
|
|
end
|