remotipart 1.2.1 → 1.4.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.travis.yml +35 -0
- data/Appraisals +25 -0
- data/Gemfile +14 -1
- data/History.rdoc +34 -0
- data/LICENSE +4 -0
- data/README.rdoc +35 -8
- data/Rakefile +5 -7
- data/gemfiles/rails_3.2.gemfile +26 -0
- data/gemfiles/rails_4.2.gemfile +24 -0
- data/gemfiles/rails_5.2.gemfile +24 -0
- data/gemfiles/rails_6.0.gemfile +24 -0
- data/lib/remotipart/middleware.rb +9 -4
- data/lib/remotipart/rails/engine.rb +15 -5
- data/lib/remotipart/rails/railtie.rb +8 -4
- data/lib/remotipart/rails/version.rb +2 -2
- data/lib/remotipart/render_overrides.rb +29 -7
- data/lib/remotipart/request_helper.rb +2 -0
- data/lib/remotipart/view_helper.rb +2 -0
- data/remotipart.gemspec +95 -19
- data/spec/dummy_app/.gitignore +17 -0
- data/spec/dummy_app/Rakefile +7 -0
- data/spec/dummy_app/app/assets/config/manifest.js +4 -0
- data/spec/dummy_app/app/assets/images/rails.png +0 -0
- data/spec/dummy_app/app/assets/javascripts/application.js.erb +8 -0
- data/spec/dummy_app/app/assets/javascripts/comments.js +28 -0
- data/spec/dummy_app/app/assets/stylesheets/application.css +6 -0
- data/spec/dummy_app/app/assets/stylesheets/scaffold.css +65 -0
- data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
- data/spec/dummy_app/app/controllers/comments_controller.rb +72 -0
- data/spec/dummy_app/app/controllers/prepended_controller.rb +9 -0
- data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
- data/spec/dummy_app/app/helpers/comments_helper.rb +2 -0
- data/spec/dummy_app/app/models/comment.rb +7 -0
- data/spec/dummy_app/app/views/comments/_comment.html.erb +9 -0
- data/spec/dummy_app/app/views/comments/_form.html.erb +40 -0
- data/spec/dummy_app/app/views/comments/_new_comment_links.html.erb +5 -0
- data/spec/dummy_app/app/views/comments/create.html.erb +7 -0
- data/spec/dummy_app/app/views/comments/create.js.erb +20 -0
- data/spec/dummy_app/app/views/comments/destroy.js.erb +1 -0
- data/spec/dummy_app/app/views/comments/edit.html.erb +6 -0
- data/spec/dummy_app/app/views/comments/escape_test.html.erb +1 -0
- data/spec/dummy_app/app/views/comments/index.html.erb +19 -0
- data/spec/dummy_app/app/views/comments/new.html.erb +7 -0
- data/spec/dummy_app/app/views/comments/show.html.erb +15 -0
- data/spec/dummy_app/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy_app/app/views/prepended/show.html.erb +1 -0
- data/spec/dummy_app/bin/bundle +3 -0
- data/spec/dummy_app/bin/rails +4 -0
- data/spec/dummy_app/bin/rake +4 -0
- data/spec/dummy_app/bin/setup +34 -0
- data/spec/dummy_app/bin/update +29 -0
- data/spec/dummy_app/config/application.rb +18 -0
- data/spec/dummy_app/config/boot.rb +3 -0
- data/spec/dummy_app/config/database.yml +7 -0
- data/spec/dummy_app/config/environment.rb +5 -0
- data/spec/dummy_app/config/environments/development.rb +54 -0
- data/spec/dummy_app/config/environments/test.rb +53 -0
- data/spec/dummy_app/config/initializers/secret_token.rb +3 -0
- data/spec/dummy_app/config/routes.rb +7 -0
- data/spec/dummy_app/config/secrets.yml +5 -0
- data/spec/dummy_app/config.ru +4 -0
- data/spec/dummy_app/db/migrate/20110209210252_create_comments.rb +14 -0
- data/spec/dummy_app/db/migrate/20110209210315_add_attachment_to_comment.rb +15 -0
- data/spec/dummy_app/db/migrate/20110714205346_add_other_attachment_to_comment.rb +8 -0
- data/spec/dummy_app/db/schema.rb +31 -0
- data/spec/dummy_app/db/seeds.rb +7 -0
- data/spec/features/comments_spec.rb +414 -0
- data/spec/features/prepended_spec.rb +9 -0
- data/spec/fixtures/hi.txt +1 -0
- data/spec/fixtures/qr.jpg +0 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/arel_helper.rb +15 -0
- data/spec/support/connection_helper.rb +12 -0
- data/spec/support/integration_helper.rb +28 -0
- data/vendor/assets/javascripts/jquery.iframe-transport.js +41 -27
- data/vendor/assets/javascripts/jquery.remotipart.js +3 -1
- metadata +157 -27
- data/Gemfile.lock +0 -20
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6613ef182593408aa806dbc14790a9f5c31717d7096657f9238efec23e102977
|
4
|
+
data.tar.gz: 9f96a7481ff473943ae7b1e5ec745a8b179b8ae8f615809b3790f7683b687f1e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 58567b707f27b4eb40eb5020e8fed6763fbb1d895efacb9ddc4c1252b1073c5373180d668de6f9a2b306a922f807a06617458c9ac78eb3dff1723ee0481df1fb
|
7
|
+
data.tar.gz: e19c0a28fecdfa2a8bdfb5bc0024263a1fc4de5dadb3a9a425af75367de672c0ec0339bcced53c33bceb11100fdb382fee465a86a45e8215405d4cf741d213c8
|
data/.travis.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
language: ruby
|
2
|
+
|
3
|
+
before_install:
|
4
|
+
# https://github.com/danmayer/coverband/issues/162#issuecomment-452173268
|
5
|
+
- rm /home/travis/.rvm/gems/*/specifications/bundler-2.*.gemspec || true
|
6
|
+
- gem install bundler -v '<2'
|
7
|
+
|
8
|
+
bundler_args: --without development --jobs=3 --retry=3 --path=../vendor/bundle
|
9
|
+
|
10
|
+
cache: bundler
|
11
|
+
|
12
|
+
env:
|
13
|
+
matrix:
|
14
|
+
- JQUERY_VERSION=
|
15
|
+
|
16
|
+
rvm:
|
17
|
+
- 2.5.5
|
18
|
+
|
19
|
+
gemfile:
|
20
|
+
- gemfiles/rails_3.2.gemfile
|
21
|
+
- gemfiles/rails_4.2.gemfile
|
22
|
+
- gemfiles/rails_5.2.gemfile
|
23
|
+
- gemfiles/rails_6.0.gemfile
|
24
|
+
|
25
|
+
dist: trusty
|
26
|
+
|
27
|
+
sudo: false
|
28
|
+
|
29
|
+
matrix:
|
30
|
+
include:
|
31
|
+
- env: JQUERY_VERSION=2
|
32
|
+
gemfile: gemfiles/rails_6.0.gemfile
|
33
|
+
- env: JQUERY_VERSION=3
|
34
|
+
gemfile: gemfiles/rails_6.0.gemfile
|
35
|
+
fast_finish: true
|
data/Appraisals
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
appraise "rails-3.2" do
|
2
|
+
gem 'rails', '~> 3.2.0'
|
3
|
+
gem 'test-unit', '~> 3.0'
|
4
|
+
gem "strong_parameters"
|
5
|
+
|
6
|
+
group :development, :test do
|
7
|
+
gem 'sqlite3', '~> 1.3.5'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
appraise "rails-4.2" do
|
12
|
+
gem 'rails', '~> 4.2.0'
|
13
|
+
|
14
|
+
group :development, :test do
|
15
|
+
gem 'sqlite3', '~> 1.3.6'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
appraise "rails-5.2" do
|
20
|
+
gem 'rails', '~> 5.2.0'
|
21
|
+
end
|
22
|
+
|
23
|
+
appraise "rails-6.0" do
|
24
|
+
gem 'rails', '~> 6.0.0.rc1'
|
25
|
+
end
|
data/Gemfile
CHANGED
@@ -2,9 +2,22 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
group :development do
|
4
4
|
gem 'rake'
|
5
|
-
gem 'jeweler'
|
5
|
+
gem 'jeweler', github: 'technicalpickles/jeweler'
|
6
6
|
# This conflicts with jeweler gemspec generation,
|
7
7
|
# causes dependencies to be added to gemspec recursively
|
8
8
|
#gemspec
|
9
9
|
end
|
10
10
|
|
11
|
+
group :development, :test do
|
12
|
+
gem 'appraisal'
|
13
|
+
gem 'jquery-rails'
|
14
|
+
gem 'sqlite3'
|
15
|
+
gem 'paperclip'
|
16
|
+
gem 'remotipart', path: '.'
|
17
|
+
end
|
18
|
+
|
19
|
+
group :test do
|
20
|
+
gem 'database_cleaner'
|
21
|
+
gem 'poltergeist'
|
22
|
+
gem 'rspec-rails'
|
23
|
+
end
|
data/History.rdoc
CHANGED
@@ -1,5 +1,39 @@
|
|
1
1
|
= History
|
2
2
|
|
3
|
+
=== 1.4.4 / 2019-12-29
|
4
|
+
|
5
|
+
* Fixed Rails 6 autoloading deprecation.
|
6
|
+
* Fixed ActiveScaffold incompatibility.
|
7
|
+
|
8
|
+
=== 1.4.3 / 2019-05-23
|
9
|
+
|
10
|
+
* Fixed xhr.responseText not being populated.
|
11
|
+
* Security: fixed cross-site scripting vulnerability when server renders user input.
|
12
|
+
|
13
|
+
=== 1.4.2 / 2018-04-25
|
14
|
+
|
15
|
+
* Fixed ActionView::Template::Error in web-console.
|
16
|
+
|
17
|
+
=== 1.4.0 / 2018-04-09
|
18
|
+
|
19
|
+
* Added jQuery 3 compatibility.
|
20
|
+
* Changed to use ActiveSupport lazy load hooks on initialization.
|
21
|
+
* Changed jQuery iframe-transport to v1.0.1.
|
22
|
+
* Fixed to preserve original return value of render call for non-remotipart requests.
|
23
|
+
* Fixed remote javascript with " not being executed.
|
24
|
+
* Fixed method signature of render_with_remotipart, making RJS templates not usable.
|
25
|
+
|
26
|
+
=== 1.3.1 / 2016-10-06
|
27
|
+
|
28
|
+
* Fixed remote form submit not working with Firefox 49.
|
29
|
+
|
30
|
+
=== 1.3.0 / 2016-09-14
|
31
|
+
|
32
|
+
* Added Rails 5 support.
|
33
|
+
* Added an event `ajax:remotipartComplete`, which will be fired when the ajax upload completes.
|
34
|
+
* Changed to preserve original input files upon submit.
|
35
|
+
* Fixed TypeError when POST body is empty with Rails 3.
|
36
|
+
|
3
37
|
=== 1.2.1 / 2013-07-07
|
4
38
|
|
5
39
|
* Added automatic authenticity_token detection and appending to iframe submission.
|
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
= Remotipart: Rails jQuery File
|
1
|
+
= Remotipart: Rails jQuery File Uploads
|
2
|
+
|
3
|
+
{<img src="https://badge.fury.io/rb/remotipart.svg" alt="Gem Version" />}[https://badge.fury.io/rb/remotipart]
|
4
|
+
{<img src="https://travis-ci.com/JangoSteve/remotipart.svg?branch=master" alt="Build Status" />}[https://travis-ci.com/JangoSteve/remotipart]
|
5
|
+
{<img src="https://codeclimate.com/github/JangoSteve/remotipart/badges/gpa.svg" />}[https://codeclimate.com/github/JangoSteve/remotipart]
|
2
6
|
|
3
7
|
Remotipart is a Ruby on Rails gem enabling AJAX file uploads with jQuery in Rails 3 and Rails 4 remote forms.
|
4
8
|
This gem augments the native Rails jQuery remote form functionality enabling asynchronous file uploads with little to no modification to your application.
|
@@ -9,7 +13,9 @@ This gem augments the native Rails jQuery remote form functionality enabling asy
|
|
9
13
|
== Dependencies
|
10
14
|
|
11
15
|
* {Rails 3 or Rails 4}[http://github.com/rails/rails]
|
12
|
-
* {The jquery-rails gem}[http://rubygems.org/gems/jquery-rails]
|
16
|
+
* {The jquery-rails gem}[http://rubygems.org/gems/jquery-rails]
|
17
|
+
|
18
|
+
<em>The jquery-rails gem is included in Rails 3 and Rails 4 by default, and installs {jQuery}[http://jquery.com] and the {Rails jQuery UJS driver (jquery-ujs)}[https://github.com/rails/jquery-ujs]</em>
|
13
19
|
|
14
20
|
== Installation
|
15
21
|
|
@@ -29,7 +35,7 @@ make sure you have a supported jquery-ujs (rails.js or jquery_ujs.js) version fr
|
|
29
35
|
|
30
36
|
bundle install
|
31
37
|
|
32
|
-
=== Rails 3.1
|
38
|
+
=== Rails 3.1 and Rails 4
|
33
39
|
|
34
40
|
[2.]
|
35
41
|
The necessary js files will automatically be added to the asset pipeline, so add the following to app/assets/javascripts/application.js (right after <tt>//= require jquery_ujs</tt>):
|
@@ -53,7 +59,7 @@ make sure you have a supported jquery-ujs (rails.js or jquery_ujs.js) version fr
|
|
53
59
|
* For multipart / forms with file inputs, set your form_for to remote as you would for a normal ajax form:
|
54
60
|
:remote => true
|
55
61
|
* When Javascript is enabled in the user's browser, the form, including the file, will be submitted asynchronously to your controller with:
|
56
|
-
:format
|
62
|
+
:format => 'js'
|
57
63
|
* If you need to determine if a particular request was made via a remotipart-enabled form...
|
58
64
|
* from your Rails controller or view:
|
59
65
|
|
@@ -63,10 +69,16 @@ make sure you have a supported jquery-ujs (rails.js or jquery_ujs.js) version fr
|
|
63
69
|
$(form).bind("ajax:success", function(){
|
64
70
|
if ( $(this).data('remotipartSubmitted') )
|
65
71
|
});
|
72
|
+
* If you want to be notified when the upload is complete (which can be either success or error)
|
73
|
+
* from your javascript:
|
66
74
|
|
75
|
+
$(form).on("ajax:remotipartComplete", function(e, data){
|
76
|
+
console.log(e, data)
|
77
|
+
});
|
78
|
+
|
67
79
|
=== Example
|
68
80
|
|
69
|
-
sample_layout.html.erb
|
81
|
+
<tt>sample_layout.html.erb</tt>
|
70
82
|
<%= form_for @sample, :html => { :multipart => true }, :remote => true do |f| %>
|
71
83
|
<div class="field">
|
72
84
|
<%= f.label :file %>
|
@@ -77,7 +89,7 @@ sample_layout.html.erb
|
|
77
89
|
</div>
|
78
90
|
<% end %>
|
79
91
|
|
80
|
-
sample_controller.rb
|
92
|
+
<tt>sample_controller.rb</tt>
|
81
93
|
def create
|
82
94
|
respond_to do |format|
|
83
95
|
if @sample.save
|
@@ -86,7 +98,7 @@ sample_controller.rb
|
|
86
98
|
end
|
87
99
|
end
|
88
100
|
|
89
|
-
create.js.erb
|
101
|
+
<tt>create.js.erb</tt>
|
90
102
|
// Display a Javascript alert
|
91
103
|
alert('success!');
|
92
104
|
<% if remotipart_submitted? %>
|
@@ -95,6 +107,21 @@ create.js.erb
|
|
95
107
|
alert('submitted via native jquery-ujs')
|
96
108
|
<% end %>
|
97
109
|
|
110
|
+
The content type requested from the application can be overridden via the <tt>data-type</tt> HTML5 attribute:
|
111
|
+
|
112
|
+
<tt>sample_layout2.html.erb</tt>
|
113
|
+
<%= form_for @sample, :html => { :multipart => true }, :remote => true, :data => { :type => :html } do |f| %>
|
114
|
+
<div class="field">
|
115
|
+
<%= f.label :file %>
|
116
|
+
<%= f.file_field :file %>
|
117
|
+
</div>
|
118
|
+
<div class="actions">
|
119
|
+
<%= f.submit %>
|
120
|
+
</div>
|
121
|
+
<% end %>
|
122
|
+
|
123
|
+
In this case, the application should serve HTML using a <tt>create.html.erb</tt> template instead of JavaScript.
|
124
|
+
|
98
125
|
== Note on Patches/Pull Requests
|
99
126
|
|
100
127
|
<b>If you have a general improvement, optimization, or refactoring, please {read this first}[https://github.com/formasfunction/remotipart/wiki/Refactoring-and-Improving-Remotipart].</b>
|
@@ -114,7 +141,7 @@ to test the file upload functionality of remotipart (since the browsers running
|
|
114
141
|
upload input using javascript). So, instead we created a demo Rails app using remotipart with all remotipart functionality tested using RSpec and Capybara.
|
115
142
|
|
116
143
|
* {Demo Rails App with Tests}[https://github.com/JangoSteve/Rails-jQuery-Demo/tree/remotipart]
|
117
|
-
* {Tests}[https://github.com/JangoSteve/Rails-jQuery-Demo/blob/
|
144
|
+
* {Tests}[https://github.com/JangoSteve/Rails-jQuery-Demo/blob/master/spec/features/comments_spec.rb]
|
118
145
|
|
119
146
|
To run tests:
|
120
147
|
|
data/Rakefile
CHANGED
@@ -21,13 +21,6 @@ rescue LoadError
|
|
21
21
|
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
22
22
|
end
|
23
23
|
|
24
|
-
require 'rake/testtask'
|
25
|
-
Rake::TestTask.new(:test) do |test|
|
26
|
-
test.libs << 'lib' << 'test'
|
27
|
-
test.pattern = 'test/**/test_*.rb'
|
28
|
-
test.verbose = true
|
29
|
-
end
|
30
|
-
|
31
24
|
begin
|
32
25
|
require 'rcov/rcovtask'
|
33
26
|
Rcov::RcovTask.new do |test|
|
@@ -51,3 +44,8 @@ Rake::RDocTask.new do |rdoc|
|
|
51
44
|
rdoc.rdoc_files.include('README*')
|
52
45
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
46
|
end
|
47
|
+
|
48
|
+
require 'rspec/core/rake_task'
|
49
|
+
RSpec::Core::RakeTask.new(:spec)
|
50
|
+
|
51
|
+
task default: :spec
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 3.2.0"
|
6
|
+
gem "test-unit", "~> 3.0"
|
7
|
+
gem "strong_parameters"
|
8
|
+
|
9
|
+
group :development do
|
10
|
+
gem "rake"
|
11
|
+
gem "jeweler"
|
12
|
+
end
|
13
|
+
|
14
|
+
group :development, :test do
|
15
|
+
gem "appraisal"
|
16
|
+
gem "jquery-rails"
|
17
|
+
gem "sqlite3", "~> 1.3.5"
|
18
|
+
gem "paperclip"
|
19
|
+
gem "remotipart", path: "../"
|
20
|
+
end
|
21
|
+
|
22
|
+
group :test do
|
23
|
+
gem "database_cleaner"
|
24
|
+
gem "poltergeist"
|
25
|
+
gem "rspec-rails"
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 4.2.0"
|
6
|
+
|
7
|
+
group :development do
|
8
|
+
gem "rake"
|
9
|
+
gem "jeweler"
|
10
|
+
end
|
11
|
+
|
12
|
+
group :development, :test do
|
13
|
+
gem "appraisal"
|
14
|
+
gem "jquery-rails"
|
15
|
+
gem "sqlite3", "~> 1.3.6"
|
16
|
+
gem "paperclip"
|
17
|
+
gem "remotipart", path: "../"
|
18
|
+
end
|
19
|
+
|
20
|
+
group :test do
|
21
|
+
gem "database_cleaner"
|
22
|
+
gem "poltergeist"
|
23
|
+
gem "rspec-rails"
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 5.2.0"
|
6
|
+
|
7
|
+
group :development do
|
8
|
+
gem "rake"
|
9
|
+
gem "jeweler"
|
10
|
+
end
|
11
|
+
|
12
|
+
group :development, :test do
|
13
|
+
gem "appraisal"
|
14
|
+
gem "jquery-rails"
|
15
|
+
gem "sqlite3"
|
16
|
+
gem "paperclip"
|
17
|
+
gem "remotipart", path: "../"
|
18
|
+
end
|
19
|
+
|
20
|
+
group :test do
|
21
|
+
gem "database_cleaner"
|
22
|
+
gem "poltergeist"
|
23
|
+
gem "rspec-rails"
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 6.0.0.rc1"
|
6
|
+
|
7
|
+
group :development do
|
8
|
+
gem "rake"
|
9
|
+
gem "jeweler"
|
10
|
+
end
|
11
|
+
|
12
|
+
group :development, :test do
|
13
|
+
gem "appraisal"
|
14
|
+
gem "jquery-rails"
|
15
|
+
gem "sqlite3"
|
16
|
+
gem "paperclip"
|
17
|
+
gem "remotipart", path: "../"
|
18
|
+
end
|
19
|
+
|
20
|
+
group :test do
|
21
|
+
gem "database_cleaner"
|
22
|
+
gem "poltergeist"
|
23
|
+
gem "rspec-rails"
|
24
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Remotipart
|
2
2
|
|
3
|
-
# A middleware to look for our form parameters and
|
3
|
+
# A middleware to look for our form parameters and
|
4
4
|
# encourage Rails to respond with the requested format
|
5
5
|
class Middleware
|
6
6
|
def initialize app
|
@@ -9,7 +9,12 @@ module Remotipart
|
|
9
9
|
|
10
10
|
def call env
|
11
11
|
# Get request params
|
12
|
-
|
12
|
+
begin
|
13
|
+
params = Rack::Request.new(env).params
|
14
|
+
rescue TypeError => e
|
15
|
+
::Rails.logger.warn e.message
|
16
|
+
::Rails.logger.warn e.backtrace.join("\n")
|
17
|
+
end
|
13
18
|
|
14
19
|
if params
|
15
20
|
# This was using an iframe transport, and is therefore an XHR
|
@@ -19,8 +24,8 @@ module Remotipart
|
|
19
24
|
end
|
20
25
|
|
21
26
|
# Override the accepted format, because it isn't what we really want
|
22
|
-
if params['X-
|
23
|
-
env['HTTP_ACCEPT'] = params['X-
|
27
|
+
if params['X-HTTP-Accept']
|
28
|
+
env['HTTP_ACCEPT'] = params['X-HTTP-Accept']
|
24
29
|
end
|
25
30
|
end
|
26
31
|
|
@@ -4,17 +4,27 @@ module Remotipart
|
|
4
4
|
|
5
5
|
class Engine < ::Rails::Engine
|
6
6
|
initializer "remotipart.view_helper" do
|
7
|
-
|
8
|
-
|
7
|
+
ActiveSupport.on_load :action_view do
|
8
|
+
include RequestHelper
|
9
|
+
include ViewHelper
|
10
|
+
end
|
9
11
|
end
|
10
12
|
|
11
13
|
initializer "remotipart.controller_helper" do
|
12
|
-
|
13
|
-
|
14
|
+
ActiveSupport.on_load :action_controller do
|
15
|
+
include RequestHelper
|
16
|
+
include RenderOverrides
|
17
|
+
end
|
14
18
|
end
|
15
19
|
|
16
20
|
initializer "remotipart.include_middelware" do
|
17
|
-
|
21
|
+
if ::Rails.version >= '5'
|
22
|
+
# Rails 5 no longer instantiates ActionDispatch::ParamsParser
|
23
|
+
# https://github.com/rails/rails/commit/a1ced8b52ce60d0634e65aa36cb89f015f9f543d
|
24
|
+
config.app_middleware.use Middleware
|
25
|
+
else
|
26
|
+
config.app_middleware.insert_after ActionDispatch::ParamsParser, Middleware
|
27
|
+
end
|
18
28
|
end
|
19
29
|
end
|
20
30
|
|
@@ -23,13 +23,17 @@ module Remotipart
|
|
23
23
|
end
|
24
24
|
|
25
25
|
initializer "remotipart.view_helper" do
|
26
|
-
|
27
|
-
|
26
|
+
ActiveSupport.on_load(:action_view) do
|
27
|
+
include RequestHelper
|
28
|
+
include ViewHelper
|
29
|
+
end
|
28
30
|
end
|
29
31
|
|
30
32
|
initializer "remotipart.controller_helper" do
|
31
|
-
|
32
|
-
|
33
|
+
ActiveSupport.on_load(:action_controller) do
|
34
|
+
include RequestHelper
|
35
|
+
include RenderOverrides
|
36
|
+
end
|
33
37
|
end
|
34
38
|
|
35
39
|
initializer "remotipart.include_middelware" do
|
@@ -3,21 +3,43 @@ module Remotipart
|
|
3
3
|
# as expected by iframe-transport.
|
4
4
|
module RenderOverrides
|
5
5
|
include ERB::Util
|
6
|
+
include ActionView::Helpers::JavaScriptHelper
|
6
7
|
|
7
8
|
def self.included(base)
|
8
9
|
base.class_eval do
|
9
|
-
|
10
|
+
if respond_to? :prepend
|
11
|
+
base.prepend Prependable
|
12
|
+
else
|
13
|
+
base.include Includable
|
14
|
+
# Do not use alias_method_chain for compatibility
|
15
|
+
alias render_without_remotipart render
|
16
|
+
alias render render_with_remotipart
|
17
|
+
end
|
10
18
|
end
|
11
19
|
end
|
12
20
|
|
13
|
-
|
14
|
-
|
21
|
+
module Prependable
|
22
|
+
def render(*args, &block)
|
23
|
+
treat_render_for_remotipart super(*args, &block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Includable
|
28
|
+
def render_with_remotipart(*args, &block)
|
29
|
+
treat_render_for_remotipart render_without_remotipart(*args, &block)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def treat_render_for_remotipart(render_return_value)
|
15
36
|
if remotipart_submitted?
|
16
|
-
|
17
|
-
response.
|
18
|
-
|
37
|
+
response.body = %{<script type="text/javascript">try{window.parent.document;}catch(err){document.domain=document.domain;}</script><textarea data-type="#{response.content_type}" data-status="#{response.response_code}" data-statusText="#{response.message}"></textarea><script type="text/javascript">document.querySelector("textarea").value="#{escape_javascript(response.body)}";</script>}
|
38
|
+
response.content_type = ::Rails.version >= '5' ? Mime[:html] : Mime::HTML
|
39
|
+
response_body
|
40
|
+
else
|
41
|
+
render_return_value
|
19
42
|
end
|
20
|
-
response_body
|
21
43
|
end
|
22
44
|
end
|
23
45
|
end
|