Module: ActionView::Helpers::JavaScriptHelper
- 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 '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.
For documentation on javascript_include_tag
see ActionView::Helpers::AssetTagHelper.
Instance Method Summary collapse
-
#button_to_function(name, *args, &block) ⇒ Object
Returns a button that’ll trigger a JavaScript
function
using the onclick handler. -
#escape_javascript(javascript) ⇒ Object
Escape carrier returns and single and double quotes for JavaScript segments.
-
#javascript_cdata_section(content) ⇒ Object
:nodoc:.
-
#javascript_tag(content_or_options_with_block = nil, html_options = {}, &block) ⇒ Object
Returns a JavaScript tag with the
content
inside. -
#link_to_function(name, *args, &block) ⇒ Object
Returns a link that will trigger a JavaScript
function
using the onclick handler and return false after the fact.
Instance Method Details
#button_to_function(name, *args, &block) ⇒ Object
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:
"Greeting", "alert('Hello world!')"
"Delete", "if (confirm('Really?')) do_delete()"
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/action_view/helpers/javascript_helper.rb', line 72 def (name, *args, &block) = args..symbolize_keys function = args[0] || '' function = update_page(&block) if block_given? tag(:input, .merge({ :type => "button", :value => name, :onclick => ([:onclick] ? "#{[:onclick]}; " : "") + "#{function};" })) end |
#escape_javascript(javascript) ⇒ Object
Escape carrier returns and single and double quotes for JavaScript segments.
84 85 86 |
# File 'lib/action_view/helpers/javascript_helper.rb', line 84 def escape_javascript(javascript) (javascript || '').gsub('\\','\0\0').gsub('</','<\/').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" } end |
#javascript_cdata_section(content) ⇒ Object
:nodoc:
124 125 126 |
# File 'lib/action_view/helpers/javascript_helper.rb', line 124 def javascript_cdata_section(content) #:nodoc: "\n//#{cdata_section("\n#{content}\n//")}\n" end |
#javascript_tag(content_or_options_with_block = nil, html_options = {}, &block) ⇒ Object
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 -%>
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/action_view/helpers/javascript_helper.rb', line 107 def javascript_tag( = nil, = {}, &block) if block_given? = if .is_a?(Hash) content = capture(&block) else content = end javascript_tag = content_tag("script", javascript_cdata_section(content), .merge(:type => Mime::JS)) if block_given? && block_is_within_action_view?(block) concat(javascript_tag, block.binding) else javascript_tag end end |
#link_to_function(name, *args, &block) ⇒ Object
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>
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/action_view/helpers/javascript_helper.rb', line 48 def link_to_function(name, *args, &block) = args..symbolize_keys function = args[0] || '' function = update_page(&block) if block_given? content_tag( "a", name, .merge({ :href => [:href] || "#", :onclick => ([:onclick] ? "#{[:onclick]}; " : "") + "#{function}; return false;" }) ) end |