diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-09-16 08:44:38 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-09-16 08:44:38 +0000 |
commit | 9acb1f95c9853dba704be7c690c4c0746ca8e8d6 (patch) | |
tree | 85dacc82be649b5d7d1f533967fc97acb1dd7934 /actionpack | |
parent | 1fb8ba7592c6a231bac62e1623645fd18b1eb951 (diff) | |
download | rails-9acb1f95c9853dba704be7c690c4c0746ca8e8d6.tar.gz rails-9acb1f95c9853dba704be7c690c4c0746ca8e8d6.tar.bz2 rails-9acb1f95c9853dba704be7c690c4c0746ca8e8d6.zip |
Make upload progress not throw JavaScript errors when there is no progress bar #2208 [Thomas Fuchs]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2252 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_view/helpers/upload_progress_helper.rb | 2 | ||||
-rw-r--r-- | actionpack/test/template/upload_progress_helper_testx.rb | 144 |
2 files changed, 5 insertions, 141 deletions
diff --git a/actionpack/lib/action_view/helpers/upload_progress_helper.rb b/actionpack/lib/action_view/helpers/upload_progress_helper.rb index 8563ca3beb..00e5f25f3d 100644 --- a/actionpack/lib/action_view/helpers/upload_progress_helper.rb +++ b/actionpack/lib/action_view/helpers/upload_progress_helper.rb @@ -384,7 +384,7 @@ module ActionView end.to_i # TODO do animation instead of jumping - "$('#{progress_bar_id}').firstChild.firstChild.style.width='#{percent}%'" + "if($('#{progress_bar_id}')){$('#{progress_bar_id}').firstChild.firstChild.style.width='#{percent}%'}" end # Generates a nicely formatted string of current upload progress for diff --git a/actionpack/test/template/upload_progress_helper_testx.rb b/actionpack/test/template/upload_progress_helper_testx.rb index 84ee607cbd..b22b6a67b4 100644 --- a/actionpack/test/template/upload_progress_helper_testx.rb +++ b/actionpack/test/template/upload_progress_helper_testx.rb @@ -45,142 +45,6 @@ class UploadProgressHelperTest < Test::Unit::TestCase def next_upload_id; @upload_id = last_upload_id.succ; end def last_upload_id; @upload_id ||= 0; end def current_upload_id; last_upload_id; end - def upload_progress(upload_id = nil); @upload_progress or MockProgress.new(false, true); end - - def setup - @controller = Class.new do - def url_for(options, *parameters_for_method_reference) - "http://www.example.com" - end - end - @controller = @controller.new - end - - def test_upload_status_tag - assert_equal( - '<div class="progressBar" id="UploadProgressBar0"><div class="border"><div class="background"><div class="foreground"></div></div></div></div><div class="uploadStatus" id="UploadStatus0"></div>', - upload_status_tag - ) - end - - def test_upload_status_text_tag - assert_equal( - '<div class="my-upload" id="my-id">Starting</div>', - upload_status_text_tag('Starting', :class => 'my-upload', :id => 'my-id') - ) - end - - - def test_upload_progress_text - @upload_progress = MockProgress.new(false, false) - assert_equal( - "Upload starting...", - upload_progress_text - ) - - @upload_progress = MockProgress.new(true, false) - assert_equal( - "828.7 MB of 456.2 MB at 990.1 MB/s; 10227 days remaining", - upload_progress_text - ) - - @upload_progress = MockProgress.new(true, true) - assert_equal( - "Upload finished. A message", - upload_progress_text - ) - end - - def test_upload_progress_update_bar_js - assert_equal( - "$('UploadProgressBar0').firstChild.firstChild.style.width='0%';", - upload_progress_update_bar_js - ) - - assert_equal( - "$('UploadProgressBar0').firstChild.firstChild.style.width='50%';", - upload_progress_update_bar_js(50) - ) - end - - def test_finish_upload_status - assert_equal( - "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop();\n }\n }</script></head><body onload=\"finish()\"></body></html>", - finish_upload_status - ) - - assert_equal( - "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop(123);\n }\n }</script></head><body onload=\"finish()\"></body></html>", - finish_upload_status(:client_js_argument => 123) - ) - - assert_equal( - "<html><head><script language=\"javascript\" type=\"text/javascript\">function finish() { if (parent.document.uploadStatus0) { parent.document.uploadStatus0.stop();\nparent.location.replace('/redirected/');\n }\n }</script></head><body onload=\"finish()\"></body></html>", - finish_upload_status(:redirect_to => '/redirected/') - ) - end - - def test_form_tag_with_upload_progress - assert_equal( - "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=1'; }this.target = 'UploadTarget1';$('UploadProgressBar1').firstChild.firstChild.style.width='0%';; document.uploadStatus1 = new Ajax.PeriodicalUpdater('UploadStatus1','http://www.example.com',{script:true, onComplete:function(request){$('UploadProgressBar1').firstChild.firstChild.style.width='100%';; }, asynchronous:true}.extend({decay:1.8,frequency:2.0})); return true\"><iframe id=\"UploadTarget1\" name=\"UploadTarget1\" src=\"\" style=\"width:0px;height:0px;border:0\"></iframe>", - form_tag_with_upload_progress - ) - end - - def test_form_tag_with_upload_progress_custom - assert_equal( - "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=5'; }this.target = 'awindow';$('UploadProgressBar0').firstChild.firstChild.style.width='0%';; alert('foo'); document.uploadStatus0 = new Ajax.PeriodicalUpdater('UploadStatus0','http://www.example.com',{script:true, onComplete:function(request){$('UploadProgressBar0').firstChild.firstChild.style.width='100%';; alert('bar'); alert('bar')}, asynchronous:true}.extend({decay:7,frequency:6})); return true\" target=\"awindow\">", - form_tag_with_upload_progress({:upload_id => 5}, {:begin => "alert('foo')", :finish => "alert('bar')", :frequency => 6, :decay => 7, :target => 'awindow'}) - ) - end -end -require File.dirname(__FILE__) + '/../abstract_unit' - -require File.dirname(__FILE__) + '/../../lib/action_view/helpers/date_helper' -require File.dirname(__FILE__) + '/../../lib/action_view/helpers/number_helper' -require File.dirname(__FILE__) + '/../../lib/action_view/helpers/asset_tag_helper' -require File.dirname(__FILE__) + '/../../lib/action_view/helpers/form_tag_helper' -require File.dirname(__FILE__) + '/../../lib/action_view/helpers/tag_helper' -require File.dirname(__FILE__) + '/../../lib/action_view/helpers/javascript_helper' -require File.dirname(__FILE__) + '/../../lib/action_view/helpers/upload_progress_helper' -require File.dirname(__FILE__) + '/../../../activesupport/lib/active_support/core_ext/hash' #for stringify keys - -class MockProgress - def initialize(started, finished) - @started, @finished = [started, finished] - end - - def started? - @started - end - - def finished? - @finished - end - - def message - "A message" - end - - def method_missing(meth, *args) - # Just return some consitant number - meth.to_s.hash.to_i.abs + args.hash.to_i.abs - end -end - -class UploadProgressHelperTest < Test::Unit::TestCase - include ActionView::Helpers::DateHelper - include ActionView::Helpers::NumberHelper - include ActionView::Helpers::AssetTagHelper - include ActionView::Helpers::FormTagHelper - include ActionView::Helpers::TagHelper - include ActionView::Helpers::UrlHelper - include ActionView::Helpers::JavaScriptHelper - include ActionView::Helpers::UploadProgressHelper - - def next_upload_id; @upload_id = last_upload_id.succ; end - def last_upload_id; @upload_id ||= 0; end - def current_upload_id; last_upload_id; end def upload_progress(upload_id = nil); @upload_progress ||= MockProgress.new(false, true); end def setup @@ -229,12 +93,12 @@ class UploadProgressHelperTest < Test::Unit::TestCase def test_upload_progress_update_bar_js assert_equal( - "$('UploadProgressBar0').firstChild.firstChild.style.width='0%'", + "if($('UploadProgressBar0')){$('UploadProgressBar0').firstChild.firstChild.style.width='0%'}", upload_progress_update_bar_js ) assert_equal( - "$('UploadProgressBar0').firstChild.firstChild.style.width='50%'", + "if($('UploadProgressBar0')){$('UploadProgressBar0').firstChild.firstChild.style.width='50%'}", upload_progress_update_bar_js(50) ) end @@ -258,14 +122,14 @@ class UploadProgressHelperTest < Test::Unit::TestCase def test_form_tag_with_upload_progress assert_equal( - "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=1'; }this.target = 'UploadTarget1';$('UploadStatus1').innerHTML='Upload starting...'; $('UploadProgressBar1').firstChild.firstChild.style.width='0%'; if (document.uploadStatus1) { document.uploadStatus1.stop(); }document.uploadStatus1 = new Ajax.PeriodicalUpdater('UploadStatus1','http://www.example.com', {onComplete:function(request){$('UploadStatus1').innerHTML='A message';$('UploadProgressBar1').firstChild.firstChild.style.width='100%';document.uploadStatus1 = null}, evalScripts:true, asynchronous:true}.extend({decay:1.8,frequency:2.0})); return true\"><iframe id=\"UploadTarget1\" name=\"UploadTarget1\" src=\"\" style=\"width:0px;height:0px;border:0\"></iframe>", + "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=1'; }this.target = 'UploadTarget1';$('UploadStatus1').innerHTML='Upload starting...'; if($('UploadProgressBar1')){$('UploadProgressBar1').firstChild.firstChild.style.width='0%'}; if (document.uploadStatus1) { document.uploadStatus1.stop(); }document.uploadStatus1 = new Ajax.PeriodicalUpdater('UploadStatus1','http://www.example.com', Object.extend({asynchronous:true, evalScripts:true, onComplete:function(request){$('UploadStatus1').innerHTML='A message';if($('UploadProgressBar1')){$('UploadProgressBar1').firstChild.firstChild.style.width='100%'};document.uploadStatus1 = null}},{decay:1.8,frequency:2.0})); return true\"><iframe id=\"UploadTarget1\" name=\"UploadTarget1\" src=\"\" style=\"width:0px;height:0px;border:0\"></iframe>", form_tag_with_upload_progress ) end def test_form_tag_with_upload_progress_custom assert_equal( - "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=5'; }this.target = 'awindow';$('UploadStatus0').innerHTML='Upload starting...'; $('UploadProgressBar0').firstChild.firstChild.style.width='0%'; alert('foo'); if (document.uploadStatus0) { document.uploadStatus0.stop(); }document.uploadStatus0 = new Ajax.PeriodicalUpdater('UploadStatus0','http://www.example.com', {onComplete:function(request){$('UploadStatus0').innerHTML='A message';$('UploadProgressBar0').firstChild.firstChild.style.width='100%';document.uploadStatus0 = null; alert('bar')}, evalScripts:true, asynchronous:true}.extend({decay:7,frequency:6})); return true\" target=\"awindow\">", + "<form action=\"http://www.example.com\" enctype=\"multipart/form-data\" method=\"post\" onsubmit=\"if (this.action.indexOf('upload_id') < 0){ this.action += '?upload_id=5'; }this.target = 'awindow';$('UploadStatus0').innerHTML='Upload starting...'; if($('UploadProgressBar0')){$('UploadProgressBar0').firstChild.firstChild.style.width='0%'}; alert('foo'); if (document.uploadStatus0) { document.uploadStatus0.stop(); }document.uploadStatus0 = new Ajax.PeriodicalUpdater('UploadStatus0','http://www.example.com', Object.extend({asynchronous:true, evalScripts:true, onComplete:function(request){$('UploadStatus0').innerHTML='A message';if($('UploadProgressBar0')){$('UploadProgressBar0').firstChild.firstChild.style.width='100%'};document.uploadStatus0 = null; alert('bar')}},{decay:7,frequency:6})); return true\" target=\"awindow\">", form_tag_with_upload_progress({:upload_id => 5}, {:begin => "alert('foo')", :finish => "alert('bar')", :frequency => 6, :decay => 7, :target => 'awindow'}) ) end |