From 4e76ae39047b369a192ee1a55cfcb4418c5c1f93 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 22 Dec 2005 18:05:50 +0000 Subject: Added delayed execution of Javascript from within RJS (closes #3264) [devslashnull@gmail.com] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3335 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/prototype_helper.rb | 15 +++++++++++++-- actionpack/test/template/prototype_helper_test.rb | 8 ++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'actionpack') diff --git a/actionpack/lib/action_view/helpers/prototype_helper.rb b/actionpack/lib/action_view/helpers/prototype_helper.rb index f1e67f05f4..a9a68f474b 100644 --- a/actionpack/lib/action_view/helpers/prototype_helper.rb +++ b/actionpack/lib/action_view/helpers/prototype_helper.rb @@ -485,10 +485,21 @@ module ActionView def <<(javascript) @lines << javascript end - + + # Executes the content of the block after a delay of +seconds+. Example: + # + # page.delay(20) do + # page.visual_effect :fade, 'notice' + # end + def delay(seconds = 1) + record "setTimeout(function() {\n\n" + yield + record "}, #{(seconds * 1000).to_i})" + end + private def method_missing(method, *arguments, &block) - record @context.send(method, *arguments, &block) + record(@context.send(method, *arguments, &block)) end def record(line) diff --git a/actionpack/test/template/prototype_helper_test.rb b/actionpack/test/template/prototype_helper_test.rb index 56485bc21c..eef6841727 100644 --- a/actionpack/test/template/prototype_helper_test.rb +++ b/actionpack/test/template/prototype_helper_test.rb @@ -201,6 +201,14 @@ class JavaScriptGeneratorTest < Test::Unit::TestCase @generator.redirect_to(:action => 'welcome') end + def test_delay + @generator.delay(20) do + @generator.hide('foo') + end + + assert_equal "setTimeout(function() {\n;\nElement.hide(\"foo\");\n}, 20000);", @generator.to_s + end + def test_to_s @generator.insert_html(:top, 'element', '

This is a test

') @generator.insert_html(:bottom, 'element', '

This is a test

') -- cgit v1.2.3