jquery.fileupload-rails 1.0.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
data/Readme.md
CHANGED
@@ -39,6 +39,8 @@ If you downloaded jquery.ui assets into your project, delete them and use [jquer
|
|
39
39
|
|
40
40
|
## Changelog
|
41
41
|
|
42
|
+
1.1.1. Core 5.19.4, jQuery UI 1.9, added licensing info.
|
43
|
+
|
42
44
|
1.0.0. Core 5.18.
|
43
45
|
|
44
46
|
Now rake task generates assets from official repo and adds dependencies automatically.
|
@@ -54,3 +56,6 @@ That means you can just require jquery.fileupload, no extra requires needed.
|
|
54
56
|
|
55
57
|
[1]: https://github.com/blueimp/jQuery-File-Upload
|
56
58
|
[2]: https://github.com/joliss/jquery-ui-rails
|
59
|
+
|
60
|
+
## License
|
61
|
+
jQuery File Upload as well as this gem are released under the [MIT license](http://www.opensource.org/licenses/MIT).
|
data/demo/.gitignore
CHANGED
@@ -2,15 +2,16 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "jquery.fileupload-rails"
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.1.1"
|
6
6
|
s.author = "Semyon Perepelitsa"
|
7
7
|
s.email = "sema@sema.in"
|
8
8
|
s.homepage = "https://github.com/semaperepelitsa/jquery.fileupload-rails"
|
9
9
|
s.summary = %q{Use jQuery File Upload plugin with Rails 3}
|
10
10
|
s.description = %q{This gem packages jQuery File Upload plugin and it's dependencies for Rails asset pipeline.}
|
11
|
+
s.license = "MIT"
|
11
12
|
|
12
13
|
s.files = File.read('Manifest.txt').split("\n")
|
13
14
|
|
14
15
|
s.add_dependency 'sprockets', '~> 2.0'
|
15
|
-
s.add_dependency 'jquery-ui-rails'
|
16
|
+
s.add_dependency 'jquery-ui-rails', '~> 3.0'
|
16
17
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
//= require jquery.iframe-transport
|
3
3
|
|
4
4
|
/*
|
5
|
-
* jQuery File Upload Plugin 5.
|
5
|
+
* jQuery File Upload Plugin 5.19.7
|
6
6
|
* https://github.com/blueimp/jQuery-File-Upload
|
7
7
|
*
|
8
8
|
* Copyright 2010, Sebastian Tschan
|
@@ -13,7 +13,7 @@
|
|
13
13
|
*/
|
14
14
|
|
15
15
|
/*jslint nomen: true, unparam: true, regexp: true */
|
16
|
-
/*global define, window, document, Blob, FormData, location */
|
16
|
+
/*global define, window, document, File, Blob, FormData, location */
|
17
17
|
|
18
18
|
(function (factory) {
|
19
19
|
'use strict';
|
@@ -47,10 +47,6 @@
|
|
47
47
|
$.widget('blueimp.fileupload', {
|
48
48
|
|
49
49
|
options: {
|
50
|
-
// The namespace used for event handler binding on the fileInput,
|
51
|
-
// dropZone and pasteZone document nodes.
|
52
|
-
// If not set, the name of the widget ("fileupload") is used.
|
53
|
-
namespace: undefined,
|
54
50
|
// The drop target element(s), by the default the complete document.
|
55
51
|
// Set to null to disable drag & drop support:
|
56
52
|
dropZone: $(document),
|
@@ -183,7 +179,6 @@
|
|
183
179
|
|
184
180
|
// A list of options that require a refresh after assigning a new value:
|
185
181
|
_refreshOptionsList: [
|
186
|
-
'namespace',
|
187
182
|
'fileInput',
|
188
183
|
'dropZone',
|
189
184
|
'pasteZone',
|
@@ -217,10 +212,10 @@
|
|
217
212
|
if (typeof options.formData === 'function') {
|
218
213
|
return options.formData(options.form);
|
219
214
|
}
|
220
|
-
|
215
|
+
if ($.isArray(options.formData)) {
|
221
216
|
return options.formData;
|
222
217
|
}
|
223
|
-
|
218
|
+
if (options.formData) {
|
224
219
|
formData = [];
|
225
220
|
$.each(options.formData, function (name, value) {
|
226
221
|
formData.push({name: name, value: value});
|
@@ -313,10 +308,8 @@
|
|
313
308
|
options.headers['Content-Range'] = options.contentRange;
|
314
309
|
}
|
315
310
|
if (!multipart) {
|
316
|
-
|
317
|
-
|
318
|
-
// or removed using the beforeSend callback:
|
319
|
-
options.headers['X-File-Name'] = file.name;
|
311
|
+
options.headers['Content-Disposition'] = 'attachment; filename="' +
|
312
|
+
encodeURI(file.name) + '"';
|
320
313
|
options.contentType = file.type;
|
321
314
|
options.data = options.blob || file;
|
322
315
|
} else if ($.support.xhrFormDataFileUpload) {
|
@@ -349,18 +342,17 @@
|
|
349
342
|
});
|
350
343
|
}
|
351
344
|
if (options.blob) {
|
352
|
-
|
353
|
-
|
354
|
-
// or removed using the beforeSend callback:
|
355
|
-
options.headers['X-File-Name'] = file.name;
|
356
|
-
options.headers['X-File-Type'] = file.type;
|
345
|
+
options.headers['Content-Disposition'] = 'attachment; filename="' +
|
346
|
+
encodeURI(file.name) + '"';
|
357
347
|
formData.append(paramName, options.blob, file.name);
|
358
348
|
} else {
|
359
349
|
$.each(options.files, function (index, file) {
|
360
|
-
//
|
350
|
+
// Files are also Blob instances, but some browsers
|
351
|
+
// (Firefox 3.6) support the File API but not Blobs.
|
361
352
|
// This check allows the tests to run with
|
362
353
|
// dummy objects:
|
363
|
-
if (file instanceof Blob)
|
354
|
+
if ((window.Blob && file instanceof Blob) ||
|
355
|
+
(window.File && file instanceof File)) {
|
364
356
|
formData.append(
|
365
357
|
options.paramName[index] || paramName,
|
366
358
|
file,
|
@@ -537,7 +529,8 @@
|
|
537
529
|
o.blob = slice.call(
|
538
530
|
file,
|
539
531
|
ub,
|
540
|
-
ub + mcs
|
532
|
+
ub + mcs,
|
533
|
+
file.type
|
541
534
|
);
|
542
535
|
// Store the current chunk size, as the blob itself
|
543
536
|
// will be dereferenced after data processing:
|
@@ -656,18 +649,18 @@
|
|
656
649
|
_onSend: function (e, data) {
|
657
650
|
var that = this,
|
658
651
|
jqXHR,
|
652
|
+
aborted,
|
659
653
|
slot,
|
660
654
|
pipe,
|
661
655
|
options = that._getAJAXSettings(data),
|
662
|
-
send = function (
|
656
|
+
send = function () {
|
663
657
|
that._sending += 1;
|
664
658
|
// Set timer for bitrate progress calculation:
|
665
659
|
options._bitrateTimer = new that._BitrateTimer();
|
666
660
|
jqXHR = jqXHR || (
|
667
|
-
(
|
668
|
-
that.
|
669
|
-
|
670
|
-
that._getXHRPromise(false, options.context, args)
|
661
|
+
((aborted || that._trigger('send', e, options) === false) &&
|
662
|
+
that._getXHRPromise(false, options.context, aborted)) ||
|
663
|
+
that._chunkedUpload(options) || $.ajax(options)
|
671
664
|
).done(function (result, textStatus, jqXHR) {
|
672
665
|
that._onDone(result, textStatus, jqXHR, options);
|
673
666
|
}).fail(function (jqXHR, textStatus, errorThrown) {
|
@@ -717,12 +710,12 @@
|
|
717
710
|
// which is delegated to the jqXHR object of the current upload,
|
718
711
|
// and jqXHR callbacks mapped to the equivalent Promise methods:
|
719
712
|
pipe.abort = function () {
|
720
|
-
|
713
|
+
aborted = [undefined, 'abort', 'abort'];
|
721
714
|
if (!jqXHR) {
|
722
715
|
if (slot) {
|
723
|
-
slot.rejectWith(
|
716
|
+
slot.rejectWith(options.context, aborted);
|
724
717
|
}
|
725
|
-
return send(
|
718
|
+
return send();
|
726
719
|
}
|
727
720
|
return jqXHR.abort();
|
728
721
|
};
|
@@ -770,7 +763,8 @@
|
|
770
763
|
that._onSend(e, this);
|
771
764
|
return this.jqXHR;
|
772
765
|
};
|
773
|
-
|
766
|
+
result = that._trigger('add', e, newData);
|
767
|
+
return result;
|
774
768
|
});
|
775
769
|
return result;
|
776
770
|
},
|
@@ -902,6 +896,12 @@
|
|
902
896
|
// support the File API and we add a pseudo File object with
|
903
897
|
// the input value as name with path information removed:
|
904
898
|
files = [{name: value.replace(/^.*\\/, '')}];
|
899
|
+
} else if (files[0].name === undefined && files[0].fileName) {
|
900
|
+
// File normalization for Safari 4 and Firefox 3:
|
901
|
+
$.each(files, function (index, file) {
|
902
|
+
file.name = file.fileName;
|
903
|
+
file.size = file.fileSize;
|
904
|
+
});
|
905
905
|
}
|
906
906
|
return $.Deferred().resolve(files).promise();
|
907
907
|
},
|
@@ -922,12 +922,12 @@
|
|
922
922
|
},
|
923
923
|
|
924
924
|
_onChange: function (e) {
|
925
|
-
var that =
|
925
|
+
var that = this,
|
926
926
|
data = {
|
927
927
|
fileInput: $(e.target),
|
928
928
|
form: $(e.target.form)
|
929
929
|
};
|
930
|
-
|
930
|
+
this._getFileInputFiles(data.fileInput).always(function (files) {
|
931
931
|
data.files = files;
|
932
932
|
if (that.options.replaceFileInput) {
|
933
933
|
that._replaceFileInput(data.fileInput);
|
@@ -939,8 +939,7 @@
|
|
939
939
|
},
|
940
940
|
|
941
941
|
_onPaste: function (e) {
|
942
|
-
var
|
943
|
-
cbd = e.originalEvent.clipboardData,
|
942
|
+
var cbd = e.originalEvent.clipboardData,
|
944
943
|
items = (cbd && cbd.items) || [],
|
945
944
|
data = {files: []};
|
946
945
|
$.each(items, function (index, item) {
|
@@ -949,18 +948,20 @@
|
|
949
948
|
data.files.push(file);
|
950
949
|
}
|
951
950
|
});
|
952
|
-
if (
|
953
|
-
|
951
|
+
if (this._trigger('paste', e, data) === false ||
|
952
|
+
this._onAdd(e, data) === false) {
|
954
953
|
return false;
|
955
954
|
}
|
956
955
|
},
|
957
956
|
|
958
957
|
_onDrop: function (e) {
|
959
|
-
|
960
|
-
var that = e.data.fileupload,
|
958
|
+
var that = this,
|
961
959
|
dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer,
|
962
960
|
data = {};
|
963
|
-
|
961
|
+
if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {
|
962
|
+
e.preventDefault();
|
963
|
+
}
|
964
|
+
this._getDroppedFiles(dataTransfer).always(function (files) {
|
964
965
|
data.files = files;
|
965
966
|
if (that._trigger('drop', e, data) !== false) {
|
966
967
|
that._onAdd(e, data);
|
@@ -969,39 +970,35 @@
|
|
969
970
|
},
|
970
971
|
|
971
972
|
_onDragOver: function (e) {
|
972
|
-
var
|
973
|
-
|
974
|
-
if (that._trigger('dragover', e) === false) {
|
973
|
+
var dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer;
|
974
|
+
if (this._trigger('dragover', e) === false) {
|
975
975
|
return false;
|
976
976
|
}
|
977
|
-
if (dataTransfer) {
|
977
|
+
if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1) {
|
978
978
|
dataTransfer.dropEffect = 'copy';
|
979
|
+
e.preventDefault();
|
979
980
|
}
|
980
|
-
e.preventDefault();
|
981
981
|
},
|
982
982
|
|
983
983
|
_initEventHandlers: function () {
|
984
|
-
var ns = this.options.namespace;
|
985
984
|
if (this._isXHRUpload(this.options)) {
|
986
|
-
this.options.dropZone
|
987
|
-
|
988
|
-
|
989
|
-
|
990
|
-
|
985
|
+
this._on(this.options.dropZone, {
|
986
|
+
dragover: this._onDragOver,
|
987
|
+
drop: this._onDrop
|
988
|
+
});
|
989
|
+
this._on(this.options.pasteZone, {
|
990
|
+
paste: this._onPaste
|
991
|
+
});
|
991
992
|
}
|
992
|
-
this.options.fileInput
|
993
|
-
|
993
|
+
this._on(this.options.fileInput, {
|
994
|
+
change: this._onChange
|
995
|
+
});
|
994
996
|
},
|
995
997
|
|
996
998
|
_destroyEventHandlers: function () {
|
997
|
-
|
998
|
-
this.options.
|
999
|
-
|
1000
|
-
.unbind('drop.' + ns, this._onDrop);
|
1001
|
-
this.options.pasteZone
|
1002
|
-
.unbind('paste.' + ns, this._onPaste);
|
1003
|
-
this.options.fileInput
|
1004
|
-
.unbind('change.' + ns, this._onChange);
|
999
|
+
this._off(this.options.dropZone, 'dragover drop');
|
1000
|
+
this._off(this.options.pasteZone, 'paste');
|
1001
|
+
this._off(this.options.fileInput, 'change');
|
1005
1002
|
},
|
1006
1003
|
|
1007
1004
|
_setOption: function (key, value) {
|
@@ -1009,7 +1006,7 @@
|
|
1009
1006
|
if (refresh) {
|
1010
1007
|
this._destroyEventHandlers();
|
1011
1008
|
}
|
1012
|
-
|
1009
|
+
this._super(key, value);
|
1013
1010
|
if (refresh) {
|
1014
1011
|
this._initSpecialOptions();
|
1015
1012
|
this._initEventHandlers();
|
@@ -1036,7 +1033,6 @@
|
|
1036
1033
|
var options = this.options;
|
1037
1034
|
// Initialize options set via HTML5 data-attributes:
|
1038
1035
|
$.extend(options, $(this.element[0].cloneNode(false)).data());
|
1039
|
-
options.namespace = options.namespace || this.widgetName;
|
1040
1036
|
this._initSpecialOptions();
|
1041
1037
|
this._slots = [];
|
1042
1038
|
this._sequence = this._getXHRPromise(true);
|
@@ -1044,27 +1040,8 @@
|
|
1044
1040
|
this._initEventHandlers();
|
1045
1041
|
},
|
1046
1042
|
|
1047
|
-
|
1043
|
+
_destroy: function () {
|
1048
1044
|
this._destroyEventHandlers();
|
1049
|
-
$.Widget.prototype.destroy.call(this);
|
1050
|
-
},
|
1051
|
-
|
1052
|
-
enable: function () {
|
1053
|
-
var wasDisabled = false;
|
1054
|
-
if (this.options.disabled) {
|
1055
|
-
wasDisabled = true;
|
1056
|
-
}
|
1057
|
-
$.Widget.prototype.enable.call(this);
|
1058
|
-
if (wasDisabled) {
|
1059
|
-
this._initEventHandlers();
|
1060
|
-
}
|
1061
|
-
},
|
1062
|
-
|
1063
|
-
disable: function () {
|
1064
|
-
if (!this.options.disabled) {
|
1065
|
-
this._destroyEventHandlers();
|
1066
|
-
}
|
1067
|
-
$.Widget.prototype.disable.call(this);
|
1068
1045
|
},
|
1069
1046
|
|
1070
1047
|
// This method is exposed to the widget API and allows adding files
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* jQuery Iframe Transport Plugin 1.
|
2
|
+
* jQuery Iframe Transport Plugin 1.6
|
3
3
|
* https://github.com/blueimp/jQuery-File-Upload
|
4
4
|
*
|
5
5
|
* Copyright 2011, Sebastian Tschan
|
@@ -155,16 +155,16 @@
|
|
155
155
|
$.ajaxSetup({
|
156
156
|
converters: {
|
157
157
|
'iframe text': function (iframe) {
|
158
|
-
return $(iframe[0].body).text();
|
158
|
+
return iframe && $(iframe[0].body).text();
|
159
159
|
},
|
160
160
|
'iframe json': function (iframe) {
|
161
|
-
return $.parseJSON($(iframe[0].body).text());
|
161
|
+
return iframe && $.parseJSON($(iframe[0].body).text());
|
162
162
|
},
|
163
163
|
'iframe html': function (iframe) {
|
164
|
-
return $(iframe[0].body).html();
|
164
|
+
return iframe && $(iframe[0].body).html();
|
165
165
|
},
|
166
166
|
'iframe script': function (iframe) {
|
167
|
-
return $.globalEval($(iframe[0].body).text());
|
167
|
+
return iframe && $.globalEval($(iframe[0].body).text());
|
168
168
|
}
|
169
169
|
}
|
170
170
|
});
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jquery.fileupload-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sprockets
|
@@ -32,17 +32,17 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
37
|
+
version: '3.0'
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
45
|
+
version: '3.0'
|
46
46
|
description: This gem packages jQuery File Upload plugin and it's dependencies for
|
47
47
|
Rails asset pipeline.
|
48
48
|
email: sema@sema.in
|
@@ -116,7 +116,8 @@ files:
|
|
116
116
|
- vendor/legacy_assets/javascripts/jquery.xdr-transport.js
|
117
117
|
- vendor/legacy_assets/stylesheets/jquery.fileupload-ui.css
|
118
118
|
homepage: https://github.com/semaperepelitsa/jquery.fileupload-rails
|
119
|
-
licenses:
|
119
|
+
licenses:
|
120
|
+
- MIT
|
120
121
|
post_install_message:
|
121
122
|
rdoc_options: []
|
122
123
|
require_paths:
|
@@ -135,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
136
|
version: '0'
|
136
137
|
requirements: []
|
137
138
|
rubyforge_project:
|
138
|
-
rubygems_version: 1.8.
|
139
|
+
rubygems_version: 1.8.24
|
139
140
|
signing_key:
|
140
141
|
specification_version: 3
|
141
142
|
summary: Use jQuery File Upload plugin with Rails 3
|