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 therails
command in yourpublic/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.
- A
- B
- D
- E
- J
- L
- O
JAVASCRIPT_PATH | = | File.join(File.dirname(__FILE__), 'javascripts') |
Returns a button that’ll trigger a JavaScript function
using
the onclick handler.
The function
argument can be omitted in favor of an
update_page
block, 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[:details].visual_effect :toggle_slide end button_to_function "Details", :class => "details_button" do |page| page[:details].visual_effect :toggle_slide end
Source: show
Includes the Action Pack JavaScript libraries inside a single <script> tag. The function first includes prototype.js and then its core extensions, (determined by filenames starting with “prototype”). Afterwards, any additional scripts will be included in undefined order.
Note: The recommended approach is to copy the contents of
lib/action_view/helpers/javascripts/ into your application’s
public/javascripts/ directory, and use javascript_include_tag
to create remote <script> links.
Source: show
# File rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 134 def define_javascript_functions javascript = '<script type="text/javascript">' # load prototype.js and its extensions first prototype_libs = Dir.glob(File.join(JAVASCRIPT_PATH, 'prototype*')).sort.reverse prototype_libs.each do |filename| javascript << "\n" << IO.read(filename) end # load other librairies (Dir.glob(File.join(JAVASCRIPT_PATH, '*')) - prototype_libs).each do |filename| javascript << "\n" << IO.read(filename) end javascript << '</script>' end
Escape carrier returns and single and double quotes for JavaScript segments.
Source: show
# File rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 151 def escape_javascript(javascript) (javascript || '').gsub('\','\0\0').gsub(%r\r\n|\n|\r/, "\\n").gsub(%r["']/) { |m| "\\#{m}" } end
Returns a JavaScript tag with the content
inside. Example:
javascript_tag "alert('All is good')"
Returns:
<script type="text/javascript"> //<![CDATA[ alert('All is good') //]]> </script>
html_options
may be a hash of attributes for the
<script> tag. Example:
javascript_tag "alert('All is good')", :defer => 'true' # => <script defer="true" type="text/javascript">alert('All is good')</script>
Source: show
# File rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 168 def javascript_tag(content, html_options = {}) content_tag("script", javascript_cdata_section(content), html_options.merge(:type => "text/javascript")) end
Returns a link that will trigger a JavaScript function
using
the onclick handler and return false after the fact.
The function
argument can be omitted in favor of an
update_page
block, 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: <a onclick="alert('Hello world!'); return false;" href="#">Greeting<%ra> link_to_function(image_tag("delete"), "if (confirm('Really?')) do_delete()") Produces: <a onclick="if (confirm('Really?')) do_delete(); return false;" href="#"> <img src="/mages/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>
Source: show
# File rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 82 def link_to_function(name, *args, &block) html_options = args.last.is_a?(Hash) ? args.pop : {} function = args[0] || '' html_options.symbolize_keys! function = update_page(&block) if block_given? content_tag( "a", name, html_options.merge({ :href => html_options[:href] || "#", :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function}; return false;" }) ) end
Source: show
# File rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 181 def array_or_string_for_javascript(option) js_option = if option.kind_of?(Array) "['#{option.join('\',\'')}']" elsif !option.nil? "'#{option}'" end js_option end
Source: show
# File rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 177 def options_for_javascript(options) '{' + options.map {|k, v| "#{k}:#{v}"}.sort.join(', ') + '}' end