Module ActionView::Helpers::JavaScriptHelper
In: vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb

Provides functionality for working with JavaScript in your views.

Ajax, controls and visual effects

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 rails command 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.

Methods

Included Modules

PrototypeHelper

Constants

JAVASCRIPT_PATH = File.join(File.dirname(__FILE__), 'javascripts')

Public Instance methods

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]

     # File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 113
113:       def button_to_function(name, *args, &block)
114:         html_options = args.extract_options!
115:         function = args[0] || ''
116: 
117:         html_options.symbolize_keys!
118:         function = update_page(&block) if block_given?
119:         tag(:input, html_options.merge({ 
120:           :type => "button", :value => name, 
121:           :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};" 
122:         }))
123:       end

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]

     # File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 134
134:       def define_javascript_functions
135:         javascript = "<script type=\"#{Mime::JS}\">"
136:         
137:         # load prototype.js and its extensions first 
138:         prototype_libs = Dir.glob(File.join(JAVASCRIPT_PATH, 'prototype*')).sort.reverse
139:         prototype_libs.each do |filename| 
140:           javascript << "\n" << IO.read(filename)
141:         end
142:         
143:         # load other libraries
144:         (Dir.glob(File.join(JAVASCRIPT_PATH, '*')) - prototype_libs).each do |filename| 
145:           javascript << "\n" << IO.read(filename)
146:         end
147:         javascript << '</script>'
148:       end

Escape carrier returns and single and double quotes for JavaScript segments.

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 151
151:       def escape_javascript(javascript)
152:         (javascript || '').gsub('\\','\0\0').gsub('</','<\/').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }
153:       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 => 'defer'
  # => <script defer="defer" type="text/javascript">alert('All is good')</script>

Instead of passing the content as an argument, you can also use a block in which case, you pass your html_options as the first parameter.

  <% javascript_tag :defer => 'defer' do -%>
    alert('All is good')
  <% end -%>

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 174
174:       def javascript_tag(content_or_options_with_block = nil, html_options = {}, &block)
175:         if block_given?
176:           html_options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash)
177:           content = capture(&block)
178:         else
179:           content = content_or_options_with_block
180:         end
181: 
182:         javascript_tag = content_tag("script", javascript_cdata_section(content), html_options.merge(:type => Mime::JS))
183:         
184:         if block_given? && block_is_within_action_view?(block)
185:           concat(javascript_tag, block.binding)
186:         else
187:           javascript_tag
188:         end
189:       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</a>

  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 {
        $(&quot;details&quot;).visualEffect(&quot;toggle_blind&quot;);
        $(&quot;more_link&quot;).update(&quot;Show me less&quot;);
      }
      catch (e) {
        alert('RJS error:\n\n' + e.toString());
        alert('$(\&quot;details\&quot;).visualEffect(\&quot;toggle_blind\&quot;);
        \n$(\&quot;more_link\&quot;).update(\&quot;Show me less\&quot;);');
        throw e
      };
      return false;">Show me more</a>

[Source]

    # File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 82
82:       def link_to_function(name, *args, &block)
83:         html_options = args.extract_options!
84:         function = args[0] || ''
85: 
86:         html_options.symbolize_keys!
87:         function = update_page(&block) if block_given?
88:         content_tag(
89:           "a", name, 
90:           html_options.merge({ 
91:             :href => html_options[:href] || "#", 
92:             :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function}; return false;" 
93:           })
94:         )
95:       end

Protected Instance methods

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 200
200:       def array_or_string_for_javascript(option)
201:         js_option = if option.kind_of?(Array)
202:           "['#{option.join('\',\'')}']"
203:         elsif !option.nil?
204:           "'#{option}'"
205:         end
206:         js_option
207:       end

[Source]

     # File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 196
196:       def options_for_javascript(options)
197:         '{' + options.map {|k, v| "#{k}:#{v}"}.sort.join(', ') + '}'
198:       end

[Validate]