remotipart 1.3.1 → 1.4.0
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 +4 -4
- data/History.rdoc +9 -0
- data/lib/remotipart/middleware.rb +2 -2
- data/lib/remotipart/rails/railtie.rb +8 -4
- data/lib/remotipart/rails/version.rb +1 -1
- data/lib/remotipart/render_overrides.rb +5 -3
- data/lib/remotipart/view_helper.rb +11 -0
- data/remotipart.gemspec +18 -18
- data/vendor/assets/javascripts/jquery.iframe-transport.js +38 -29
- data/vendor/assets/javascripts/jquery.remotipart.js +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cd835a42fa4b39f9472499d433674c148afed2b
|
4
|
+
data.tar.gz: 487e0694c4122c8002f6da0f2b6466ec2b870a78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4173afdbc5e749e062b62d7370ff379d70302645fa0be40f0593d17f8a88d494f63c0606a396d79419ad3eb9b8776e53ea34f838deecc3748a9ee73d63688ba7
|
7
|
+
data.tar.gz: 457e29566c8271872d61703a68db861223dd5686421652cb35bdd7b7a75546bfe5afd900eefc848d7899c2a6bc2ebd056eeed000c13d8e8cd16a5514bfbcd8db
|
data/History.rdoc
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
= History
|
2
2
|
|
3
|
+
=== 1.4.0 / 2018-04-09
|
4
|
+
|
5
|
+
* Added jQuery 3 compatibility.
|
6
|
+
* Changed to use ActiveSupport lazy load hooks on initialization.
|
7
|
+
* Changed jQuery iframe-transport to v1.0.1.
|
8
|
+
* Fixed to preserve original return value of render call for non-remotipart requests.
|
9
|
+
* Fixed remote javascript with " not being executed.
|
10
|
+
* Fixed method signature of render_with_remotipart, making RJS templates not usable.
|
11
|
+
|
3
12
|
=== 1.3.1 / 2016-10-06
|
4
13
|
|
5
14
|
* Fixed remote form submit not working with Firefox 49.
|
@@ -24,8 +24,8 @@ module Remotipart
|
|
24
24
|
end
|
25
25
|
|
26
26
|
# Override the accepted format, because it isn't what we really want
|
27
|
-
if params['X-
|
28
|
-
env['HTTP_ACCEPT'] = params['X-
|
27
|
+
if params['X-HTTP-Accept']
|
28
|
+
env['HTTP_ACCEPT'] = params['X-HTTP-Accept']
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -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
|
@@ -12,14 +12,16 @@ module Remotipart
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
def render_with_remotipart
|
16
|
-
render_without_remotipart
|
15
|
+
def render_with_remotipart(*args, &block)
|
16
|
+
render_return_value = render_without_remotipart(*args, &block)
|
17
17
|
if remotipart_submitted?
|
18
18
|
textarea_body = response.content_type == 'text/html' ? html_escape(response.body) : response.body
|
19
19
|
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_body}</textarea>}
|
20
20
|
response.content_type = ::Rails.version >= '5' ? Mime[:html] : Mime::HTML
|
21
|
+
response_body
|
22
|
+
else
|
23
|
+
render_return_value
|
21
24
|
end
|
22
|
-
response_body
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
@@ -1,9 +1,20 @@
|
|
1
1
|
module Remotipart
|
2
2
|
module ViewHelper
|
3
|
+
|
4
|
+
def escape_javascript(javascript)
|
5
|
+
if remotipart_submitted?
|
6
|
+
super("#{javascript}")
|
7
|
+
else
|
8
|
+
super
|
9
|
+
end
|
10
|
+
end
|
11
|
+
alias_method :j, :escape_javascript
|
12
|
+
|
3
13
|
#No longer used
|
4
14
|
#Retrained to prevent issues while updating
|
5
15
|
def remotipart_response(options = {}, &block)
|
6
16
|
with_output_buffer(&block)
|
7
17
|
end
|
18
|
+
|
8
19
|
end
|
9
20
|
end
|
data/remotipart.gemspec
CHANGED
@@ -2,18 +2,18 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: remotipart 1.
|
5
|
+
# stub: remotipart 1.4.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
|
-
s.name = "remotipart"
|
9
|
-
s.version = "1.
|
8
|
+
s.name = "remotipart".freeze
|
9
|
+
s.version = "1.4.0"
|
10
10
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
-
s.require_paths = ["lib"]
|
13
|
-
s.authors = ["Greg Leppert", "Steve Schwartz"]
|
14
|
-
s.date = "
|
15
|
-
s.description = "Remotipart is a Ruby on Rails gem enabling remote multipart forms (AJAX style file uploads) with jquery-rails.\n This gem augments the native Rails 3 jQuery-UJS remote form function enabling asynchronous file uploads with little to no modification to your application.\n "
|
16
|
-
s.email = ["greg@formasfunction.com", "steve@alfajango.com"]
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["Greg Leppert".freeze, "Steve Schwartz".freeze]
|
14
|
+
s.date = "2018-04-09"
|
15
|
+
s.description = "Remotipart is a Ruby on Rails gem enabling remote multipart forms (AJAX style file uploads) with jquery-rails.\n This gem augments the native Rails 3 jQuery-UJS remote form function enabling asynchronous file uploads with little to no modification to your application.\n ".freeze
|
16
|
+
s.email = ["greg@formasfunction.com".freeze, "steve@alfajango.com".freeze]
|
17
17
|
s.extra_rdoc_files = [
|
18
18
|
"LICENSE",
|
19
19
|
"README.rdoc"
|
@@ -41,23 +41,23 @@ Gem::Specification.new do |s|
|
|
41
41
|
"vendor/assets/javascripts/jquery.iframe-transport.js",
|
42
42
|
"vendor/assets/javascripts/jquery.remotipart.js"
|
43
43
|
]
|
44
|
-
s.homepage = "http://opensource.alfajango.com/remotipart/"
|
45
|
-
s.rubygems_version = "2.5.
|
46
|
-
s.summary = "Remotipart is a Ruby on Rails gem enabling remote multipart forms (AJAX style file uploads) with jquery-rails."
|
44
|
+
s.homepage = "http://opensource.alfajango.com/remotipart/".freeze
|
45
|
+
s.rubygems_version = "2.5.2".freeze
|
46
|
+
s.summary = "Remotipart is a Ruby on Rails gem enabling remote multipart forms (AJAX style file uploads) with jquery-rails.".freeze
|
47
47
|
|
48
48
|
if s.respond_to? :specification_version then
|
49
49
|
s.specification_version = 4
|
50
50
|
|
51
51
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
52
|
-
s.add_development_dependency(%q<rake
|
53
|
-
s.add_development_dependency(%q<jeweler
|
52
|
+
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
53
|
+
s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
|
54
54
|
else
|
55
|
-
s.add_dependency(%q<rake
|
56
|
-
s.add_dependency(%q<jeweler
|
55
|
+
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
56
|
+
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
57
57
|
end
|
58
58
|
else
|
59
|
-
s.add_dependency(%q<rake
|
60
|
-
s.add_dependency(%q<jeweler
|
59
|
+
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
60
|
+
s.add_dependency(%q<jeweler>.freeze, [">= 0"])
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -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,18 +110,18 @@
|
|
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.one("load", function() { iframe.remove(); });
|
124
125
|
iframe.attr("src", "about:blank");
|
125
126
|
}
|
126
127
|
|
@@ -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
|
|
@@ -183,13 +195,13 @@
|
|
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,
|
@@ -204,9 +216,6 @@
|
|
204
216
|
root ? (root.textContent || root.innerText) : null
|
205
217
|
};
|
206
218
|
cleanUp();
|
207
|
-
if (!jqXHR.responseText) {
|
208
|
-
jqXHR.responseText = content.text;
|
209
|
-
}
|
210
219
|
completeCallback(status, statusText, content, type ?
|
211
220
|
("Content-Type: " + type) :
|
212
221
|
null);
|
@@ -226,7 +235,7 @@
|
|
226
235
|
// aborted.
|
227
236
|
abort: function() {
|
228
237
|
if (iframe !== null) {
|
229
|
-
iframe.unbind("load").attr("src", "
|
238
|
+
iframe.unbind("load").attr("src", "about:blank");
|
230
239
|
cleanUp();
|
231
240
|
}
|
232
241
|
}
|
@@ -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.0
|
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: 2018-04-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
92
|
version: '0'
|
93
93
|
requirements: []
|
94
94
|
rubyforge_project:
|
95
|
-
rubygems_version: 2.5.
|
95
|
+
rubygems_version: 2.5.2
|
96
96
|
signing_key:
|
97
97
|
specification_version: 4
|
98
98
|
summary: Remotipart is a Ruby on Rails gem enabling remote multipart forms (AJAX style
|