From e7fa1feb1c533ab33cfe0ac193b703d79bf81616 Mon Sep 17 00:00:00 2001 From: Kornelius Kalnbach Date: Fri, 10 Jun 2011 21:44:43 +0200 Subject: [PATCH 01/19] config.action_view.debug_rjs was removed --- README | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README b/README index 2e6bd7e..b1ca5b3 100644 --- a/README +++ b/README @@ -12,9 +12,3 @@ You may want to add them to your app/assets/javascripts/application.js: //= require dragdrop //= require controls -New applications using this may also want to add - - config.action_view.debug_rjs = true - -to their config/environments/development.rb. - From d7c0042224853eeb65a4a4eb49cc2b3eca08bd91 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Fri, 14 Nov 2014 14:18:00 -0800 Subject: [PATCH 02/19] start on 4.2 support --- lib/prototype-rails/selector_assertions.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/prototype-rails/selector_assertions.rb b/lib/prototype-rails/selector_assertions.rb index bdbe918..c482fce 100644 --- a/lib/prototype-rails/selector_assertions.rb +++ b/lib/prototype-rails/selector_assertions.rb @@ -1,5 +1,4 @@ require 'active_support/core_ext/module/aliasing' -require 'action_view/vendor/html-scanner' require 'action_dispatch/testing/assertions' require 'action_dispatch/testing/assertions/selector' @@ -8,7 +7,8 @@ # Under MIT and/or CC By license. #++ -ActionDispatch::Assertions::SelectorAssertions.module_eval do +module PrototypeRails + module SelectorAssertions # Selects content from the RJS response. # # === Narrowing down @@ -193,7 +193,6 @@ def response_from_page_with_rjs response_from_page_without_rjs end end - alias_method_chain :response_from_page, :rjs # Unescapes a RJS string. def unescape_rjs(rjs_string) @@ -208,3 +207,4 @@ def unescape_rjs(rjs_string) unescaped end end +end From 305fca4ef3276248782b103f83bb616a1ac6f912 Mon Sep 17 00:00:00 2001 From: Ilya Slepov Date: Wed, 11 Mar 2015 19:02:57 +0300 Subject: [PATCH 03/19] Fixed deprecation warning "ActionDispatch::Assertions::SelectorAssertions has been extracted to the rails-dom-testing gem". --- lib/prototype-rails/selector_assertions.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/prototype-rails/selector_assertions.rb b/lib/prototype-rails/selector_assertions.rb index c482fce..457e682 100644 --- a/lib/prototype-rails/selector_assertions.rb +++ b/lib/prototype-rails/selector_assertions.rb @@ -1,6 +1,6 @@ require 'active_support/core_ext/module/aliasing' require 'action_dispatch/testing/assertions' -require 'action_dispatch/testing/assertions/selector' +require 'rails/dom/testing/assertions/selector_assertions' #-- # Copyright (c) 2006 Assaf Arkin (http://labnotes.org) From eb9632d4a1bd1634ffd2614e7497b30461b0b997 Mon Sep 17 00:00:00 2001 From: Tom Talbott Date: Mon, 13 Mar 2017 16:24:25 -0700 Subject: [PATCH 04/19] Update to allow Rails 5 --- prototype-rails.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prototype-rails.gemspec b/prototype-rails.gemspec index 665b1f1..d44329f 100644 --- a/prototype-rails.gemspec +++ b/prototype-rails.gemspec @@ -8,7 +8,7 @@ Gem::Specification.new do |spec| spec.files = %w(README.md Rakefile Gemfile MIT-LICENSE) + Dir['lib/**/*', 'vendor/**/*', 'test/**/*'] - spec.add_dependency('rails', '~> 4.0') + spec.add_dependency('rails', '>= 4.0') spec.add_development_dependency('mocha') spec.license = "MIT" end From 04c4dea9effa81e9971ef97a0b961332fadd7435 Mon Sep 17 00:00:00 2001 From: Tom Talbott Date: Mon, 13 Mar 2017 16:27:52 -0700 Subject: [PATCH 05/19] Fix deprecation --- lib/prototype-rails/renderers.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/prototype-rails/renderers.rb b/lib/prototype-rails/renderers.rb index a514adc..e7c6f03 100644 --- a/lib/prototype-rails/renderers.rb +++ b/lib/prototype-rails/renderers.rb @@ -5,7 +5,7 @@ module Renderers add :update do |proc, options| view_context = self.view_context generator = ActionView::Helpers::PrototypeHelper::JavaScriptGenerator.new(view_context, &proc) - self.content_type = Mime::JS + self.content_type = Mime[:js] self.response_body = generator.to_s end end From 0bdf18d07929201ce6fdb5febd84dba8df0bab73 Mon Sep 17 00:00:00 2001 From: Tom Talbott Date: Mon, 20 Mar 2017 14:16:25 -0700 Subject: [PATCH 06/19] Fix deprecated reference --- lib/action_view/template/handlers/rjs.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/action_view/template/handlers/rjs.rb b/lib/action_view/template/handlers/rjs.rb index 0855959..6107102 100644 --- a/lib/action_view/template/handlers/rjs.rb +++ b/lib/action_view/template/handlers/rjs.rb @@ -3,7 +3,7 @@ module Template::Handlers class RJS # Default format used by RJS. class_attribute :default_format - self.default_format = Mime::JS + self.default_format = Mime[:js] def call(template) "update_page do |page|;#{template.source}\nend" From decebc3dd6c14e7c51f7fced01d41b625d5dc236 Mon Sep 17 00:00:00 2001 From: Tom Talbott Date: Wed, 5 Apr 2017 17:24:03 -0700 Subject: [PATCH 07/19] Move to Module#prepend in prep for for Rails 5.1 --- lib/prototype-rails/rendering.rb | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/prototype-rails/rendering.rb b/lib/prototype-rails/rendering.rb index e2350d8..8626a10 100644 --- a/lib/prototype-rails/rendering.rb +++ b/lib/prototype-rails/rendering.rb @@ -1,13 +1,14 @@ require 'action_view/helpers/rendering_helper' -ActionView::Helpers::RenderingHelper.module_eval do - def render_with_update(options = {}, locals = {}, &block) - if options == :update - update_page(&block) - else - render_without_update(options, locals, &block) - end +module PrototypeRails + module Rendering + def render(options = {}, locals = {}, &block) + if options == :update + update_page(&block) + else + super(options, locals, &block) + end + end end - - alias_method_chain :render, :update -end \ No newline at end of file +end +ActionView::Helpers::RenderingHelper.send(:prepend, PrototypeRails::Rendering) From 45e485208b2951af088341b0d7af97918d3a386f Mon Sep 17 00:00:00 2001 From: esb Date: Fri, 11 Jan 2013 13:49:55 +1100 Subject: [PATCH 08/19] update_page fragments are marked as html_safe even though they have not been html_escaped. When a fragment is passed as an html tag option, the standard html_escape is bypassed because of the html_safe flag. This leaves quotes (") unescaped, causing HTML errors. --- lib/action_view/helpers/prototype_helper.rb | 2 +- test/template/prototype_helper_test.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/action_view/helpers/prototype_helper.rb b/lib/action_view/helpers/prototype_helper.rb index 6e33385..9196c20 100644 --- a/lib/action_view/helpers/prototype_helper.rb +++ b/lib/action_view/helpers/prototype_helper.rb @@ -601,7 +601,7 @@ def method_missing(method, *arguments) # page.hide 'spinner' # end def update_page(&block) - JavaScriptGenerator.new(self, &block).to_s.html_safe + JavaScriptGenerator.new(self, &block).to_s end # Works like update_page but wraps the generated JavaScript in a diff --git a/test/template/prototype_helper_test.rb b/test/template/prototype_helper_test.rb index a6aa848..1991051 100644 --- a/test/template/prototype_helper_test.rb +++ b/test/template/prototype_helper_test.rb @@ -104,6 +104,18 @@ def test_update_page_tag_with_html_options assert_equal javascript_tag(create_generator(&block).to_s, {:defer => 'true'}), update_page_tag({:defer => 'true'}, &block) end + def test_update_page_html_tag + block = Proc.new { |page| page.hide('cancel-commit') } + input_tag = submit_tag('Save', :onclick => 'Element.hide("cancel-commit");') + assert_equal input_tag, submit_tag('Save', :onclick => update_page(&block)) + end + + def test_update_page_link_to_function + block = Proc.new { |page| page.hide('cancel-commit') } + link_tag = link_to_function('Save', 'Element.hide("cancel-commit");') + assert_equal link_tag, link_to_function('Save', update_page(&block)) + end + def test_remote_function res = remote_function(:url => authors_path, :with => "'author[name]='+$F('author_name')+'&author[dob]='+$F('author_dob')") assert_equal "new Ajax.Request('/authors', {asynchronous:true, evalScripts:true, parameters:'author[name]='+$F('author_name')+'&author[dob]='+$F('author_dob')})", res From 8ddd03cf5b77d8745b8f82de34f646abd3deceb4 Mon Sep 17 00:00:00 2001 From: esb Date: Sun, 13 Jan 2013 10:47:58 +1100 Subject: [PATCH 09/19] include the X-CSRF-Token header with every Ajax request --- vendor/assets/javascripts/prototype_ujs.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/vendor/assets/javascripts/prototype_ujs.js b/vendor/assets/javascripts/prototype_ujs.js index 2cd1220..dfab254 100644 --- a/vendor/assets/javascripts/prototype_ujs.js +++ b/vendor/assets/javascripts/prototype_ujs.js @@ -1,4 +1,14 @@ (function() { + Ajax.Responders.register({ + onCreate: function(request) { + var token = $$('meta[name=csrf-token]')[0]; + if (token) { + if (!request.options.requestHeaders) request.options.requestHeaders = {}; + request.options.requestHeaders['X-CSRF-Token'] = token.readAttribute('content'); + } + } + }); + // Technique from Juriy Zaytsev // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ function isEventSupported(eventName) { From b7718ba41c787fdb54ecc782698c1c85087c286d Mon Sep 17 00:00:00 2001 From: esb Date: Sun, 13 Jan 2013 10:53:34 +1100 Subject: [PATCH 10/19] Reapply the actionpack 2.2 fix for disable-with, the original submit button's name and value need to be submitted as a hidden input. --- vendor/assets/javascripts/prototype_ujs.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/vendor/assets/javascripts/prototype_ujs.js b/vendor/assets/javascripts/prototype_ujs.js index dfab254..03ee271 100644 --- a/vendor/assets/javascripts/prototype_ujs.js +++ b/vendor/assets/javascripts/prototype_ujs.js @@ -140,6 +140,19 @@ function disableFormElements(form) { form.select('input[type=submit][data-disable-with]').each(function(input) { + if (input.name == form.retrieve('rails:submit-button')) { + if (window.hiddenCommit) { + window.hiddenCommit.setAttribute('name', input.name); + window.hiddenCommit.setAttribute('value', input.value); + } else { + hiddenCommit = document.createElement('input'); + hiddenCommit.type = 'hidden'; + hiddenCommit.value = input.value; + hiddenCommit.name = input.name; + form.appendChild(hiddenCommit); + } + } + input.store('rails:original-value', input.getValue()); input.setValue(input.readAttribute('data-disable-with')).disable(); }); From 524b86a75a772c00b3be514ec2f16d4fe4736af1 Mon Sep 17 00:00:00 2001 From: esb Date: Sun, 13 Jan 2013 11:01:03 +1100 Subject: [PATCH 11/19] Make click event handler on a elements only respond to left clicks --- vendor/assets/javascripts/prototype_ujs.js | 26 ++++++++++++---------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/vendor/assets/javascripts/prototype_ujs.js b/vendor/assets/javascripts/prototype_ujs.js index 03ee271..ce0b553 100644 --- a/vendor/assets/javascripts/prototype_ujs.js +++ b/vendor/assets/javascripts/prototype_ujs.js @@ -157,7 +157,7 @@ input.setValue(input.readAttribute('data-disable-with')).disable(); }); } - + function enableFormElements(form) { form.select('input[type=submit][data-disable-with]').each(function(input) { input.setValue(input.retrieve('rails:original-value')).enable(); @@ -170,17 +170,19 @@ } document.on('click', 'a[data-confirm], a[data-remote], a[data-method]', function(event, link) { - if (!allowAction(link)) { - event.stop(); - return false; - } + if (Event.isLeftClick(event)) { + if (!allowAction(link)) { + event.stop(); + return false; + } - if (link.readAttribute('data-remote')) { - handleRemote(link); - event.stop(); - } else if (link.readAttribute('data-method')) { - handleMethod(link); - event.stop(); + if (link.readAttribute('data-remote')) { + handleRemote(link); + event.stop(); + } else if (link.readAttribute('data-method')) { + handleMethod(link); + event.stop(); + } } }); @@ -208,7 +210,7 @@ document.on('ajax:create', 'form', function(event, form) { if (form == event.findElement()) disableFormElements(form); }); - + document.on('ajax:complete', 'form', function(event, form) { if (form == event.findElement()) enableFormElements(form); }); From 98db453d359a36b7daf0a8d28b931af480ab89e7 Mon Sep 17 00:00:00 2001 From: esb Date: Tue, 15 Jan 2013 18:28:16 +1100 Subject: [PATCH 12/19] Ensure onclick handlers are escaped only once --- lib/prototype-rails/javascript_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/prototype-rails/javascript_helper.rb b/lib/prototype-rails/javascript_helper.rb index 29a71f1..2d57bee 100644 --- a/lib/prototype-rails/javascript_helper.rb +++ b/lib/prototype-rails/javascript_helper.rb @@ -35,7 +35,7 @@ def button_to_function(name, *args, &block) function = block_given? ? update_page(&block) : args[0] || '' onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function};" - tag(:input, html_options.merge(:type => 'button', :value => name, :onclick => onclick)) + tag(:input, html_options.merge(:type => 'button', :value => name, :onclick => escape_once(onclick)), false, false) end # link_to_function("Show me more", nil, :id => "more_link") do |page| @@ -62,6 +62,6 @@ def link_to_function(name, *args, &block) onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function}; return false;" href = html_options[:href] || '#' - content_tag(:a, name, html_options.merge(:href => href, :onclick => onclick)) + content_tag(:a, name, html_options.merge(:href => href, :onclick => escape_once(onclick)), false) end end From d554af6dd1781f415aee5e0093d1e2034a8c32bb Mon Sep 17 00:00:00 2001 From: Vincent Boucheny Date: Mon, 22 May 2017 16:20:35 +1200 Subject: [PATCH 13/19] Update rails gem --- Gemfile.lock | 166 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 98 insertions(+), 68 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 92b8540..b7cf640 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,85 +2,112 @@ PATH remote: . specs: prototype-rails (4.0.0) - rails (~> 4.0) + rails (>= 4.0) GEM remote: https://rubygems.org/ specs: - actionmailer (4.0.0) - actionpack (= 4.0.0) - mail (~> 2.5.3) - actionpack (4.0.0) - activesupport (= 4.0.0) - builder (~> 3.1.0) - erubis (~> 2.7.0) - rack (~> 1.5.2) - rack-test (~> 0.6.2) - activemodel (4.0.0) - activesupport (= 4.0.0) - builder (~> 3.1.0) - activerecord (4.0.0) - activemodel (= 4.0.0) - activerecord-deprecated_finders (~> 1.0.2) - activesupport (= 4.0.0) - arel (~> 4.0.0) - activerecord-deprecated_finders (1.0.3) - activesupport (4.0.0) - i18n (~> 0.6, >= 0.6.4) - minitest (~> 4.2) - multi_json (~> 1.3) - thread_safe (~> 0.1) - tzinfo (~> 0.3.37) - arel (4.0.0) - atomic (1.1.13) - builder (3.1.4) - erubis (2.7.0) - hike (1.2.3) - i18n (0.6.5) - mail (2.5.4) - mime-types (~> 1.16) - treetop (~> 1.4.8) + actioncable (5.1.1) + actionpack (= 5.1.1) + nio4r (~> 2.0) + websocket-driver (~> 0.6.1) + actionmailer (5.1.1) + actionpack (= 5.1.1) + actionview (= 5.1.1) + activejob (= 5.1.1) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 2.0) + actionpack (5.1.1) + actionview (= 5.1.1) + activesupport (= 5.1.1) + rack (~> 2.0) + rack-test (~> 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (5.1.1) + activesupport (= 5.1.1) + builder (~> 3.1) + erubi (~> 1.4) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.3) + activejob (5.1.1) + activesupport (= 5.1.1) + globalid (>= 0.3.6) + activemodel (5.1.1) + activesupport (= 5.1.1) + activerecord (5.1.1) + activemodel (= 5.1.1) + activesupport (= 5.1.1) + arel (~> 8.0) + activesupport (5.1.1) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (~> 0.7) + minitest (~> 5.1) + tzinfo (~> 1.1) + arel (8.0.0) + builder (3.2.3) + concurrent-ruby (1.0.5) + erubi (1.6.0) + globalid (0.4.0) + activesupport (>= 4.2.0) + i18n (0.8.1) + loofah (2.0.3) + nokogiri (>= 1.5.9) + mail (2.6.5) + mime-types (>= 1.16, < 4) metaclass (0.0.1) - mime-types (1.24) - minitest (4.7.5) + method_source (0.8.2) + mime-types (3.1) + mime-types-data (~> 3.2015) + mime-types-data (3.2016.0521) + mini_portile2 (2.1.0) + minitest (5.10.2) mocha (0.10.3) metaclass (~> 0.0.1) - multi_json (1.7.9) - polyglot (0.3.3) - rack (1.5.2) - rack-test (0.6.2) + nio4r (2.0.0) + nokogiri (1.7.2) + mini_portile2 (~> 2.1.0) + rack (2.0.3) + rack-test (0.6.3) rack (>= 1.0) - rails (4.0.0) - actionmailer (= 4.0.0) - actionpack (= 4.0.0) - activerecord (= 4.0.0) - activesupport (= 4.0.0) + rails (5.1.1) + actioncable (= 5.1.1) + actionmailer (= 5.1.1) + actionpack (= 5.1.1) + actionview (= 5.1.1) + activejob (= 5.1.1) + activemodel (= 5.1.1) + activerecord (= 5.1.1) + activesupport (= 5.1.1) bundler (>= 1.3.0, < 2.0) - railties (= 4.0.0) - sprockets-rails (~> 2.0.0) - railties (4.0.0) - actionpack (= 4.0.0) - activesupport (= 4.0.0) + railties (= 5.1.1) + sprockets-rails (>= 2.0.0) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.0.3) + loofah (~> 2.0) + railties (5.1.1) + actionpack (= 5.1.1) + activesupport (= 5.1.1) + method_source rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) - rake (10.1.0) - sprockets (2.10.0) - hike (~> 1.2) - multi_json (~> 1.0) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - sprockets-rails (2.0.0) - actionpack (>= 3.0) - activesupport (>= 3.0) - sprockets (~> 2.8) - thor (0.18.1) - thread_safe (0.1.2) - atomic - tilt (1.4.1) - treetop (1.4.14) - polyglot - polyglot (>= 0.3.1) - tzinfo (0.3.37) + rake (12.0.0) + sprockets (3.7.1) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.0) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + thor (0.19.4) + thread_safe (0.3.6) + tzinfo (1.2.3) + thread_safe (~> 0.1) + websocket-driver (0.6.5) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.2) PLATFORMS ruby @@ -88,3 +115,6 @@ PLATFORMS DEPENDENCIES mocha prototype-rails! + +BUNDLED WITH + 1.14.6 From 9f639a3bfa5529b6ce2f2c873784826569eb9eed Mon Sep 17 00:00:00 2001 From: Vincent Boucheny Date: Tue, 23 May 2017 11:51:55 +1200 Subject: [PATCH 14/19] Don't disable *every* submit field, just the one that has been clicked --- vendor/assets/javascripts/prototype_ujs.js | 29 +++++++++------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/vendor/assets/javascripts/prototype_ujs.js b/vendor/assets/javascripts/prototype_ujs.js index ce0b553..d887cf5 100644 --- a/vendor/assets/javascripts/prototype_ujs.js +++ b/vendor/assets/javascripts/prototype_ujs.js @@ -139,23 +139,18 @@ } function disableFormElements(form) { - form.select('input[type=submit][data-disable-with]').each(function(input) { - if (input.name == form.retrieve('rails:submit-button')) { - if (window.hiddenCommit) { - window.hiddenCommit.setAttribute('name', input.name); - window.hiddenCommit.setAttribute('value', input.value); - } else { - hiddenCommit = document.createElement('input'); - hiddenCommit.type = 'hidden'; - hiddenCommit.value = input.value; - hiddenCommit.name = input.name; - form.appendChild(hiddenCommit); - } - } - - input.store('rails:original-value', input.getValue()); - input.setValue(input.readAttribute('data-disable-with')).disable(); - }); + input = form.retrieve('rails:submit-button'); + if (window.hiddenCommit) { + window.hiddenCommit.setAttribute('name', input.name); + window.hiddenCommit.setAttribute('value', input.value); + } else { + hiddenCommit = document.createElement('input'); + hiddenCommit.type = 'hidden'; + hiddenCommit.value = input.value; + hiddenCommit.name = input.name; + form.appendChild(hiddenCommit); + } + input.setValue(input.readAttribute('data-disable-with')).disable(); } function enableFormElements(form) { From a2fbb9c1940523d06c059045a0531bd31d1dd317 Mon Sep 17 00:00:00 2001 From: Vincent Boucheny Date: Fri, 16 Jun 2017 11:27:35 +1200 Subject: [PATCH 15/19] Passed along any original 'target' attribute to the generated form tag in handleMethod() --- vendor/assets/javascripts/prototype_ujs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vendor/assets/javascripts/prototype_ujs.js b/vendor/assets/javascripts/prototype_ujs.js index d887cf5..55a5a03 100644 --- a/vendor/assets/javascripts/prototype_ujs.js +++ b/vendor/assets/javascripts/prototype_ujs.js @@ -121,10 +121,11 @@ function handleMethod(element) { var method = element.readAttribute('data-method'), url = element.readAttribute('href'), + target = element.readAttribute('target') || "", csrf_param = $$('meta[name=csrf-param]')[0], csrf_token = $$('meta[name=csrf-token]')[0]; - var form = new Element('form', { method: "POST", action: url, style: "display: none;" }); + var form = new Element('form', { method: "POST", action: url, style: "display: none;", target: target }); $(element.parentNode).insert(form); if (method !== 'post') { From 2f586657b24e3bdfb59e3a449b07291397f99508 Mon Sep 17 00:00:00 2001 From: Vincent Boucheny Date: Thu, 3 Aug 2017 16:38:47 +1200 Subject: [PATCH 16/19] CI-1376 Get rid of disableFormElements content --- vendor/assets/javascripts/prototype_ujs.js | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/vendor/assets/javascripts/prototype_ujs.js b/vendor/assets/javascripts/prototype_ujs.js index 55a5a03..7366e5f 100644 --- a/vendor/assets/javascripts/prototype_ujs.js +++ b/vendor/assets/javascripts/prototype_ujs.js @@ -139,21 +139,6 @@ form.submit(); } - function disableFormElements(form) { - input = form.retrieve('rails:submit-button'); - if (window.hiddenCommit) { - window.hiddenCommit.setAttribute('name', input.name); - window.hiddenCommit.setAttribute('value', input.value); - } else { - hiddenCommit = document.createElement('input'); - hiddenCommit.type = 'hidden'; - hiddenCommit.value = input.value; - hiddenCommit.name = input.name; - form.appendChild(hiddenCommit); - } - input.setValue(input.readAttribute('data-disable-with')).disable(); - } - function enableFormElements(form) { form.select('input[type=submit][data-disable-with]').each(function(input) { input.setValue(input.retrieve('rails:original-value')).enable(); @@ -198,15 +183,9 @@ if (form.readAttribute('data-remote')) { handleRemote(form); event.stop(); - } else { - disableFormElements(form); } }); - document.on('ajax:create', 'form', function(event, form) { - if (form == event.findElement()) disableFormElements(form); - }); - document.on('ajax:complete', 'form', function(event, form) { if (form == event.findElement()) enableFormElements(form); }); From 3902627d5eff49068b7398898e9b473a3eda1afc Mon Sep 17 00:00:00 2001 From: Jono Mingard Date: Mon, 14 Aug 2017 11:19:07 +1200 Subject: [PATCH 17/19] Revert "CI-1376 Get rid of disableFormElements content" This reverts commit 2f586657b24e3bdfb59e3a449b07291397f99508. --- vendor/assets/javascripts/prototype_ujs.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/vendor/assets/javascripts/prototype_ujs.js b/vendor/assets/javascripts/prototype_ujs.js index 7366e5f..55a5a03 100644 --- a/vendor/assets/javascripts/prototype_ujs.js +++ b/vendor/assets/javascripts/prototype_ujs.js @@ -139,6 +139,21 @@ form.submit(); } + function disableFormElements(form) { + input = form.retrieve('rails:submit-button'); + if (window.hiddenCommit) { + window.hiddenCommit.setAttribute('name', input.name); + window.hiddenCommit.setAttribute('value', input.value); + } else { + hiddenCommit = document.createElement('input'); + hiddenCommit.type = 'hidden'; + hiddenCommit.value = input.value; + hiddenCommit.name = input.name; + form.appendChild(hiddenCommit); + } + input.setValue(input.readAttribute('data-disable-with')).disable(); + } + function enableFormElements(form) { form.select('input[type=submit][data-disable-with]').each(function(input) { input.setValue(input.retrieve('rails:original-value')).enable(); @@ -183,9 +198,15 @@ if (form.readAttribute('data-remote')) { handleRemote(form); event.stop(); + } else { + disableFormElements(form); } }); + document.on('ajax:create', 'form', function(event, form) { + if (form == event.findElement()) disableFormElements(form); + }); + document.on('ajax:complete', 'form', function(event, form) { if (form == event.findElement()) enableFormElements(form); }); From d07c95b713b908b63f739e073998a965a2d6876d Mon Sep 17 00:00:00 2001 From: Jono Mingard Date: Mon, 14 Aug 2017 11:31:00 +1200 Subject: [PATCH 18/19] CI-1614 Restore disabling of form submit buttons The behaviour should now match Rails 5.1's rails-ujs. --- vendor/assets/javascripts/prototype_ujs.js | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/vendor/assets/javascripts/prototype_ujs.js b/vendor/assets/javascripts/prototype_ujs.js index 55a5a03..695ad4a 100644 --- a/vendor/assets/javascripts/prototype_ujs.js +++ b/vendor/assets/javascripts/prototype_ujs.js @@ -140,18 +140,10 @@ } function disableFormElements(form) { - input = form.retrieve('rails:submit-button'); - if (window.hiddenCommit) { - window.hiddenCommit.setAttribute('name', input.name); - window.hiddenCommit.setAttribute('value', input.value); - } else { - hiddenCommit = document.createElement('input'); - hiddenCommit.type = 'hidden'; - hiddenCommit.value = input.value; - hiddenCommit.name = input.name; - form.appendChild(hiddenCommit); - } - input.setValue(input.readAttribute('data-disable-with')).disable(); + form.select('input[type=submit][data-disable-with]').each(function(input) { + input.store('rails:original-value', input.value); + input.setValue(input.readAttribute('data-disable-with')).disable(); + }); } function enableFormElements(form) { @@ -199,7 +191,8 @@ handleRemote(form); event.stop(); } else { - disableFormElements(form); + // Slight timeout so that the submit button gets properly serialized + setTimeout(function() { disableFormElements(form); }, 13); } }); From c96372edf686f0a10b26a6f6849b183d51b01d05 Mon Sep 17 00:00:00 2001 From: Kornelius Kalnbach Date: Mon, 11 Apr 2022 16:35:09 +0200 Subject: [PATCH 19/19] tweaks for Rails 6.0 --- lib/action_view/template/handlers/rjs.rb | 2 +- lib/prototype-rails/on_load_action_view.rb | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/action_view/template/handlers/rjs.rb b/lib/action_view/template/handlers/rjs.rb index 6107102..aea56bc 100644 --- a/lib/action_view/template/handlers/rjs.rb +++ b/lib/action_view/template/handlers/rjs.rb @@ -5,7 +5,7 @@ class RJS class_attribute :default_format self.default_format = Mime[:js] - def call(template) + def call(template, source = template.source) "update_page do |page|;#{template.source}\nend" end end diff --git a/lib/prototype-rails/on_load_action_view.rb b/lib/prototype-rails/on_load_action_view.rb index 8942274..47109c9 100644 --- a/lib/prototype-rails/on_load_action_view.rb +++ b/lib/prototype-rails/on_load_action_view.rb @@ -15,9 +15,11 @@ end if defined?(Rails.env) && Rails.env.test? - ActionView::TestCase.class_eval do - include ActionView::Helpers::PrototypeHelper - include ActionView::Helpers::ScriptaculousHelper + ActiveSupport::Reloader.to_prepare do + ActionView::TestCase.class_eval do + include ActionView::Helpers::PrototypeHelper + include ActionView::Helpers::ScriptaculousHelper + end end end