module Apotomo
module JavascriptMethods
# Returns the escaped script.
def escape_js(script)
Apotomo.js_generator.escape(script)
end
# Wraps the rendered content in a replace statement according to your +Apotomo.js_framework+ setting.
# Received the same options as #render plus an optional +selector+ to change the selector.
#
# Example (with Apotomo.js_framework = :jquery):
#
# def hungry
# replace
#
# will render the current state's view and wrap it like
#
# "jQuery(\"#mouse\").replaceWith(\"
hungry!<\\/div>\")"
#
# You may pass a selector and pass options to render here, as well.
#
# replace "#jerry h1", :view => :squeak
# #=> "jQuery(\"#jerry h1\").replaceWith(\"
squeak!<\\/div>\")"
def replace(*args)
wrap_in_javascript_for(:replace, *args)
end
# Same as #replace except that the content is wrapped in an update statement.
#
# Example for +:jquery+:
#
# update :view => :peek
# #=> "jQuery(\"#mouse\").html(\"looking...")"
def update(*args)
wrap_in_javascript_for(:update, *args)
end
private
def wrap_in_javascript_for(mode, *args)
selector = args.first.is_a?(String) ? args.shift : false
content = render(*args)
selector ?
Apotomo.js_generator.send(mode, selector, content) : # replace(:twitter)
Apotomo.js_generator.send("#{mode}_id", name, content) # replace_id(:twitter)
end
end
end