| Module | ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods |
| In: |
vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb
|
JavaScriptGenerator generates blocks of JavaScript code that allow you to change the content and presentation of multiple DOM elements. Use this in your Ajax response bodies, either in a <script> tag or as plain JavaScript sent with a Content-type of "text/javascript".
Create new instances with PrototypeHelper#update_page or with ActionController::Base#render, then call insert_html, replace_html, remove, show, hide, visual_effect, or any other of the built-in methods on the yielded generator in any order you like to modify the content and appearance of the current page.
Example:
update_page do |page|
page.insert_html :bottom, 'list', "<li>#{@item.name}</li>"
page.visual_effect :highlight, 'list'
page.hide 'status-indicator', 'cancel-link'
end
generates the following JavaScript:
new Insertion.Bottom("list", "<li>Some item</li>");
new Effect.Highlight("list");
["status-indicator", "cancel-link"].each(Element.hide);
Helper methods can be used in conjunction with JavaScriptGenerator. When a helper method is called inside an update block on the page object, that method will also have access to a page object.
Example:
module ApplicationHelper
def update_time
page.replace_html 'time', Time.now.to_s(:db)
page.visual_effect :highlight, 'time'
end
end
# Controller action
def poll
render(:update) { |page| page.update_time }
end
You can also use PrototypeHelper#update_page_tag instead of PrototypeHelper#update_page to wrap the generated JavaScript in a <script> tag.
Writes raw JavaScript to the page.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 600
600: def <<(javascript)
601: @lines << javascript
602: end
Returns a element reference by finding it through id in the DOM. This element can then be used for further method calls. Examples:
page['blank_slate'] # => $('blank_slate');
page['blank_slate'].show # => $('blank_slate').show();
page['blank_slate'].show('first').up # => $('blank_slate').show('first').up();
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 458
458: def [](id)
459: JavaScriptElementProxy.new(self, id)
460: end
Displays an alert dialog with the given message.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 578
578: def alert(message)
579: call 'alert', message
580: end
Assigns the JavaScript variable the given value.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 595
595: def assign(variable, value)
596: record "#{variable} = #{javascript_object_for(value)}"
597: end
Calls the JavaScript function, optionally with the given arguments.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 590
590: def call(function, *arguments)
591: record "#{function}(#{arguments_for_call(arguments)})"
592: end
Executes the content of the block after a delay of seconds. Example:
page.delay(20) do
page.visual_effect :fade, 'notice'
end
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 609
609: def delay(seconds = 1)
610: record "setTimeout(function() {\n\n"
611: yield
612: record "}, #{(seconds * 1000).to_i})"
613: end
Creates a script.aculo.us draggable element. See ActionView::Helpers::ScriptaculousHelper for more information.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 631
631: def draggable(id, options = {})
632: record @context.send(:draggable_element_js, id, options)
633: end
Creates a script.aculo.us drop receiving element. See ActionView::Helpers::ScriptaculousHelper for more information.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 637
637: def drop_receiving(id, options = {})
638: record @context.send(:drop_receiving_element_js, id, options)
639: end
Hides the visible DOM elements with the given ids.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 568
568: def hide(*ids)
569: call 'Element.hide', *ids
570: end
Inserts HTML at the specified position relative to the DOM element identified by the given id.
position may be one of:
| :top: | HTML is inserted inside the element, before the element’s existing content. |
| :bottom: | HTML is inserted inside the element, after the element’s existing content. |
| :before: | HTML is inserted immediately preceeding the element. |
| :after: | HTML is inserted immediately following the element. |
options_for_render may be either a string of HTML to insert, or a hash of options to be passed to ActionView::Base#render. For example:
# Insert the rendered 'navigation' partial just before the DOM # element with ID 'content'. insert_html :before, 'content', :partial => 'navigation' # Add a list item to the bottom of the <ul> with ID 'list'. insert_html :bottom, 'list', '<li>Last item</li>'
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 509
509: def insert_html(position, id, *options_for_render)
510: insertion = position.to_s.camelize
511: call "new Insertion.#{insertion}", id, render(*options_for_render)
512: end
Redirects the browser to the given location, in the same form as url_for.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 584
584: def redirect_to(location)
585: assign 'window.location.href', @context.url_for(location)
586: end
Removes the DOM elements with the given ids from the page.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 558
558: def remove(*ids)
559: record "#{javascript_object_for(ids)}.each(Element.remove)"
560: end
Replaces the "outer HTML" (i.e., the entire element, not just its contents) of the DOM element with the given id.
options_for_render may be either a string of HTML to insert, or a hash of options to be passed to ActionView::Base#render. For example:
# Replace the DOM element having ID 'person-45' with the # 'person' partial for the appropriate object. replace_html 'person-45', :partial => 'person', :object => @person
This allows the same partial that is used for the insert_html to be also used for the input to replace without resorting to the use of wrapper elements.
Examples:
<div id="people">
<%= render :partial => 'person', :collection => @people %>
</div>
# Insert a new person
page.insert_html :bottom, :partial => 'person', :object => @person
# Replace an existing person
page.replace 'person_45', :partial => 'person', :object => @person
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 553
553: def replace(id, *options_for_render)
554: call 'Element.replace', id, render(*options_for_render)
555: end
Replaces the inner HTML of the DOM element with the given id.
options_for_render may be either a string of HTML to insert, or a hash of options to be passed to ActionView::Base#render. For example:
# Replace the HTML of the DOM element having ID 'person-45' with the # 'person' partial for the appropriate object. replace_html 'person-45', :partial => 'person', :object => @person
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 523
523: def replace_html(id, *options_for_render)
524: call 'Element.update', id, render(*options_for_render)
525: end
Returns a collection reference by finding it through a CSS pattern in the DOM. This collection can then be used for further method calls. Examples:
page.select('p') # => $$('p');
page.select('p.welcome b').first # => $$('p.welcome b').first();
page.select('p.welcome b').first.hide # => $$('p.welcome b').first().hide();
You can also use prototype enumerations with the collection. Observe:
page.select('#items li').each do |value|
value.hide
end
# => $$('#items li').each(function(value) { value.hide(); });
Though you can call the block param anything you want, they are always rendered in the javascript as ‘value, index.’ Other enumerations, like collect() return the last statement:
page.select('#items li').collect('hidden') do |item|
item.hide
end
# => var hidden = $$('#items li').collect(function(value, index) { return value.hide(); });
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 483
483: def select(pattern)
484: JavaScriptElementCollectionProxy.new(self, pattern)
485: end
Shows hidden DOM elements with the given ids.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 563
563: def show(*ids)
564: call 'Element.show', *ids
565: end
Creates a script.aculo.us sortable element. Useful to recreate sortable elements after items get added or deleted. See ActionView::Helpers::ScriptaculousHelper for more information.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 625
625: def sortable(id, options = {})
626: record @context.send(:sortable_element_js, id, options)
627: end
Toggles the visibility of the DOM elements with the given ids.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 573
573: def toggle(*ids)
574: call 'Element.toggle', *ids
575: end
Starts a script.aculo.us visual effect. See ActionView::Helpers::ScriptaculousHelper for more information.
# File vendor/rails/actionpack/lib/action_view/helpers/prototype_helper.rb, line 617
617: def visual_effect(name, id = nil, options = {})
618: record @context.send(:visual_effect, name, id, options)
619: end