Class Index [+]

Quicksearch

ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods

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:

  # Generates:
  #     new Element.insert("list", { bottom: "<li>Some item</li>" });
  #     new Effect.Highlight("list");
  #     ["status-indicator", "cancel-link"].each(Element.hide);
  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

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

Calls to JavaScriptGenerator not matching a helper method below generate a proxy to the JavaScript Class named by the method called.

Examples:

  # Generates:
  #     Foo.init();
  update_page do |page|
    page.foo.init
  end

  # Generates:
  #     Event.observe('one', 'click', function () {
  #       $('two').show();
  #     });
  update_page do |page|
    page.event.observe('one', 'click') do |p|
     p[:two].show
    end
  end

You can also use PrototypeHelper#update_page_tag instead of PrototypeHelper#update_page to wrap the generated JavaScript in a <script> tag.

Public Instance Methods

<<(javascript) click to toggle source

Writes raw JavaScript to the page.

Example:

 page << "alert('JavaScript with Prototype.');"
     # File lib/action_view/helpers/prototype_helper.rb, line 500
500:           def <<(javascript)
501:             @lines << javascript
502:           end
[](id) click to toggle source

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();

You can also pass in a record, which will use ActionController::RecordIdentifier.dom_id to lookup the correct id:

  page[@post]     # => $('post_45')
  page[Post.new]  # => $('new_post')
     # File lib/action_view/helpers/prototype_helper.rb, line 251
251:           def [](id)
252:             case id
253:               when String, Symbol, NilClass
254:                 JavaScriptElementProxy.new(self, id)
255:               else
256:                 JavaScriptElementProxy.new(self, ActionController::RecordIdentifier.dom_id(id))
257:             end
258:           end
alert(message) click to toggle source

Displays an alert dialog with the given message.

Example:

  # Generates: alert('This message is from Rails!')
  page.alert('This message is from Rails!')
     # File lib/action_view/helpers/prototype_helper.rb, line 423
423:           def alert(message)
424:             call 'alert', message
425:           end
assign(variable, value) click to toggle source

Assigns the JavaScript variable the given value.

Examples:

 # Generates: my_string = "This is mine!";
 page.assign 'my_string', 'This is mine!'

 # Generates: record_count = 33;
 page.assign 'record_count', 33

 # Generates: tabulated_total = 47
 page.assign 'tabulated_total', @total_from_cart
     # File lib/action_view/helpers/prototype_helper.rb, line 491
491:           def assign(variable, value)
492:             record "#{variable} = #{javascript_object_for(value)}"
493:           end
call(function, *arguments, &block) click to toggle source

Calls the JavaScript function, optionally with the given arguments.

If a block is given, the block will be passed to a new JavaScriptGenerator; the resulting JavaScript code will then be wrapped inside function() { ... } and passed as the called function’s final argument.

Examples:

  # Generates: Element.replace(my_element, "My content to replace with.")
  page.call 'Element.replace', 'my_element', "My content to replace with."

  # Generates: alert('My message!')
  page.call 'alert', 'My message!'

  # Generates:
  #     my_method(function() {
  #       $("one").show();
  #       $("two").hide();
  #    });
  page.call(:my_method) do |p|
     p[:one].show
     p[:two].hide
  end
     # File lib/action_view/helpers/prototype_helper.rb, line 474
474:           def call(function, *arguments, &block)
475:             record "#{function}(#{arguments_for_call(arguments, block)})"
476:           end
delay(seconds = 1) click to toggle source

Executes the content of the block after a delay of seconds. Example:

  # Generates:
  #     setTimeout(function() {
  #     ;
  #     new Effect.Fade("notice",{});
  #     }, 20000);
  page.delay(20) do
    page.visual_effect :fade, 'notice'
  end
     # File lib/action_view/helpers/prototype_helper.rb, line 514
514:           def delay(seconds = 1)
515:             record "setTimeout(function() {\n\n"
516:             yield
517:             record "}, #{(seconds * 1000).to_i})"
518:           end
draggable(id, options = {}) click to toggle source

Creates a script.aculo.us draggable element. See ActionView::Helpers::ScriptaculousHelper for more information.

     # File lib/action_view/helpers/scriptaculous_helper.rb, line 250
250:           def draggable(id, options = {})
251:             record @context.send(:draggable_element_js, id, options)
252:           end
drop_receiving(id, options = {}) click to toggle source

Creates a script.aculo.us drop receiving element. See ActionView::Helpers::ScriptaculousHelper for more information.

     # File lib/action_view/helpers/scriptaculous_helper.rb, line 256
256:           def drop_receiving(id, options = {})
257:             record @context.send(:drop_receiving_element_js, id, options)
258:           end
hide(*ids) click to toggle source

Hides the visible DOM elements with the given ids.

Example:

 # Hide a few people
 # Generates: ["person_29", "person_9", "person_0"].each(Element.hide);
 page.hide 'person_29', 'person_9', 'person_0'
     # File lib/action_view/helpers/prototype_helper.rb, line 401
401:           def hide(*ids)
402:             loop_on_multiple_args 'Element.hide', ids
403:           end
insert_html(position, id, *options_for_render) click to toggle source

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 preceding 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'.
  # Generates: Element.insert("content", { before: "-- Contents of 'navigation' partial --" });
  page.insert_html :before, 'content', :partial => 'navigation'

  # Add a list item to the bottom of the <ul> with ID 'list'.
  # Generates: Element.insert("list", { bottom: "<li>Last item</li>" });
  page.insert_html :bottom, 'list', '<li>Last item</li>'
     # File lib/action_view/helpers/prototype_helper.rb, line 316
316:           def insert_html(position, id, *options_for_render)
317:             content = javascript_object_for(render(*options_for_render))
318:             record "Element.insert(\"#{id}\", { #{position.to_s.downcase}: #{content} });"
319:           end
literal(code) click to toggle source

Returns an object whose to_json evaluates to code. Use this to pass a literal JavaScript expression as an argument to another JavaScriptGenerator method.

     # File lib/action_view/helpers/prototype_helper.rb, line 262
262:           def literal(code)
263:             ::ActiveSupport::JSON::Variable.new(code.to_s)
264:           end
redirect_to(location) click to toggle source

Redirects the browser to the given location using JavaScript, in the same form as url_for.

Examples:

 # Generates: window.location.href = "/mycontroller";
 page.redirect_to(:action => 'index')

 # Generates: window.location.href = "/account/signup";
 page.redirect_to(:controller => 'account', :action => 'signup')
     # File lib/action_view/helpers/prototype_helper.rb, line 436
436:           def redirect_to(location)
437:             url = location.is_a?(String) ? location : @context.url_for(location)
438:             record "window.location.href = #{url.inspect}"
439:           end
reload() click to toggle source

Reloads the browser’s current location using JavaScript

Examples:

 # Generates: window.location.reload();
 page.reload
     # File lib/action_view/helpers/prototype_helper.rb, line 447
447:           def reload
448:             record 'window.location.reload()'
449:           end
remove(*ids) click to toggle source

Removes the DOM elements with the given ids from the page.

Example:

 # Remove a few people
 # Generates: ["person_23", "person_9", "person_2"].each(Element.remove);
 page.remove 'person_23', 'person_9', 'person_2'
     # File lib/action_view/helpers/prototype_helper.rb, line 377
377:           def remove(*ids)
378:             loop_on_multiple_args 'Element.remove', ids
379:           end
replace(id, *options_for_render) click to toggle source

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.
  page.replace '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
  #
  # Generates: new Insertion.Bottom({object: "Matz", partial: "person"}, "");
  page.insert_html :bottom, :partial => 'person', :object => @person

  # Replace an existing person

  # Generates: Element.replace("person_45", "-- Contents of partial --");
  page.replace 'person_45', :partial => 'person', :object => @person
     # File lib/action_view/helpers/prototype_helper.rb, line 365
365:           def replace(id, *options_for_render)
366:             call 'Element.replace', id, render(*options_for_render)
367:           end
replace_html(id, *options_for_render) click to toggle source

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.
  # Generates:  Element.update("person-45", "-- Contents of 'person' partial --");
  page.replace_html 'person-45', :partial => 'person', :object => @person
     # File lib/action_view/helpers/prototype_helper.rb, line 331
331:           def replace_html(id, *options_for_render)
332:             call 'Element.update', id, render(*options_for_render)
333:           end
select(pattern) click to toggle source

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:

  # Generates: $$('#items li').each(function(value) { value.hide(); });
  page.select('#items li').each do |value|
    value.hide
  end

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:

  # Generates: var hidden = $$('#items li').collect(function(value, index) { return value.hide(); });
  page.select('#items li').collect('hidden') do |item|
    item.hide
  end
     # File lib/action_view/helpers/prototype_helper.rb, line 288
288:           def select(pattern)
289:             JavaScriptElementCollectionProxy.new(self, pattern)
290:           end
show(*ids) click to toggle source

Shows hidden DOM elements with the given ids.

Example:

 # Show a few people
 # Generates: ["person_6", "person_13", "person_223"].each(Element.show);
 page.show 'person_6', 'person_13', 'person_223'
     # File lib/action_view/helpers/prototype_helper.rb, line 389
389:           def show(*ids)
390:             loop_on_multiple_args 'Element.show', ids
391:           end
sortable(id, options = {}) click to toggle source

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 lib/action_view/helpers/scriptaculous_helper.rb, line 244
244:           def sortable(id, options = {})
245:             record @context.send(:sortable_element_js, id, options)
246:           end
toggle(*ids) click to toggle source

Toggles the visibility of the DOM elements with the given ids. Example:

 # Show a few people
 # Generates: ["person_14", "person_12", "person_23"].each(Element.toggle);
 page.toggle 'person_14', 'person_12', 'person_23'      # Hides the elements
 page.toggle 'person_14', 'person_12', 'person_23'      # Shows the previously hidden elements
     # File lib/action_view/helpers/prototype_helper.rb, line 413
413:           def toggle(*ids)
414:             loop_on_multiple_args 'Element.toggle', ids
415:           end
visual_effect(name, id = nil, options = {}) click to toggle source

Starts a script.aculo.us visual effect. See ActionView::Helpers::ScriptaculousHelper for more information.

     # File lib/action_view/helpers/scriptaculous_helper.rb, line 236
236:           def visual_effect(name, id = nil, options = {})
237:             record @context.send(:visual_effect, name, id, options)
238:           end

Private Instance Methods

arguments_for_call(arguments, block = nil) click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 556
556:             def arguments_for_call(arguments, block = nil)
557:               arguments << block_to_function(block) if block
558:               arguments.map { |argument| javascript_object_for(argument) }.join ', '
559:             end
block_to_function(block) click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 561
561:             def block_to_function(block)
562:               generator = self.class.new(@context, &block)
563:               literal("function() { #{generator.to_s} }")
564:             end
javascript_object_for(object) click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 552
552:             def javascript_object_for(object)
553:               ::ActiveSupport::JSON.encode(object)
554:             end
loop_on_multiple_args(method, ids) click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 521
521:             def loop_on_multiple_args(method, ids)
522:               record(ids.size>1 ?
523:                 "#{javascript_object_for(ids)}.each(#{method})" :
524:                 "#{method}(#{javascript_object_for(ids.first)})")
525:             end
method_missing(method, *arguments) click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 566
566:             def method_missing(method, *arguments)
567:               JavaScriptProxy.new(self, method.to_s.camelize)
568:             end
page() click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 527
527:             def page
528:               self
529:             end
record(line) click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 531
531:             def record(line)
532:               line = "#{line.to_s.chomp.gsub(/\;\z/, '')};"
533:               self << line
534:               line
535:             end
render(*options) click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 537
537:             def render(*options)
538:               with_formats(:html) do
539:                 case option = options.first
540:                 when Hash
541:                   @context.render(*options)
542:                 else
543:                   option.to_s
544:                 end
545:               end
546:             end
with_formats(*args) click to toggle source
     # File lib/action_view/helpers/prototype_helper.rb, line 548
548:             def with_formats(*args)
549:               @context ? @context.update_details(:formats => args) { yield } : yield
550:             end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.