jquery.fileupload-rails 1.2.0 → 1.3.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
CHANGED
@@ -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.26
|
6
6
|
* https://github.com/blueimp/jQuery-File-Upload
|
7
7
|
*
|
8
8
|
* Copyright 2010, Sebastian Tschan
|
@@ -36,21 +36,6 @@
|
|
36
36
|
$.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
|
37
37
|
$.support.xhrFormDataFileUpload = !!window.FormData;
|
38
38
|
|
39
|
-
// The form.elements propHook is added to filter serialized elements
|
40
|
-
// to not include file inputs in jQuery 1.9.0.
|
41
|
-
// This hooks directly into jQuery.fn.serializeArray.
|
42
|
-
// For more info, see http://bugs.jquery.com/ticket/13306
|
43
|
-
$.propHooks.elements = {
|
44
|
-
get: function (form) {
|
45
|
-
if ($.nodeName(form, 'form')) {
|
46
|
-
return $.grep(form.elements, function (elem) {
|
47
|
-
return !$.nodeName(elem, 'input') || elem.type !== 'file';
|
48
|
-
});
|
49
|
-
}
|
50
|
-
return null;
|
51
|
-
}
|
52
|
-
};
|
53
|
-
|
54
39
|
// The fileupload widget listens for change events on file input fields defined
|
55
40
|
// via fileInput setting and paste or drop events of the given dropZone.
|
56
41
|
// In addition to the default jQuery Widget methods, the fileupload widget
|
@@ -130,6 +115,8 @@
|
|
130
115
|
progressInterval: 100,
|
131
116
|
// Interval in milliseconds to calculate progress bitrate:
|
132
117
|
bitrateInterval: 500,
|
118
|
+
// By default, uploads are started automatically when adding files:
|
119
|
+
autoUpload: true,
|
133
120
|
|
134
121
|
// Additional form data to be sent along with the file uploads can be set
|
135
122
|
// using this option, which accepts an array of objects with name and
|
@@ -154,7 +141,11 @@
|
|
154
141
|
// handlers using jQuery's Deferred callbacks:
|
155
142
|
// data.submit().done(func).fail(func).always(func);
|
156
143
|
add: function (e, data) {
|
157
|
-
data.
|
144
|
+
if (data.autoUpload || (data.autoUpload !== false &&
|
145
|
+
($(this).data('blueimp-fileupload') ||
|
146
|
+
$(this).data('fileupload')).options.autoUpload)) {
|
147
|
+
data.submit();
|
148
|
+
}
|
158
149
|
},
|
159
150
|
|
160
151
|
// Other callbacks:
|
@@ -273,10 +264,17 @@
|
|
273
264
|
return total;
|
274
265
|
},
|
275
266
|
|
267
|
+
_initProgressObject: function (obj) {
|
268
|
+
obj._progress = {
|
269
|
+
loaded: 0,
|
270
|
+
total: 0,
|
271
|
+
bitrate: 0
|
272
|
+
};
|
273
|
+
},
|
274
|
+
|
276
275
|
_onProgress: function (e, data) {
|
277
276
|
if (e.lengthComputable) {
|
278
277
|
var now = +(new Date()),
|
279
|
-
total,
|
280
278
|
loaded;
|
281
279
|
if (data._time && data.progressInterval &&
|
282
280
|
(now - data._time < data.progressInterval) &&
|
@@ -284,16 +282,19 @@
|
|
284
282
|
return;
|
285
283
|
}
|
286
284
|
data._time = now;
|
287
|
-
|
288
|
-
|
289
|
-
e.loaded / e.total * (data.chunkSize || total),
|
290
|
-
10
|
285
|
+
loaded = Math.floor(
|
286
|
+
e.loaded / e.total * (data.chunkSize || data._progress.total)
|
291
287
|
) + (data.uploadedBytes || 0);
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
288
|
+
// Add the difference from the previously loaded state
|
289
|
+
// to the global loaded counter:
|
290
|
+
this._progress.loaded += (loaded - data._progress.loaded);
|
291
|
+
this._progress.bitrate = this._bitrateTimer.getBitrate(
|
292
|
+
now,
|
293
|
+
this._progress.loaded,
|
294
|
+
data.bitrateInterval
|
295
|
+
);
|
296
|
+
data._progress.loaded = data.loaded = loaded;
|
297
|
+
data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(
|
297
298
|
now,
|
298
299
|
loaded,
|
299
300
|
data.bitrateInterval
|
@@ -304,16 +305,7 @@
|
|
304
305
|
this._trigger('progress', e, data);
|
305
306
|
// Trigger a global progress event for all current file uploads,
|
306
307
|
// including ajax calls queued for sequential file uploads:
|
307
|
-
this._trigger('progressall', e,
|
308
|
-
lengthComputable: true,
|
309
|
-
loaded: this._loaded,
|
310
|
-
total: this._total,
|
311
|
-
bitrate: this._bitrateTimer.getBitrate(
|
312
|
-
now,
|
313
|
-
this._loaded,
|
314
|
-
data.bitrateInterval
|
315
|
-
)
|
316
|
-
});
|
308
|
+
this._trigger('progressall', e, this._progress);
|
317
309
|
}
|
318
310
|
},
|
319
311
|
|
@@ -498,6 +490,21 @@
|
|
498
490
|
return options;
|
499
491
|
},
|
500
492
|
|
493
|
+
// jQuery 1.6 doesn't provide .state(),
|
494
|
+
// while jQuery 1.8+ removed .isRejected() and .isResolved():
|
495
|
+
_getDeferredState: function (deferred) {
|
496
|
+
if (deferred.state) {
|
497
|
+
return deferred.state();
|
498
|
+
}
|
499
|
+
if (deferred.isResolved()) {
|
500
|
+
return 'resolved';
|
501
|
+
}
|
502
|
+
if (deferred.isRejected()) {
|
503
|
+
return 'rejected';
|
504
|
+
}
|
505
|
+
return 'pending';
|
506
|
+
},
|
507
|
+
|
501
508
|
// Maps jqXHR callbacks to the equivalent
|
502
509
|
// methods of the given Promise object:
|
503
510
|
_enhancePromise: function (promise) {
|
@@ -522,6 +529,33 @@
|
|
522
529
|
return this._enhancePromise(promise);
|
523
530
|
},
|
524
531
|
|
532
|
+
// Adds convenience methods to the callback arguments:
|
533
|
+
_addConvenienceMethods: function (e, data) {
|
534
|
+
var that = this;
|
535
|
+
data.submit = function () {
|
536
|
+
if (this.state() !== 'pending') {
|
537
|
+
data.jqXHR = this.jqXHR =
|
538
|
+
(that._trigger('submit', e, this) !== false) &&
|
539
|
+
that._onSend(e, this);
|
540
|
+
}
|
541
|
+
return this.jqXHR || that._getXHRPromise();
|
542
|
+
};
|
543
|
+
data.abort = function () {
|
544
|
+
if (this.jqXHR) {
|
545
|
+
return this.jqXHR.abort();
|
546
|
+
}
|
547
|
+
return this._getXHRPromise();
|
548
|
+
};
|
549
|
+
data.state = function () {
|
550
|
+
if (this.jqXHR) {
|
551
|
+
return that._getDeferredState(this.jqXHR);
|
552
|
+
}
|
553
|
+
};
|
554
|
+
data.progress = function () {
|
555
|
+
return this._progress;
|
556
|
+
};
|
557
|
+
},
|
558
|
+
|
525
559
|
// Parses the Range header from the server response
|
526
560
|
// and returns the uploaded bytes:
|
527
561
|
_getUploadedBytes: function (jqXHR) {
|
@@ -566,7 +600,8 @@
|
|
566
600
|
// The chunk upload method:
|
567
601
|
upload = function () {
|
568
602
|
// Clone the options object for each chunk upload:
|
569
|
-
var o = $.extend({}, options)
|
603
|
+
var o = $.extend({}, options),
|
604
|
+
currentLoaded = o._progress.loaded;
|
570
605
|
o.blob = slice.call(
|
571
606
|
file,
|
572
607
|
ub,
|
@@ -588,10 +623,10 @@
|
|
588
623
|
.done(function (result, textStatus, jqXHR) {
|
589
624
|
ub = that._getUploadedBytes(jqXHR) ||
|
590
625
|
(ub + o.chunkSize);
|
591
|
-
// Create a progress event if
|
592
|
-
//
|
593
|
-
//
|
594
|
-
if (
|
626
|
+
// Create a progress event if no final progress event
|
627
|
+
// with loaded equaling total has been triggered
|
628
|
+
// for this chunk:
|
629
|
+
if (o._progress.loaded === currentLoaded) {
|
595
630
|
that._onProgress($.Event('progress', {
|
596
631
|
lengthComputable: true,
|
597
632
|
loaded: ub - o.uploadedBytes,
|
@@ -643,20 +678,27 @@
|
|
643
678
|
this._trigger('start');
|
644
679
|
// Set timer for global bitrate progress calculation:
|
645
680
|
this._bitrateTimer = new this._BitrateTimer();
|
681
|
+
// Reset the global progress values:
|
682
|
+
this._progress.loaded = this._progress.total = 0;
|
683
|
+
this._progress.bitrate = 0;
|
646
684
|
}
|
685
|
+
if (!data._progress) {
|
686
|
+
data._progress = {};
|
687
|
+
}
|
688
|
+
data._progress.loaded = data.loaded = data.uploadedBytes || 0;
|
689
|
+
data._progress.total = data.total = this._getTotal(data.files) || 1;
|
690
|
+
data._progress.bitrate = data.bitrate = 0;
|
647
691
|
this._active += 1;
|
648
692
|
// Initialize the global progress values:
|
649
|
-
this.
|
650
|
-
this.
|
693
|
+
this._progress.loaded += data.loaded;
|
694
|
+
this._progress.total += data.total;
|
651
695
|
},
|
652
696
|
|
653
697
|
_onDone: function (result, textStatus, jqXHR, options) {
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
//
|
658
|
-
// or if there has been no progress event with
|
659
|
-
// loaded equaling total for XHR uploads:
|
698
|
+
var total = options._progress.total;
|
699
|
+
if (options._progress.loaded < total) {
|
700
|
+
// Create a progress event if no final progress event
|
701
|
+
// with loaded equaling total has been triggered:
|
660
702
|
this._onProgress($.Event('progress', {
|
661
703
|
lengthComputable: true,
|
662
704
|
loaded: total,
|
@@ -677,8 +719,8 @@
|
|
677
719
|
if (options.recalculateProgress) {
|
678
720
|
// Remove the failed (error or abort) file upload from
|
679
721
|
// the global progress calculation:
|
680
|
-
this.
|
681
|
-
this.
|
722
|
+
this._progress.loaded -= options._progress.loaded;
|
723
|
+
this._progress.total -= options._progress.total;
|
682
724
|
}
|
683
725
|
},
|
684
726
|
|
@@ -691,13 +733,13 @@
|
|
691
733
|
// The stop callback is triggered when all uploads have
|
692
734
|
// been completed, equivalent to the global ajaxStop event:
|
693
735
|
this._trigger('stop');
|
694
|
-
// Reset the global progress values:
|
695
|
-
this._loaded = this._total = 0;
|
696
|
-
this._bitrateTimer = null;
|
697
736
|
}
|
698
737
|
},
|
699
738
|
|
700
739
|
_onSend: function (e, data) {
|
740
|
+
if (!data.submit) {
|
741
|
+
this._addConvenienceMethods(e, data);
|
742
|
+
}
|
701
743
|
var that = this,
|
702
744
|
jqXHR,
|
703
745
|
aborted,
|
@@ -728,15 +770,9 @@
|
|
728
770
|
options.limitConcurrentUploads > that._sending) {
|
729
771
|
// Start the next queued upload,
|
730
772
|
// that has not been aborted:
|
731
|
-
var nextSlot = that._slots.shift()
|
732
|
-
isPending;
|
773
|
+
var nextSlot = that._slots.shift();
|
733
774
|
while (nextSlot) {
|
734
|
-
|
735
|
-
// while jQuery 1.8+ removed .isRejected():
|
736
|
-
isPending = nextSlot.state ?
|
737
|
-
nextSlot.state() === 'pending' :
|
738
|
-
!nextSlot.isRejected();
|
739
|
-
if (isPending) {
|
775
|
+
if (that._getDeferredState(nextSlot) === 'pending') {
|
740
776
|
nextSlot.resolve();
|
741
777
|
break;
|
742
778
|
}
|
@@ -808,12 +844,8 @@
|
|
808
844
|
var newData = $.extend({}, data);
|
809
845
|
newData.files = fileSet ? element : [element];
|
810
846
|
newData.paramName = paramNameSet[index];
|
811
|
-
|
812
|
-
|
813
|
-
(that._trigger('submit', e, this) !== false) &&
|
814
|
-
that._onSend(e, this);
|
815
|
-
return this.jqXHR;
|
816
|
-
};
|
847
|
+
that._initProgressObject(newData);
|
848
|
+
that._addConvenienceMethods(e, newData);
|
817
849
|
result = that._trigger('add', e, newData);
|
818
850
|
return result;
|
819
851
|
});
|
@@ -1087,12 +1119,17 @@
|
|
1087
1119
|
this._initSpecialOptions();
|
1088
1120
|
this._slots = [];
|
1089
1121
|
this._sequence = this._getXHRPromise(true);
|
1090
|
-
this._sending = this._active =
|
1122
|
+
this._sending = this._active = 0;
|
1123
|
+
this._initProgressObject(this);
|
1091
1124
|
this._initEventHandlers();
|
1092
1125
|
},
|
1093
1126
|
|
1094
|
-
|
1095
|
-
|
1127
|
+
// This method is exposed to the widget API and allows to query
|
1128
|
+
// the widget upload progress.
|
1129
|
+
// It returns an object with loaded, total and bitrate properties
|
1130
|
+
// for the running uploads:
|
1131
|
+
progress: function () {
|
1132
|
+
return this._progress;
|
1096
1133
|
},
|
1097
1134
|
|
1098
1135
|
// This method is exposed to the widget API and allows adding files
|
metadata
CHANGED
@@ -1,48 +1,48 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jquery.fileupload-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.0
|
5
4
|
prerelease:
|
5
|
+
version: 1.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Semyon Perepelitsa
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '3.1'
|
20
|
+
none: false
|
21
|
+
name: railties
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
|
25
|
-
none: false
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
26
25
|
requirements:
|
27
26
|
- - ! '>='
|
28
27
|
- !ruby/object:Gem::Version
|
29
28
|
version: '3.1'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: jquery-ui-rails
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
29
|
none: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
34
32
|
requirements:
|
35
33
|
- - ~>
|
36
34
|
- !ruby/object:Gem::Version
|
37
35
|
version: '3.0'
|
36
|
+
none: false
|
37
|
+
name: jquery-ui-rails
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
|
-
|
41
|
-
none: false
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
42
41
|
requirements:
|
43
42
|
- - ~>
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: '3.0'
|
45
|
+
none: false
|
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
|
@@ -90,20 +90,20 @@ rdoc_options: []
|
|
90
90
|
require_paths:
|
91
91
|
- lib
|
92
92
|
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
93
|
requirements:
|
95
94
|
- - ! '>='
|
96
95
|
- !ruby/object:Gem::Version
|
97
96
|
version: '0'
|
98
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
97
|
none: false
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
99
|
requirements:
|
101
100
|
- - ! '>='
|
102
101
|
- !ruby/object:Gem::Version
|
103
102
|
version: '0'
|
103
|
+
none: false
|
104
104
|
requirements: []
|
105
105
|
rubyforge_project:
|
106
|
-
rubygems_version: 1.8.
|
106
|
+
rubygems_version: 1.8.23
|
107
107
|
signing_key:
|
108
108
|
specification_version: 3
|
109
109
|
summary: Use jQuery File Upload plugin with Rails 3
|