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 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.
- array_or_string_for_javascript
- button_to_function
- define_javascript_functions
- escape_javascript
- javascript_tag
- link_to_function
- options_for_javascript
JAVASCRIPT_PATH | = | File.join(File.dirname(__FILE__), 'javascripts') |
Returns a link that’ll trigger a JavaScript function using the onclick handler.
Examples:
button_to_function "Greeting", "alert('Hello world!')" button_to_function "Delete", "if confirm('Really?'){ do_delete(); }")
[ show source ]
# File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 67 67: def button_to_function(name, function, html_options = {}) 68: html_options.symbolize_keys! 69: tag(:input, html_options.merge({ 70: :type => "button", :value => name, 71: :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};" 72: })) 73: 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.
[ show source ]
# File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 84 84: def define_javascript_functions 85: javascript = '<script type="text/javascript">' 86: 87: # load prototype.js and its extensions first 88: prototype_libs = Dir.glob(File.join(JAVASCRIPT_PATH, 'prototype*')).sort.reverse 89: prototype_libs.each do |filename| 90: javascript << "\n" << IO.read(filename) 91: end 92: 93: # load other librairies 94: (Dir.glob(File.join(JAVASCRIPT_PATH, '*')) - prototype_libs).each do |filename| 95: javascript << "\n" << IO.read(filename) 96: end 97: javascript << '</script>' 98: end
Escape carrier returns and single and double quotes for JavaScript segments.
[ show source ]
# File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 101 101: def escape_javascript(javascript) 102: (javascript || '').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" } 103: end
Returns a JavaScript tag with the content inside. Example:
javascript_tag "alert('All is good')" # => <script type="text/javascript">alert('All is good')</script>
[ show source ]
# File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 107 107: def javascript_tag(content) 108: content_tag("script", javascript_cdata_section(content), :type => "text/javascript") 109: end
Returns a link that’ll trigger a JavaScript function using the onclick handler and return false after the fact.
Examples:
link_to_function "Greeting", "alert('Hello world!')" link_to_function(image_tag("delete"), "if confirm('Really?'){ do_delete(); }")
[ show source ]
# File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 50 50: def link_to_function(name, function, html_options = {}) 51: html_options.symbolize_keys! 52: content_tag( 53: "a", name, 54: html_options.merge({ 55: :href => html_options[:href] || "#", 56: :onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function}; return false;" 57: }) 58: ) 59: end
[ show source ]
# File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 120 120: def array_or_string_for_javascript(option) 121: js_option = if option.kind_of?(Array) 122: "['#{option.join('\',\'')}']" 123: elsif !option.nil? 124: "'#{option}'" 125: end 126: js_option 127: end
[ show source ]
# File vendor/rails/actionpack/lib/action_view/helpers/javascript_helper.rb, line 116 116: def options_for_javascript(options) 117: '{' + options.map {|k, v| "#{k}:#{v}"}.sort.join(', ') + '}' 118: end