jquery.fileupload-rails 0.0.1 → 0.1.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.
- data/Readme.md +14 -0
- data/lib/jquery.fileupload-rails/version.rb +1 -1
- data/vendor/assets/javascripts/jquery.fileupload-ip.js +160 -0
- data/vendor/assets/javascripts/jquery.fileupload-ui.js +342 -371
- data/vendor/assets/javascripts/jquery.fileupload.js +87 -46
- data/vendor/assets/javascripts/jquery.iframe-transport.js +14 -5
- data/vendor/assets/javascripts/jquery.postmessage-transport.js +14 -5
- data/vendor/assets/javascripts/jquery.xdr-transport.js +18 -9
- data/vendor/assets/stylesheets/jquery.fileupload-ui.css +52 -68
- metadata +4 -2
@@ -1,19 +1,37 @@
|
|
1
1
|
/*
|
2
|
-
* jQuery File Upload Plugin 5.
|
2
|
+
* jQuery File Upload Plugin 5.9
|
3
3
|
* https://github.com/blueimp/jQuery-File-Upload
|
4
4
|
*
|
5
5
|
* Copyright 2010, Sebastian Tschan
|
6
6
|
* https://blueimp.net
|
7
7
|
*
|
8
8
|
* Licensed under the MIT license:
|
9
|
-
* http://
|
9
|
+
* http://www.opensource.org/licenses/MIT
|
10
10
|
*/
|
11
11
|
|
12
12
|
/*jslint nomen: true, unparam: true, regexp: true */
|
13
|
-
/*global
|
13
|
+
/*global define, window, document, Blob, FormData, location */
|
14
14
|
|
15
|
-
(function (
|
15
|
+
(function (factory) {
|
16
16
|
'use strict';
|
17
|
+
if (typeof define === 'function' && define.amd) {
|
18
|
+
// Register as an anonymous AMD module:
|
19
|
+
define([
|
20
|
+
'jquery',
|
21
|
+
'jquery.ui.widget'
|
22
|
+
], factory);
|
23
|
+
} else {
|
24
|
+
// Browser globals:
|
25
|
+
factory(window.jQuery);
|
26
|
+
}
|
27
|
+
}(function ($) {
|
28
|
+
'use strict';
|
29
|
+
|
30
|
+
// The FileReader API is not actually used, but works as feature detection,
|
31
|
+
// as e.g. Safari supports XHR file uploads via the FormData API,
|
32
|
+
// but not non-multipart XHR file uploads:
|
33
|
+
$.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
|
34
|
+
$.support.xhrFormDataFileUpload = !!window.FormData;
|
17
35
|
|
18
36
|
// The fileupload widget listens for change events on file input fields defined
|
19
37
|
// via fileInput setting and paste or drop events of the given dropZone.
|
@@ -62,6 +80,12 @@
|
|
62
80
|
limitConcurrentUploads: undefined,
|
63
81
|
// Set the following option to true to force iframe transport uploads:
|
64
82
|
forceIframeTransport: false,
|
83
|
+
// Set the following option to the location of a redirect url on the
|
84
|
+
// origin server, for cross-domain iframe transport uploads:
|
85
|
+
redirect: undefined,
|
86
|
+
// The parameter name for the redirect url, sent as part of the form
|
87
|
+
// data and set to 'redirect' if this option is empty:
|
88
|
+
redirectParamName: undefined,
|
65
89
|
// Set the following option to the location of a postMessage window,
|
66
90
|
// to enable postMessage transport uploads:
|
67
91
|
postMessage: undefined,
|
@@ -147,13 +171,18 @@
|
|
147
171
|
},
|
148
172
|
|
149
173
|
// A list of options that require a refresh after assigning a new value:
|
150
|
-
_refreshOptionsList: [
|
174
|
+
_refreshOptionsList: [
|
175
|
+
'namespace',
|
176
|
+
'dropZone',
|
177
|
+
'fileInput',
|
178
|
+
'multipart',
|
179
|
+
'forceIframeTransport'
|
180
|
+
],
|
151
181
|
|
152
182
|
_isXHRUpload: function (options) {
|
153
|
-
var undef = 'undefined';
|
154
183
|
return !options.forceIframeTransport &&
|
155
|
-
|
156
|
-
|
184
|
+
((!options.multipart && $.support.xhrFileUpload) ||
|
185
|
+
$.support.xhrFormDataFileUpload);
|
157
186
|
},
|
158
187
|
|
159
188
|
_getFormData: function (options) {
|
@@ -210,10 +239,15 @@
|
|
210
239
|
xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
|
211
240
|
// Accesss to the native XHR object is required to add event listeners
|
212
241
|
// for the upload progress event:
|
213
|
-
if (xhr.upload
|
214
|
-
xhr.upload.
|
242
|
+
if (xhr.upload) {
|
243
|
+
$(xhr.upload).bind('progress', function (e) {
|
244
|
+
var oe = e.originalEvent;
|
245
|
+
// Make sure the progress event properties get copied over:
|
246
|
+
e.lengthComputable = oe.lengthComputable;
|
247
|
+
e.loaded = oe.loaded;
|
248
|
+
e.total = oe.total;
|
215
249
|
that._onProgress(e, options);
|
216
|
-
}
|
250
|
+
});
|
217
251
|
options.xhr = function () {
|
218
252
|
return xhr;
|
219
253
|
};
|
@@ -222,8 +256,10 @@
|
|
222
256
|
|
223
257
|
_initXHRData: function (options) {
|
224
258
|
var formData,
|
225
|
-
file = options.files[0]
|
226
|
-
|
259
|
+
file = options.files[0],
|
260
|
+
// Ignore non-multipart setting if not supported:
|
261
|
+
multipart = options.multipart || !$.support.xhrFileUpload;
|
262
|
+
if (!multipart || options.blob) {
|
227
263
|
// For non-multipart uploads and chunked uploads,
|
228
264
|
// file meta data is not part of the request body,
|
229
265
|
// so we transmit this data as part of the HTTP headers.
|
@@ -239,13 +275,13 @@
|
|
239
275
|
// Non-chunked non-multipart upload:
|
240
276
|
options.contentType = file.type;
|
241
277
|
options.data = file;
|
242
|
-
} else if (!
|
278
|
+
} else if (!multipart) {
|
243
279
|
// Chunked non-multipart upload:
|
244
280
|
options.contentType = 'application/octet-stream';
|
245
281
|
options.data = options.blob;
|
246
282
|
}
|
247
283
|
}
|
248
|
-
if (
|
284
|
+
if (multipart && $.support.xhrFormDataFileUpload) {
|
249
285
|
if (options.postMessage) {
|
250
286
|
// window.postMessage does not allow sending FormData
|
251
287
|
// objects, so we just add the File/Blob objects to
|
@@ -275,14 +311,14 @@
|
|
275
311
|
});
|
276
312
|
}
|
277
313
|
if (options.blob) {
|
278
|
-
formData.append(options.paramName, options.blob);
|
314
|
+
formData.append(options.paramName, options.blob, file.name);
|
279
315
|
} else {
|
280
316
|
$.each(options.files, function (index, file) {
|
281
317
|
// File objects are also Blob instances.
|
282
318
|
// This check allows the tests to run with
|
283
319
|
// dummy objects:
|
284
320
|
if (file instanceof Blob) {
|
285
|
-
formData.append(options.paramName, file);
|
321
|
+
formData.append(options.paramName, file, file.name);
|
286
322
|
}
|
287
323
|
});
|
288
324
|
}
|
@@ -298,6 +334,14 @@
|
|
298
334
|
options.dataType = 'iframe ' + (options.dataType || '');
|
299
335
|
// The iframe transport accepts a serialized array as form data:
|
300
336
|
options.formData = this._getFormData(options);
|
337
|
+
// Add redirect url to form data on cross-domain uploads:
|
338
|
+
if (options.redirect && $('<a></a>').prop('href', options.url)
|
339
|
+
.prop('host') !== location.host) {
|
340
|
+
options.formData.push({
|
341
|
+
name: options.redirectParamName || 'redirect',
|
342
|
+
value: options.redirect
|
343
|
+
});
|
344
|
+
}
|
301
345
|
},
|
302
346
|
|
303
347
|
_initDataSettings: function (options) {
|
@@ -716,17 +760,19 @@
|
|
716
760
|
},
|
717
761
|
|
718
762
|
_initEventHandlers: function () {
|
719
|
-
var ns = this.options.namespace
|
720
|
-
this.options
|
721
|
-
.
|
722
|
-
|
723
|
-
|
763
|
+
var ns = this.options.namespace;
|
764
|
+
if (this._isXHRUpload(this.options)) {
|
765
|
+
this.options.dropZone
|
766
|
+
.bind('dragover.' + ns, {fileupload: this}, this._onDragOver)
|
767
|
+
.bind('drop.' + ns, {fileupload: this}, this._onDrop)
|
768
|
+
.bind('paste.' + ns, {fileupload: this}, this._onPaste);
|
769
|
+
}
|
724
770
|
this.options.fileInput
|
725
771
|
.bind('change.' + ns, {fileupload: this}, this._onChange);
|
726
772
|
},
|
727
773
|
|
728
774
|
_destroyEventHandlers: function () {
|
729
|
-
var ns = this.options.namespace
|
775
|
+
var ns = this.options.namespace;
|
730
776
|
this.options.dropZone
|
731
777
|
.unbind('dragover.' + ns, this._onDragOver)
|
732
778
|
.unbind('drop.' + ns, this._onDrop)
|
@@ -735,43 +781,38 @@
|
|
735
781
|
.unbind('change.' + ns, this._onChange);
|
736
782
|
},
|
737
783
|
|
738
|
-
_beforeSetOption: function (key, value) {
|
739
|
-
this._destroyEventHandlers();
|
740
|
-
},
|
741
|
-
|
742
|
-
_afterSetOption: function (key, value) {
|
743
|
-
var options = this.options;
|
744
|
-
if (!options.fileInput) {
|
745
|
-
options.fileInput = $();
|
746
|
-
}
|
747
|
-
if (!options.dropZone) {
|
748
|
-
options.dropZone = $();
|
749
|
-
}
|
750
|
-
this._initEventHandlers();
|
751
|
-
},
|
752
|
-
|
753
784
|
_setOption: function (key, value) {
|
754
785
|
var refresh = $.inArray(key, this._refreshOptionsList) !== -1;
|
755
786
|
if (refresh) {
|
756
|
-
this.
|
787
|
+
this._destroyEventHandlers();
|
757
788
|
}
|
758
789
|
$.Widget.prototype._setOption.call(this, key, value);
|
759
790
|
if (refresh) {
|
760
|
-
this.
|
791
|
+
this._initSpecialOptions();
|
792
|
+
this._initEventHandlers();
|
761
793
|
}
|
762
794
|
},
|
763
795
|
|
764
|
-
|
796
|
+
_initSpecialOptions: function () {
|
765
797
|
var options = this.options;
|
766
798
|
if (options.fileInput === undefined) {
|
767
799
|
options.fileInput = this.element.is('input:file') ?
|
768
800
|
this.element : this.element.find('input:file');
|
769
|
-
} else if (!options.fileInput) {
|
770
|
-
options.fileInput = $();
|
801
|
+
} else if (!(options.fileInput instanceof $)) {
|
802
|
+
options.fileInput = $(options.fileInput);
|
771
803
|
}
|
772
|
-
if (!options.dropZone) {
|
773
|
-
options.dropZone = $();
|
804
|
+
if (!(options.dropZone instanceof $)) {
|
805
|
+
options.dropZone = $(options.dropZone);
|
774
806
|
}
|
807
|
+
},
|
808
|
+
|
809
|
+
_create: function () {
|
810
|
+
var options = this.options,
|
811
|
+
dataOpts = $.extend({}, this.element.data());
|
812
|
+
dataOpts[this.widgetName] = undefined;
|
813
|
+
$.extend(options, dataOpts);
|
814
|
+
options.namespace = options.namespace || this.widgetName;
|
815
|
+
this._initSpecialOptions();
|
775
816
|
this._slots = [];
|
776
817
|
this._sequence = this._getXHRPromise(true);
|
777
818
|
this._sending = this._active = this._loaded = this._total = 0;
|
@@ -822,4 +863,4 @@
|
|
822
863
|
|
823
864
|
});
|
824
865
|
|
825
|
-
}
|
866
|
+
}));
|
@@ -1,18 +1,27 @@
|
|
1
1
|
/*
|
2
|
-
* jQuery Iframe Transport Plugin 1.
|
2
|
+
* jQuery Iframe Transport Plugin 1.3
|
3
3
|
* https://github.com/blueimp/jQuery-File-Upload
|
4
4
|
*
|
5
5
|
* Copyright 2011, Sebastian Tschan
|
6
6
|
* https://blueimp.net
|
7
7
|
*
|
8
8
|
* Licensed under the MIT license:
|
9
|
-
* http://
|
9
|
+
* http://www.opensource.org/licenses/MIT
|
10
10
|
*/
|
11
11
|
|
12
12
|
/*jslint unparam: true, nomen: true */
|
13
|
-
/*global
|
13
|
+
/*global define, window, document */
|
14
14
|
|
15
|
-
(function (
|
15
|
+
(function (factory) {
|
16
|
+
'use strict';
|
17
|
+
if (typeof define === 'function' && define.amd) {
|
18
|
+
// Register as an anonymous AMD module:
|
19
|
+
define(['jquery'], factory);
|
20
|
+
} else {
|
21
|
+
// Browser globals:
|
22
|
+
factory(window.jQuery);
|
23
|
+
}
|
24
|
+
}(function ($) {
|
16
25
|
'use strict';
|
17
26
|
|
18
27
|
// Helper variable to create unique names for the transport iframes:
|
@@ -153,4 +162,4 @@
|
|
153
162
|
}
|
154
163
|
});
|
155
164
|
|
156
|
-
}
|
165
|
+
}));
|
@@ -1,18 +1,27 @@
|
|
1
1
|
/*
|
2
|
-
* jQuery postMessage Transport Plugin 1.
|
2
|
+
* jQuery postMessage Transport Plugin 1.1
|
3
3
|
* https://github.com/blueimp/jQuery-File-Upload
|
4
4
|
*
|
5
5
|
* Copyright 2011, Sebastian Tschan
|
6
6
|
* https://blueimp.net
|
7
7
|
*
|
8
8
|
* Licensed under the MIT license:
|
9
|
-
* http://
|
9
|
+
* http://www.opensource.org/licenses/MIT
|
10
10
|
*/
|
11
11
|
|
12
12
|
/*jslint unparam: true, nomen: true */
|
13
|
-
/*global
|
13
|
+
/*global define, window, document */
|
14
14
|
|
15
|
-
(function (
|
15
|
+
(function (factory) {
|
16
|
+
'use strict';
|
17
|
+
if (typeof define === 'function' && define.amd) {
|
18
|
+
// Register as an anonymous AMD module:
|
19
|
+
define(['jquery'], factory);
|
20
|
+
} else {
|
21
|
+
// Browser globals:
|
22
|
+
factory(window.jQuery);
|
23
|
+
}
|
24
|
+
}(function ($) {
|
16
25
|
'use strict';
|
17
26
|
|
18
27
|
var counter = 0,
|
@@ -105,4 +114,4 @@
|
|
105
114
|
}
|
106
115
|
});
|
107
116
|
|
108
|
-
}
|
117
|
+
}));
|
@@ -1,24 +1,33 @@
|
|
1
1
|
/*
|
2
|
-
* jQuery XDomainRequest Transport Plugin 1.
|
2
|
+
* jQuery XDomainRequest Transport Plugin 1.1.2
|
3
3
|
* https://github.com/blueimp/jQuery-File-Upload
|
4
4
|
*
|
5
5
|
* Copyright 2011, Sebastian Tschan
|
6
6
|
* https://blueimp.net
|
7
7
|
*
|
8
8
|
* Licensed under the MIT license:
|
9
|
-
* http://
|
9
|
+
* http://www.opensource.org/licenses/MIT
|
10
10
|
*
|
11
11
|
* Based on Julian Aubourg's ajaxHooks xdr.js:
|
12
12
|
* https://github.com/jaubourg/ajaxHooks/
|
13
13
|
*/
|
14
14
|
|
15
15
|
/*jslint unparam: true */
|
16
|
-
/*global
|
16
|
+
/*global define, window, XDomainRequest */
|
17
17
|
|
18
|
-
(function (
|
18
|
+
(function (factory) {
|
19
19
|
'use strict';
|
20
|
-
if (
|
21
|
-
|
20
|
+
if (typeof define === 'function' && define.amd) {
|
21
|
+
// Register as an anonymous AMD module:
|
22
|
+
define(['jquery'], factory);
|
23
|
+
} else {
|
24
|
+
// Browser globals:
|
25
|
+
factory(window.jQuery);
|
26
|
+
}
|
27
|
+
}(function ($) {
|
28
|
+
'use strict';
|
29
|
+
if (window.XDomainRequest && !$.support.cors) {
|
30
|
+
$.ajaxTransport(function (s) {
|
22
31
|
if (s.crossDomain && s.async) {
|
23
32
|
if (s.timeout) {
|
24
33
|
s.xdrTimeout = s.timeout;
|
@@ -28,7 +37,7 @@
|
|
28
37
|
return {
|
29
38
|
send: function (headers, completeCallback) {
|
30
39
|
function callback(status, statusText, responses, responseHeaders) {
|
31
|
-
xdr.onload = xdr.onerror = xdr.ontimeout =
|
40
|
+
xdr.onload = xdr.onerror = xdr.ontimeout = $.noop;
|
32
41
|
xdr = null;
|
33
42
|
completeCallback(status, statusText, responses, responseHeaders);
|
34
43
|
}
|
@@ -65,7 +74,7 @@
|
|
65
74
|
},
|
66
75
|
abort: function () {
|
67
76
|
if (xdr) {
|
68
|
-
xdr.onerror =
|
77
|
+
xdr.onerror = $.noop();
|
69
78
|
xdr.abort();
|
70
79
|
}
|
71
80
|
}
|
@@ -73,4 +82,4 @@
|
|
73
82
|
}
|
74
83
|
});
|
75
84
|
}
|
76
|
-
}
|
85
|
+
}));
|
@@ -1,16 +1,22 @@
|
|
1
1
|
@charset 'UTF-8';
|
2
2
|
/*
|
3
|
-
* jQuery File Upload UI Plugin CSS
|
3
|
+
* jQuery File Upload UI Plugin CSS 6.3
|
4
4
|
* https://github.com/blueimp/jQuery-File-Upload
|
5
5
|
*
|
6
6
|
* Copyright 2010, Sebastian Tschan
|
7
7
|
* https://blueimp.net
|
8
8
|
*
|
9
9
|
* Licensed under the MIT license:
|
10
|
-
* http://
|
10
|
+
* http://www.opensource.org/licenses/MIT
|
11
11
|
*/
|
12
12
|
|
13
|
-
.
|
13
|
+
.fileinput-button {
|
14
|
+
position: relative;
|
15
|
+
overflow: hidden;
|
16
|
+
float: left;
|
17
|
+
margin-right: 4px;
|
18
|
+
}
|
19
|
+
.fileinput-button input {
|
14
20
|
position: absolute;
|
15
21
|
top: 0;
|
16
22
|
right: 0;
|
@@ -19,82 +25,60 @@
|
|
19
25
|
border-width: 0 0 100px 200px;
|
20
26
|
opacity: 0;
|
21
27
|
filter: alpha(opacity=0);
|
22
|
-
-o-transform: translate(250px, -50px) scale(1);
|
23
28
|
-moz-transform: translate(-300px, 0) scale(4);
|
24
29
|
direction: ltr;
|
25
30
|
cursor: pointer;
|
26
31
|
}
|
27
|
-
|
28
|
-
.
|
29
|
-
|
30
|
-
}
|
31
|
-
|
32
|
-
/* Fix for IE 6: */
|
33
|
-
*html .fileinput-button {
|
34
|
-
padding: 2px 0;
|
35
|
-
}
|
36
|
-
|
37
|
-
/* Fix for IE 7: */
|
38
|
-
*+html .fileinput-button {
|
39
|
-
padding: 2px 0;
|
40
|
-
}
|
41
|
-
|
42
|
-
.fileupload-buttonbar {
|
43
|
-
padding: 0.2em 0.4em;
|
44
|
-
}
|
45
|
-
|
46
|
-
.fileupload-buttonbar .ui-button {
|
47
|
-
vertical-align: middle;
|
48
|
-
}
|
49
|
-
|
50
|
-
.fileupload-content {
|
51
|
-
padding: 0.2em 0.4em;
|
52
|
-
border-top-width: 0;
|
32
|
+
.fileupload-buttonbar .btn,
|
33
|
+
.fileupload-buttonbar .toggle {
|
34
|
+
margin-bottom: 5px;
|
53
35
|
}
|
54
|
-
|
55
|
-
.fileupload-content .ui-progressbar {
|
36
|
+
.files .progress {
|
56
37
|
width: 200px;
|
57
|
-
height: 20px;
|
58
|
-
}
|
59
|
-
|
60
|
-
.fileupload-content .ui-progressbar-value {
|
61
|
-
background: url(pbar-ani.gif);
|
62
|
-
}
|
63
|
-
|
64
|
-
.fileupload-content .fileupload-progressbar {
|
65
|
-
width: 400px;
|
66
|
-
margin: 10px 0;
|
67
|
-
}
|
68
|
-
|
69
|
-
.files {
|
70
|
-
margin: 10px 0;
|
71
|
-
border-collapse: collapse;
|
72
38
|
}
|
73
|
-
|
74
|
-
.
|
75
|
-
|
76
|
-
border-spacing: 5px;
|
39
|
+
.progress-animated .bar {
|
40
|
+
background: url(../img/progressbar.gif) !important;
|
41
|
+
filter: none;
|
77
42
|
}
|
78
|
-
|
79
|
-
|
80
|
-
|
43
|
+
.fileupload-loading {
|
44
|
+
position: absolute;
|
45
|
+
left: 50%;
|
46
|
+
width: 128px;
|
47
|
+
height: 128px;
|
48
|
+
background: url(../img/loading.gif) center no-repeat;
|
49
|
+
display: none;
|
81
50
|
}
|
82
|
-
|
83
|
-
|
84
|
-
padding: 0 10px;
|
51
|
+
.fileupload-processing .fileupload-loading {
|
52
|
+
display: block;
|
85
53
|
}
|
86
54
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
55
|
+
/* Fix for IE 6: */
|
56
|
+
*html .fileinput-button {
|
57
|
+
line-height: 22px;
|
58
|
+
margin: 1px -3px 0 0;
|
91
59
|
}
|
92
60
|
|
93
|
-
|
94
|
-
|
95
|
-
|
61
|
+
/* Fix for IE 7: */
|
62
|
+
*+html .fileinput-button {
|
63
|
+
margin: 1px 0 0 0;
|
64
|
+
}
|
65
|
+
|
66
|
+
@media (max-width: 480px) {
|
67
|
+
.files .btn span {
|
68
|
+
display: none;
|
69
|
+
}
|
70
|
+
.files .preview * {
|
71
|
+
width: 40px;
|
72
|
+
}
|
73
|
+
.files .name * {
|
74
|
+
width: 80px;
|
75
|
+
display: inline-block;
|
76
|
+
word-wrap: break-word;
|
77
|
+
}
|
78
|
+
.files .progress {
|
79
|
+
width: 20px;
|
80
|
+
}
|
81
|
+
.files .delete {
|
82
|
+
width: 60px;
|
83
|
+
}
|
96
84
|
}
|
97
|
-
|
98
|
-
.ui-state-disabled input {
|
99
|
-
cursor: default;
|
100
|
-
}
|