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.
Files changed (77) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +35 -0
  3. data/Appraisals +25 -0
  4. data/Gemfile +14 -1
  5. data/History.rdoc +27 -0
  6. data/README.rdoc +2 -0
  7. data/Rakefile +5 -7
  8. data/gemfiles/rails_3.2.gemfile +26 -0
  9. data/gemfiles/rails_4.2.gemfile +24 -0
  10. data/gemfiles/rails_5.2.gemfile +24 -0
  11. data/gemfiles/rails_6.0.gemfile +24 -0
  12. data/lib/remotipart/middleware.rb +2 -2
  13. data/lib/remotipart/rails/engine.rb +8 -4
  14. data/lib/remotipart/rails/railtie.rb +8 -4
  15. data/lib/remotipart/rails/version.rb +2 -2
  16. data/lib/remotipart/render_overrides.rb +28 -8
  17. data/lib/remotipart/request_helper.rb +2 -0
  18. data/lib/remotipart/view_helper.rb +2 -0
  19. data/remotipart.gemspec +94 -18
  20. data/spec/dummy_app/.gitignore +17 -0
  21. data/spec/dummy_app/Rakefile +7 -0
  22. data/spec/dummy_app/app/assets/config/manifest.js +4 -0
  23. data/spec/dummy_app/app/assets/images/rails.png +0 -0
  24. data/spec/dummy_app/app/assets/javascripts/application.js.erb +8 -0
  25. data/spec/dummy_app/app/assets/javascripts/comments.js +28 -0
  26. data/spec/dummy_app/app/assets/stylesheets/application.css +6 -0
  27. data/spec/dummy_app/app/assets/stylesheets/scaffold.css +65 -0
  28. data/spec/dummy_app/app/controllers/application_controller.rb +3 -0
  29. data/spec/dummy_app/app/controllers/comments_controller.rb +72 -0
  30. data/spec/dummy_app/app/controllers/prepended_controller.rb +9 -0
  31. data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
  32. data/spec/dummy_app/app/helpers/comments_helper.rb +2 -0
  33. data/spec/dummy_app/app/models/comment.rb +7 -0
  34. data/spec/dummy_app/app/views/comments/_comment.html.erb +9 -0
  35. data/spec/dummy_app/app/views/comments/_form.html.erb +40 -0
  36. data/spec/dummy_app/app/views/comments/_new_comment_links.html.erb +5 -0
  37. data/spec/dummy_app/app/views/comments/create.html.erb +7 -0
  38. data/spec/dummy_app/app/views/comments/create.js.erb +20 -0
  39. data/spec/dummy_app/app/views/comments/destroy.js.erb +1 -0
  40. data/spec/dummy_app/app/views/comments/edit.html.erb +6 -0
  41. data/spec/dummy_app/app/views/comments/escape_test.html.erb +1 -0
  42. data/spec/dummy_app/app/views/comments/index.html.erb +19 -0
  43. data/spec/dummy_app/app/views/comments/new.html.erb +7 -0
  44. data/spec/dummy_app/app/views/comments/show.html.erb +15 -0
  45. data/spec/dummy_app/app/views/layouts/application.html.erb +14 -0
  46. data/spec/dummy_app/app/views/prepended/show.html.erb +1 -0
  47. data/spec/dummy_app/bin/bundle +3 -0
  48. data/spec/dummy_app/bin/rails +4 -0
  49. data/spec/dummy_app/bin/rake +4 -0
  50. data/spec/dummy_app/bin/setup +34 -0
  51. data/spec/dummy_app/bin/update +29 -0
  52. data/spec/dummy_app/config/application.rb +18 -0
  53. data/spec/dummy_app/config/boot.rb +3 -0
  54. data/spec/dummy_app/config/database.yml +7 -0
  55. data/spec/dummy_app/config/environment.rb +5 -0
  56. data/spec/dummy_app/config/environments/development.rb +54 -0
  57. data/spec/dummy_app/config/environments/test.rb +53 -0
  58. data/spec/dummy_app/config/initializers/secret_token.rb +3 -0
  59. data/spec/dummy_app/config/routes.rb +7 -0
  60. data/spec/dummy_app/config/secrets.yml +5 -0
  61. data/spec/dummy_app/config.ru +4 -0
  62. data/spec/dummy_app/db/migrate/20110209210252_create_comments.rb +14 -0
  63. data/spec/dummy_app/db/migrate/20110209210315_add_attachment_to_comment.rb +15 -0
  64. data/spec/dummy_app/db/migrate/20110714205346_add_other_attachment_to_comment.rb +8 -0
  65. data/spec/dummy_app/db/schema.rb +31 -0
  66. data/spec/dummy_app/db/seeds.rb +7 -0
  67. data/spec/features/comments_spec.rb +414 -0
  68. data/spec/features/prepended_spec.rb +9 -0
  69. data/spec/fixtures/hi.txt +1 -0
  70. data/spec/fixtures/qr.jpg +0 -0
  71. data/spec/spec_helper.rb +40 -0
  72. data/spec/support/arel_helper.rb +15 -0
  73. data/spec/support/connection_helper.rb +12 -0
  74. data/spec/support/integration_helper.rb +28 -0
  75. data/vendor/assets/javascripts/jquery.iframe-transport.js +40 -29
  76. data/vendor/assets/javascripts/jquery.remotipart.js +1 -1
  77. metadata +134 -4
@@ -1,12 +1,12 @@
1
- // This [jQuery](http://jquery.com/) plugin implements an `<iframe>`
2
- // [transport](http://api.jquery.com/extending-ajax/#Transports) so that
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](http://github.com/cmlenz/jquery-iframe-transport)
8
- // is available on [Github](http://github.com/) and dual licensed under the MIT
9
- // or GPL Version 2 licenses.
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()` callbacks. You can only determine communicate problems using
74
- // the content of the response payload. For example, consider using a JSON
75
- // response such as the following to indicate a problem with an uploaded file:
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
- markers.each(function(i){
119
- $(this).replaceWith(files[i]);
120
- markers.splice(i, 1);
119
+ files.each(function(i, file) {
120
+ var $file = $(file);
121
+ $file.data("clone").replaceWith($file);
121
122
  });
122
123
  form.remove();
123
- iframe.bind("load", function() { iframe.remove(); });
124
- iframe.attr("src", "javascript:false;");
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.url, target: name});
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 HTTP_ACCEPTS
160
- accepts = options.dataTypes[ 0 ] && options.accepts[ options.dataTypes[0] ] ?
161
- options.accepts[ options.dataTypes[0] ] + ( options.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
162
- options.accepts[ "*" ]
163
-
164
- $("<input type='hidden' name='X-Http-Accept'>")
165
- .attr("value", accepts).appendTo(form);
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
- return $(this).clone().prop("disabled", true);
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='javascript:false;' name='" + name +
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.bind("load", function() {
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.unbind("load").bind("load", function() {
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", "javascript:false;");
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).complete(function(data){
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.3.0
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: 2016-09-14 00:00:00.000000000 Z
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
- rubyforge_project:
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