remotipart 1.3.0 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.travis.yml +35 -0
- data/Appraisals +25 -0
- data/Gemfile +14 -1
- data/History.rdoc +27 -0
- data/README.rdoc +2 -0
- 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 +2 -2
- data/lib/remotipart/rails/engine.rb +8 -4
- data/lib/remotipart/rails/railtie.rb +8 -4
- data/lib/remotipart/rails/version.rb +2 -2
- data/lib/remotipart/render_overrides.rb +28 -8
- data/lib/remotipart/request_helper.rb +2 -0
- data/lib/remotipart/view_helper.rb +2 -0
- data/remotipart.gemspec +94 -18
- 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 +40 -29
- data/vendor/assets/javascripts/jquery.remotipart.js +1 -1
- metadata +134 -4
@@ -1,12 +1,12 @@
|
|
1
|
-
// This [jQuery](
|
2
|
-
// [transport](
|
1
|
+
// This [jQuery](https://jquery.com/) plugin implements an `<iframe>`
|
2
|
+
// [transport](https://api.jquery.com/jQuery.ajax/#extending-ajax) so that
|
3
3
|
// `$.ajax()` calls support the uploading of files using standard HTML file
|
4
4
|
// input fields. This is done by switching the exchange from `XMLHttpRequest`
|
5
5
|
// to a hidden `iframe` element containing a form that is submitted.
|
6
6
|
|
7
|
-
// The [source for the plugin](
|
8
|
-
// is available on [Github](
|
9
|
-
//
|
7
|
+
// The [source for the plugin](https://github.com/cmlenz/jquery-iframe-transport)
|
8
|
+
// is available on [Github](https://github.com/) and licensed under the [MIT
|
9
|
+
// license](https://github.com/cmlenz/jquery-iframe-transport/blob/master/LICENSE).
|
10
10
|
|
11
11
|
// ## Usage
|
12
12
|
|
@@ -70,9 +70,9 @@
|
|
70
70
|
// impossible for the javascript code to determine the HTTP status code of the
|
71
71
|
// servers response. Effectively, all of the calls you make will look like they
|
72
72
|
// are getting successful responses, and thus invoke the `done()` or
|
73
|
-
// `complete()`
|
74
|
-
//
|
75
|
-
//
|
73
|
+
// `complete()` callbacks. You can only communicate problems using the content
|
74
|
+
// of the response payload. For example, consider using a JSON response such as
|
75
|
+
// the following to indicate a problem with an uploaded file:
|
76
76
|
|
77
77
|
// <textarea data-type="application/json">
|
78
78
|
// {"ok": false, "message": "Please only upload reasonably sized files."}
|
@@ -96,6 +96,7 @@
|
|
96
96
|
// switches to the "iframe" data type if it is `true`.
|
97
97
|
$.ajaxPrefilter(function(options, origOptions, jqXHR) {
|
98
98
|
if (options.iframe) {
|
99
|
+
options.originalURL = options.url;
|
99
100
|
return "iframe";
|
100
101
|
}
|
101
102
|
});
|
@@ -109,19 +110,19 @@
|
|
109
110
|
name = "iframe-" + $.now(),
|
110
111
|
files = $(options.files).filter(":file:enabled"),
|
111
112
|
markers = null,
|
112
|
-
accepts;
|
113
|
+
accepts = null;
|
113
114
|
|
114
115
|
// This function gets called after a successful submission or an abortion
|
115
116
|
// and should revert all changes made to the page to enable the
|
116
117
|
// submission via this transport.
|
117
118
|
function cleanUp() {
|
118
|
-
|
119
|
-
$(
|
120
|
-
|
119
|
+
files.each(function(i, file) {
|
120
|
+
var $file = $(file);
|
121
|
+
$file.data("clone").replaceWith($file);
|
121
122
|
});
|
122
123
|
form.remove();
|
123
|
-
iframe.
|
124
|
-
iframe.attr("src", "
|
124
|
+
iframe.one("load", function() { iframe.remove(); });
|
125
|
+
iframe.attr("src", "about:blank");
|
125
126
|
}
|
126
127
|
|
127
128
|
// Remove "iframe" from the data types list so that further processing is
|
@@ -129,9 +130,14 @@
|
|
129
130
|
// (unsupported) conversion from "iframe" to the actual type.
|
130
131
|
options.dataTypes.shift();
|
131
132
|
|
133
|
+
// Use the data from the original AJAX options, as it doesn't seem to be
|
134
|
+
// copied over since jQuery 1.7.
|
135
|
+
// See https://github.com/cmlenz/jquery-iframe-transport/issues/6
|
136
|
+
options.data = origOptions.data;
|
137
|
+
|
132
138
|
if (files.length) {
|
133
139
|
form = $("<form enctype='multipart/form-data' method='post'></form>").
|
134
|
-
hide().attr({action: options.
|
140
|
+
hide().attr({action: options.originalURL, target: name});
|
135
141
|
|
136
142
|
// If there is any additional data specified via the `data` option,
|
137
143
|
// we add it as hidden fields to the form. This (currently) requires
|
@@ -155,21 +161,27 @@
|
|
155
161
|
$("<input type='hidden' value='IFrame' name='X-Requested-With' />").
|
156
162
|
appendTo(form);
|
157
163
|
|
158
|
-
// Borrowed straight from the JQuery source
|
159
|
-
// Provides a way of specifying the accepted data type similar to
|
160
|
-
|
161
|
-
|
162
|
-
options.accepts[
|
163
|
-
|
164
|
-
|
165
|
-
.
|
164
|
+
// Borrowed straight from the JQuery source.
|
165
|
+
// Provides a way of specifying the accepted data type similar to the
|
166
|
+
// HTTP "Accept" header
|
167
|
+
if (options.dataTypes[0] && options.accepts[options.dataTypes[0]]) {
|
168
|
+
accepts = options.accepts[options.dataTypes[0]] +
|
169
|
+
(options.dataTypes[0] !== "*" ? ", */*; q=0.01" : "");
|
170
|
+
} else {
|
171
|
+
accepts = options.accepts["*"];
|
172
|
+
}
|
173
|
+
$("<input type='hidden' name='X-HTTP-Accept'>").
|
174
|
+
attr("value", accepts).appendTo(form);
|
166
175
|
|
167
176
|
// Move the file fields into the hidden form, but first remember their
|
168
177
|
// original locations in the document by replacing them with disabled
|
169
178
|
// clones. This should also avoid introducing unwanted changes to the
|
170
179
|
// page layout during submission.
|
171
180
|
markers = files.after(function(idx) {
|
172
|
-
|
181
|
+
var $this = $(this),
|
182
|
+
$clone = $this.clone().prop("disabled", true);
|
183
|
+
$this.data("clone", $clone);
|
184
|
+
return $clone;
|
173
185
|
}).next();
|
174
186
|
files.appendTo(form);
|
175
187
|
|
@@ -178,18 +190,18 @@
|
|
178
190
|
// The `send` function is called by jQuery when the request should be
|
179
191
|
// sent.
|
180
192
|
send: function(headers, completeCallback) {
|
181
|
-
iframe = $("<iframe src='
|
193
|
+
iframe = $("<iframe src='about:blank' name='" + name +
|
182
194
|
"' id='" + name + "' style='display:none'></iframe>");
|
183
195
|
|
184
196
|
// The first load event gets fired after the iframe has been injected
|
185
197
|
// into the DOM, and is used to prepare the actual submission.
|
186
|
-
iframe.
|
198
|
+
iframe.one("load", function() {
|
187
199
|
|
188
200
|
// The second load event gets fired when the response to the form
|
189
201
|
// submission is received. The implementation detects whether the
|
190
202
|
// actual payload is embedded in a `<textarea>` element, and
|
191
203
|
// prepares the required conversions to be made in that case.
|
192
|
-
iframe.
|
204
|
+
iframe.one("load", function() {
|
193
205
|
var doc = this.contentWindow ? this.contentWindow.document :
|
194
206
|
(this.contentDocument ? this.contentDocument : this.document),
|
195
207
|
root = doc.documentElement ? doc.documentElement : doc.body,
|
@@ -198,7 +210,6 @@
|
|
198
210
|
status = textarea && textarea.getAttribute("data-status") || 200,
|
199
211
|
statusText = textarea && textarea.getAttribute("data-statusText") || "OK",
|
200
212
|
content = {
|
201
|
-
html: root.innerHTML,
|
202
213
|
text: type ?
|
203
214
|
textarea.value :
|
204
215
|
root ? (root.textContent || root.innerText) : null
|
@@ -226,7 +237,7 @@
|
|
226
237
|
// aborted.
|
227
238
|
abort: function() {
|
228
239
|
if (iframe !== null) {
|
229
|
-
iframe.unbind("load").attr("src", "
|
240
|
+
iframe.unbind("load").attr("src", "about:blank");
|
230
241
|
cleanUp();
|
231
242
|
}
|
232
243
|
}
|
@@ -51,7 +51,7 @@
|
|
51
51
|
// Allow remotipartSubmit to be cancelled if needed
|
52
52
|
if ($.rails.fire(form, 'ajax:remotipartSubmit', [xhr, settings])) {
|
53
53
|
// Second verse, same as the first
|
54
|
-
$.rails.ajax(settings).
|
54
|
+
$.rails.ajax(settings).always(function(data){
|
55
55
|
$.rails.fire(form, 'ajax:remotipartComplete', [data]);
|
56
56
|
});
|
57
57
|
setTimeout(function(){ $.rails.disableFormElements(form); }, 20);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remotipart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Leppert
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -39,6 +39,76 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: appraisal
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: jquery-rails
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: sqlite3
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: paperclip
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: remotipart
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
42
112
|
description: "Remotipart is a Ruby on Rails gem enabling remote multipart forms (AJAX
|
43
113
|
style file uploads) with jquery-rails.\n This gem augments the native Rails 3
|
44
114
|
jQuery-UJS remote form function enabling asynchronous file uploads with little to
|
@@ -53,6 +123,8 @@ extra_rdoc_files:
|
|
53
123
|
- README.rdoc
|
54
124
|
files:
|
55
125
|
- ".document"
|
126
|
+
- ".travis.yml"
|
127
|
+
- Appraisals
|
56
128
|
- CONTRIBUTING.md
|
57
129
|
- Gemfile
|
58
130
|
- History.rdoc
|
@@ -60,6 +132,10 @@ files:
|
|
60
132
|
- README.rdoc
|
61
133
|
- Rakefile
|
62
134
|
- VERSION_COMPATIBILITY.rdoc
|
135
|
+
- gemfiles/rails_3.2.gemfile
|
136
|
+
- gemfiles/rails_4.2.gemfile
|
137
|
+
- gemfiles/rails_5.2.gemfile
|
138
|
+
- gemfiles/rails_6.0.gemfile
|
63
139
|
- lib/generators/remotipart/install/install_generator.rb
|
64
140
|
- lib/remotipart.rb
|
65
141
|
- lib/remotipart/middleware.rb
|
@@ -71,6 +147,61 @@ files:
|
|
71
147
|
- lib/remotipart/request_helper.rb
|
72
148
|
- lib/remotipart/view_helper.rb
|
73
149
|
- remotipart.gemspec
|
150
|
+
- spec/dummy_app/.gitignore
|
151
|
+
- spec/dummy_app/Rakefile
|
152
|
+
- spec/dummy_app/app/assets/config/manifest.js
|
153
|
+
- spec/dummy_app/app/assets/images/rails.png
|
154
|
+
- spec/dummy_app/app/assets/javascripts/application.js.erb
|
155
|
+
- spec/dummy_app/app/assets/javascripts/comments.js
|
156
|
+
- spec/dummy_app/app/assets/stylesheets/application.css
|
157
|
+
- spec/dummy_app/app/assets/stylesheets/scaffold.css
|
158
|
+
- spec/dummy_app/app/controllers/application_controller.rb
|
159
|
+
- spec/dummy_app/app/controllers/comments_controller.rb
|
160
|
+
- spec/dummy_app/app/controllers/prepended_controller.rb
|
161
|
+
- spec/dummy_app/app/helpers/application_helper.rb
|
162
|
+
- spec/dummy_app/app/helpers/comments_helper.rb
|
163
|
+
- spec/dummy_app/app/models/comment.rb
|
164
|
+
- spec/dummy_app/app/views/comments/_comment.html.erb
|
165
|
+
- spec/dummy_app/app/views/comments/_form.html.erb
|
166
|
+
- spec/dummy_app/app/views/comments/_new_comment_links.html.erb
|
167
|
+
- spec/dummy_app/app/views/comments/create.html.erb
|
168
|
+
- spec/dummy_app/app/views/comments/create.js.erb
|
169
|
+
- spec/dummy_app/app/views/comments/destroy.js.erb
|
170
|
+
- spec/dummy_app/app/views/comments/edit.html.erb
|
171
|
+
- spec/dummy_app/app/views/comments/escape_test.html.erb
|
172
|
+
- spec/dummy_app/app/views/comments/index.html.erb
|
173
|
+
- spec/dummy_app/app/views/comments/new.html.erb
|
174
|
+
- spec/dummy_app/app/views/comments/show.html.erb
|
175
|
+
- spec/dummy_app/app/views/layouts/application.html.erb
|
176
|
+
- spec/dummy_app/app/views/prepended/show.html.erb
|
177
|
+
- spec/dummy_app/bin/bundle
|
178
|
+
- spec/dummy_app/bin/rails
|
179
|
+
- spec/dummy_app/bin/rake
|
180
|
+
- spec/dummy_app/bin/setup
|
181
|
+
- spec/dummy_app/bin/update
|
182
|
+
- spec/dummy_app/config.ru
|
183
|
+
- spec/dummy_app/config/application.rb
|
184
|
+
- spec/dummy_app/config/boot.rb
|
185
|
+
- spec/dummy_app/config/database.yml
|
186
|
+
- spec/dummy_app/config/environment.rb
|
187
|
+
- spec/dummy_app/config/environments/development.rb
|
188
|
+
- spec/dummy_app/config/environments/test.rb
|
189
|
+
- spec/dummy_app/config/initializers/secret_token.rb
|
190
|
+
- spec/dummy_app/config/routes.rb
|
191
|
+
- spec/dummy_app/config/secrets.yml
|
192
|
+
- spec/dummy_app/db/migrate/20110209210252_create_comments.rb
|
193
|
+
- spec/dummy_app/db/migrate/20110209210315_add_attachment_to_comment.rb
|
194
|
+
- spec/dummy_app/db/migrate/20110714205346_add_other_attachment_to_comment.rb
|
195
|
+
- spec/dummy_app/db/schema.rb
|
196
|
+
- spec/dummy_app/db/seeds.rb
|
197
|
+
- spec/features/comments_spec.rb
|
198
|
+
- spec/features/prepended_spec.rb
|
199
|
+
- spec/fixtures/hi.txt
|
200
|
+
- spec/fixtures/qr.jpg
|
201
|
+
- spec/spec_helper.rb
|
202
|
+
- spec/support/arel_helper.rb
|
203
|
+
- spec/support/connection_helper.rb
|
204
|
+
- spec/support/integration_helper.rb
|
74
205
|
- vendor/assets/javascripts/jquery.iframe-transport.js
|
75
206
|
- vendor/assets/javascripts/jquery.remotipart.js
|
76
207
|
homepage: http://opensource.alfajango.com/remotipart/
|
@@ -91,8 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
222
|
- !ruby/object:Gem::Version
|
92
223
|
version: '0'
|
93
224
|
requirements: []
|
94
|
-
|
95
|
-
rubygems_version: 2.5.1
|
225
|
+
rubygems_version: 3.0.3
|
96
226
|
signing_key:
|
97
227
|
specification_version: 4
|
98
228
|
summary: Remotipart is a Ruby on Rails gem enabling remote multipart forms (AJAX style
|