Module: ActionView::Helpers::JavaScriptHelper
- Included in:
- ActionView::Helpers
- Defined in:
- actionpack/lib/action_view/helpers/javascript_helper.rb
Constant Summary collapse
- JS_ESCAPE_MAP =
{ '\\' => '\\\\', '</' => '<\/', "\r\n" => '\n', "\n" => '\n', "\r" => '\n', '"' => '\\"', "'" => "\\'" }
Instance Method Summary collapse
-
#button_to_function(name, function = nil, html_options = {}) ⇒ Object
Returns a button whose
onclick
handler triggers the passed JavaScript. -
#escape_javascript(javascript) ⇒ Object
(also: #j)
Escapes carriage 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, function, html_options = {}) ⇒ Object
Returns a link whose
onclick
handler triggers the passed JavaScript.
Instance Method Details
#button_to_function(name, function = nil, html_options = {}) ⇒ Object
Returns a button whose onclick
handler triggers the passed JavaScript.
The helper receives a name, JavaScript code, and an optional hash of HTML options. The name is used as button label and the JavaScript code goes into its onclick
attribute. If html_options
has an :onclick
, that one is put before function
.
"Greeting", "alert('Hello world!')", :class => "ok"
# => <input class="ok" onclick="alert('Hello world!');" type="button" value="Greeting" />
84 85 86 87 88 |
# File 'actionpack/lib/action_view/helpers/javascript_helper.rb', line 84 def (name, function=nil, ={}) onclick = "#{"#{[:onclick]}; " if [:onclick]}#{function};" tag(:input, .merge(:type => 'button', :value => name, :onclick => onclick)) end |
#escape_javascript(javascript) ⇒ Object Also known as: j
Escapes carriage returns and single and double quotes for JavaScript segments.
Also available through the alias j(). This is particularly helpful in JavaScript responses, like:
$('some_element').replaceWith('<%=j render 'some/element_template' %>');
28 29 30 31 32 33 34 35 |
# File 'actionpack/lib/action_view/helpers/javascript_helper.rb', line 28 def escape_javascript(javascript) if javascript result = javascript.gsub(/(\\|<\/|\r\n|\342\200\250|[\n\r"'])/u) {|match| JS_ESCAPE_MAP[match] } javascript.html_safe? ? result.html_safe : result else '' end end |
#javascript_cdata_section(content) ⇒ Object
:nodoc:
71 72 73 |
# File 'actionpack/lib/action_view/helpers/javascript_helper.rb', line 71 def javascript_cdata_section(content) #:nodoc: "\n//#{cdata_section("\n#{content}\n//")}\n".html_safe 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 -%>
59 60 61 62 63 64 65 66 67 68 69 |
# File 'actionpack/lib/action_view/helpers/javascript_helper.rb', line 59 def javascript_tag( = nil, = {}, &block) content = if block_given? = if .is_a?(Hash) capture(&block) else end content_tag(:script, javascript_cdata_section(content), .merge(:type => Mime::JS)) end |
#link_to_function(name, function, html_options = {}) ⇒ Object
Returns a link whose onclick
handler triggers the passed JavaScript.
The helper receives a name, JavaScript code, and an optional hash of HTML options. The name is used as the link text and the JavaScript code goes into the onclick
attribute. If html_options
has an :onclick
, that one is put before function
. Once all the JavaScript is set, the helper appends “; return false;”.
The href
attribute of the tag is set to “#” unless html_options
has one.
link_to_function "Greeting", "alert('Hello world!')", :class => "nav_link"
# => <a class="nav_link" href="#" onclick="alert('Hello world!'); return false;">Greeting</a>
102 103 104 105 106 107 |
# File 'actionpack/lib/action_view/helpers/javascript_helper.rb', line 102 def link_to_function(name, function, ={}) onclick = "#{"#{[:onclick]}; " if [:onclick]}#{function}; return false;" href = [:href] || '#' content_tag(:a, name, .merge(:href => href, :onclick => onclick)) end |