lib/jelly/jelly_controller.rb in honkster-jelly-0.7.6 vs lib/jelly/jelly_controller.rb in honkster-jelly-0.7.7
- old
+ new
@@ -1,24 +1,42 @@
module JellyController
protected
include Jelly::Common
def jelly_callback(callback_base_name = @action_name, options = {}, &block)
+ options[:format] ||= if request.xhr?
+ :json
+ elsif params[:callback]
+ :jsonp
+ else
+ :iframe
+ end
render :inline => jelly_callback_erb("on_#{callback_base_name}", options, block)
end
def jelly_callback_erb(callback_name, options, block)
+ options[:format] ||= :json
@callback_name = callback_name
@options = options
@block = block
- erb = <<-ERB
+ case options[:format].to_sym
+ when :iframe
+ "<textarea>#{jelly_callback_erb_template}</textarea>"
+ when :jsonp
+ @jsonp_callback = params[:callback]
+ jelly_callback_erb_template
+ else
+ jelly_callback_erb_template
+ end
+ end
+
+ def jelly_callback_erb_template
+ <<-ERB
<%= begin
args = @block ? instance_eval(&@block) : []
args = [args] unless args.is_a?(Array)
- jelly_callback_hash(@callback_name, *args).reverse_merge(@options).to_json
+ json = {"method" => @callback_name, "arguments" => args}.reverse_merge(@options).to_json
+ @jsonp_callback ? "\#{@jsonp_callback}(\#{json});" : json
end %>
ERB
- request.xhr? ? erb : "<textarea>#{erb}</textarea>"
end
-
-
end