Module: ActionView::Helpers::JavaScriptHelper
- Includes:
- PrototypeHelper
- Included in:
- UrlHelper
- Defined in:
- lib/action_view/helpers/javascript_helper.rb
Overview
Provides functionality for working with JavaScript in your views.
Ajax, controls and visual effects
- For information on using Ajax, see ActionView::Helpers::PrototypeHelper.
- For information on using controls and visual effects, see ActionView::Helpers::ScriptaculousHelper.
Including the JavaScript libraries into your pages
Rails includes the Prototype JavaScript framework and the Scriptaculous JavaScript controls and visual effects library. If you wish to use these libraries and their helpers (ActionView::Helpers::PrototypeHelper and ActionView::Helpers::ScriptaculousHelper), you must do one of the following:
- Use <%= javascript_include_tag :defaults %> in the HEAD
section of your page (recommended): This function will return
references to the JavaScript files created by the
railscommand in your public/javascripts directory. Using it is recommended as the browser can then cache the libraries instead of fetching all the functions anew on every request. - Use <%= javascript_include_tag 'prototype' %>: As above, but will only include the Prototype core library, which means you are able to use all basic AJAX functionality. For the Scriptaculous-based JavaScript helpers, like visual effects, autocompletion, drag and drop and so on, you should use the method described above.
- Use <%= define_javascript_functions %>: this will copy all the JavaScript support functions within a single script block. Not recommended.
For documentation on javascript_include_tag see
ActionView::Helpers::AssetTagHelper.
Constant Summary collapse
- JAVASCRIPT_PATH =
File.join(File.dirname(__FILE__), 'javascripts')
Constants included from PrototypeHelper
PrototypeHelper::AJAX_OPTIONS, PrototypeHelper::CALLBACKS
Instance Method Summary collapse
-
#button_to_function(name, *args, &block) ⇒ Object
Returns a button that'll trigger a JavaScript
functionusing the onclick handler. -
#define_javascript_functions ⇒ Object
Includes the Action Pack JavaScript libraries inside a single
Returns a button that'll trigger a JavaScript
functionusing the onclick handler.The
functionargument can be omitted in favor of anupdate_pageblock, which evaluates to a string when the template is rendered (instead of making an Ajax request first).Examples: button_to_function "Greeting", "alert('Hello world!')" button_to_function "Delete", "if (confirm('Really?')) do_delete()" button_to_function "Details" do |page| page.visual_effect :toggle_slide end button_to_function "Details", :class => "details_button" do |page| page.visual_effect :toggle_slide end
113 114 115 116 117 118 119 120 121 122 123
# File 'lib/action_view/helpers/javascript_helper.rb', line 113 def (name, *args, &block) = args.last.is_a?(Hash) ? args.pop : {} function = args[0] || '' .symbolize_keys! function = update_page(&block) if block_given? tag(:input, .merge({ :type => "button", :value => name, :onclick => ([:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};" })) end
#define_javascript_functions ⇒ Object
Includes the Action Pack JavaScript libraries inside a single
Escape carrier returns and single and double quotes for JavaScript segments.
151 152 153
# File 'lib/action_view/helpers/javascript_helper.rb', line 151 def escape_javascript(javascript) (javascript || '').gsub('\\','\0\0').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" } end
#javascript_cdata_section(content) ⇒ Object
:nodoc:
172 173 174
# File 'lib/action_view/helpers/javascript_helper.rb', line 172 def javascript_cdata_section(content) #:nodoc: "\n//#{cdata_section("\n#{content}\n//")}\n" end
#javascript_tag(content, html_options = {}) ⇒ Object
Returns a JavaScript tag with the
contentinside. Example: javascript_tag "alert('All is good')"Returns:
html_optionsmay be a hash of attributes for the168 169 170
# File 'lib/action_view/helpers/javascript_helper.rb', line 168 def javascript_tag(content, = {}) content_tag("script", javascript_cdata_section(content), .merge(:type => "text/javascript")) end
#link_to_function(name, *args, &block) ⇒ Object
Returns a link that will trigger a JavaScript
functionusing the onclick handler and return false after the fact.The
functionargument can be omitted in favor of anupdate_pageblock, which evaluates to a string when the template is rendered (instead of making an Ajax request first).Examples: link_to_function "Greeting", "alert('Hello world!')" Produces: Greeting
link_to_function(image_tag("delete"), "if (confirm('Really?')) do_delete()") Produces: <a onclick="if (confirm('Really?')) do_delete(); return false;" href="#"> <img src="/images/delete.png?" alt="Delete"/> </a> link_to_function("Show me more", nil, :id => "more_link") do |page| page[:details].visual_effect :toggle_blind page[:more_link].replace_html "Show me less" end Produces: <a href="#" id="more_link" onclick="try { $("details").visualEffect("toggle_blind"); $("more_link").update("Show me less"); } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('$(\"details\").visualEffect(\"toggle_blind\"); \n$(\"more_link\").update(\"Show me less\");'); throw e }; return false;">Show me more</a>82 83 84 85 86 87 88 89 90 91 92 93 94 95
# File 'lib/action_view/helpers/javascript_helper.rb', line 82 def link_to_function(name, *args, &block) = args.last.is_a?(Hash) ? args.pop : {} function = args[0] || '' .symbolize_keys! function = update_page(&block) if block_given? content_tag( "a", name, .merge({ :href => [:href] || "#", :onclick => ([:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function}; return false;" }) ) end