tessa 6.0.1 → 6.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/tessa.esm.js +212 -173
- data/app/assets/javascripts/tessa.js +206 -167
- data/lib/tessa/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d040e7a0fa04eead3454cadf4e255c8b7ba12e5b5aaf8fd56c5450a674c2727c
|
4
|
+
data.tar.gz: 21cbcffa7525a138438d1ec86ed3023758a7ccb0461b6e9554a09286068cfc58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c56c4573c7c2240b192ed81a04f66beec67501dcc2446f594c6f10cf3447d7198784ffada9783b2636cb6f2d6f9c2b6bb5d46872ab9853ac5ff02f33b6d5dad9
|
7
|
+
data.tar.gz: 77b5273e3f1411348dcbb41c4cd0000ae8c64293afeff0289fe602fdd5aaee0fa5cc4490d83a946376aa64f16b2c25c490eb3de1d5566bc56d9236a599a4b134
|
@@ -1,3 +1,34 @@
|
|
1
|
+
var extendStatics = function(d, b) {
|
2
|
+
extendStatics = Object.setPrototypeOf || {
|
3
|
+
__proto__: []
|
4
|
+
} instanceof Array && function(d, b) {
|
5
|
+
d.__proto__ = b;
|
6
|
+
} || function(d, b) {
|
7
|
+
for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
|
8
|
+
};
|
9
|
+
return extendStatics(d, b);
|
10
|
+
};
|
11
|
+
|
12
|
+
function __extends(d, b) {
|
13
|
+
if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
14
|
+
extendStatics(d, b);
|
15
|
+
function __() {
|
16
|
+
this.constructor = d;
|
17
|
+
}
|
18
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __);
|
19
|
+
}
|
20
|
+
|
21
|
+
var __assign = function() {
|
22
|
+
__assign = Object.assign || function __assign(t) {
|
23
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
24
|
+
s = arguments[i];
|
25
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
26
|
+
}
|
27
|
+
return t;
|
28
|
+
};
|
29
|
+
return __assign.apply(this, arguments);
|
30
|
+
};
|
31
|
+
|
1
32
|
var sparkMd5 = {
|
2
33
|
exports: {}
|
3
34
|
};
|
@@ -410,261 +441,269 @@ var sparkMd5 = {
|
|
410
441
|
}));
|
411
442
|
})(sparkMd5);
|
412
443
|
|
413
|
-
var
|
444
|
+
var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
|
414
445
|
|
415
|
-
|
416
|
-
|
417
|
-
class FileChecksum {
|
418
|
-
static create(file, callback) {
|
419
|
-
const instance = new FileChecksum(file);
|
420
|
-
instance.create(callback);
|
421
|
-
}
|
422
|
-
constructor(file) {
|
446
|
+
var FileChecksum = function() {
|
447
|
+
function FileChecksum(file) {
|
423
448
|
this.file = file;
|
424
449
|
this.chunkSize = 2097152;
|
425
450
|
this.chunkCount = Math.ceil(this.file.size / this.chunkSize);
|
426
451
|
this.chunkIndex = 0;
|
427
452
|
}
|
428
|
-
create(callback) {
|
453
|
+
FileChecksum.create = function(file, callback) {
|
454
|
+
var instance = new FileChecksum(file);
|
455
|
+
instance.create(callback);
|
456
|
+
};
|
457
|
+
FileChecksum.prototype.create = function(callback) {
|
458
|
+
var _this = this;
|
429
459
|
this.callback = callback;
|
430
|
-
this.md5Buffer = new
|
460
|
+
this.md5Buffer = new sparkMd5.exports.ArrayBuffer;
|
431
461
|
this.fileReader = new FileReader;
|
432
|
-
this.fileReader.addEventListener("load", (
|
433
|
-
|
462
|
+
this.fileReader.addEventListener("load", (function(event) {
|
463
|
+
return _this.fileReaderDidLoad(event);
|
464
|
+
}));
|
465
|
+
this.fileReader.addEventListener("error", (function(event) {
|
466
|
+
return _this.fileReaderDidError(event);
|
467
|
+
}));
|
434
468
|
this.readNextChunk();
|
435
|
-
}
|
436
|
-
fileReaderDidLoad(event) {
|
469
|
+
};
|
470
|
+
FileChecksum.prototype.fileReaderDidLoad = function(event) {
|
471
|
+
var _a;
|
472
|
+
if (!this.md5Buffer || !this.fileReader) {
|
473
|
+
throw new Error("FileChecksum: fileReaderDidLoad called before create");
|
474
|
+
}
|
475
|
+
if (!((_a = event.target) === null || _a === void 0 ? void 0 : _a.result)) {
|
476
|
+
return;
|
477
|
+
}
|
437
478
|
this.md5Buffer.append(event.target.result);
|
438
479
|
if (!this.readNextChunk()) {
|
439
|
-
|
440
|
-
|
441
|
-
this.callback
|
480
|
+
var binaryDigest = this.md5Buffer.end(true);
|
481
|
+
var base64digest = btoa(binaryDigest);
|
482
|
+
if (this.callback) {
|
483
|
+
this.callback(null, base64digest);
|
484
|
+
}
|
485
|
+
}
|
486
|
+
};
|
487
|
+
FileChecksum.prototype.fileReaderDidError = function(event) {
|
488
|
+
if (this.callback) {
|
489
|
+
this.callback("Error reading ".concat(this.file.name));
|
490
|
+
}
|
491
|
+
};
|
492
|
+
FileChecksum.prototype.readNextChunk = function() {
|
493
|
+
if (!this.fileReader) {
|
494
|
+
throw new Error("FileChecksum: readNextChunk called before create");
|
442
495
|
}
|
443
|
-
}
|
444
|
-
fileReaderDidError(event) {
|
445
|
-
this.callback(`Error reading ${this.file.name}`);
|
446
|
-
}
|
447
|
-
readNextChunk() {
|
448
496
|
if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {
|
449
|
-
|
450
|
-
|
451
|
-
|
497
|
+
var start = this.chunkIndex * this.chunkSize;
|
498
|
+
var end = Math.min(start + this.chunkSize, this.file.size);
|
499
|
+
var bytes = fileSlice.call(this.file, start, end);
|
452
500
|
this.fileReader.readAsArrayBuffer(bytes);
|
453
501
|
this.chunkIndex++;
|
454
502
|
return true;
|
455
503
|
} else {
|
456
504
|
return false;
|
457
505
|
}
|
458
|
-
}
|
459
|
-
|
460
|
-
|
461
|
-
var $;
|
506
|
+
};
|
507
|
+
return FileChecksum;
|
508
|
+
}();
|
462
509
|
|
463
510
|
window.WCC || (window.WCC = {});
|
464
511
|
|
465
|
-
$ = window.jQuery;
|
512
|
+
var $ = window.jQuery;
|
466
513
|
|
467
|
-
Dropzone.autoDiscover = false;
|
514
|
+
window.Dropzone.autoDiscover = false;
|
468
515
|
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
516
|
+
var BaseDropzone = window.Dropzone;
|
517
|
+
|
518
|
+
var WCCDropzone = function(_super) {
|
519
|
+
__extends(WCCDropzone, _super);
|
520
|
+
function WCCDropzone() {
|
521
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
522
|
+
}
|
523
|
+
WCCDropzone.prototype.uploadFile = function(file) {
|
524
|
+
var _this = this;
|
525
|
+
var _a;
|
526
|
+
var xhr = new XMLHttpRequest;
|
473
527
|
file.xhr = xhr;
|
474
528
|
xhr.open(file.uploadMethod, file.uploadURL, true);
|
475
|
-
response = null;
|
476
|
-
handleError = ()
|
477
|
-
|
478
|
-
|
479
|
-
|
529
|
+
var response = null;
|
530
|
+
var handleError = function() {
|
531
|
+
var _a;
|
532
|
+
_this._errorProcessing([ file ], response || ((_a = _this.options.dictResponseError) === null || _a === void 0 ? void 0 : _a.replace("{{statusCode}}", xhr.status.toString())), xhr);
|
533
|
+
};
|
534
|
+
var updateProgress = function(e) {
|
535
|
+
var _a;
|
536
|
+
var progress;
|
537
|
+
if (e) {
|
480
538
|
progress = 100 * e.loaded / e.total;
|
481
|
-
file.upload = {
|
539
|
+
file.upload = __assign(__assign({}, file.upload), {
|
482
540
|
progress: progress,
|
483
541
|
total: e.total,
|
484
542
|
bytesSent: e.loaded
|
485
|
-
};
|
543
|
+
});
|
486
544
|
} else {
|
487
|
-
allFilesFinished = true;
|
488
545
|
progress = 100;
|
489
|
-
|
490
|
-
|
546
|
+
var allFilesFinished = false;
|
547
|
+
if (file.upload.progress == 100 && file.upload.bytesSent == file.upload.total) {
|
548
|
+
allFilesFinished = true;
|
491
549
|
}
|
492
550
|
file.upload.progress = progress;
|
493
|
-
file.upload.bytesSent = file.upload.total;
|
551
|
+
file.upload.bytesSent = (_a = file.upload) === null || _a === void 0 ? void 0 : _a.total;
|
494
552
|
if (allFilesFinished) {
|
495
553
|
return;
|
496
554
|
}
|
497
555
|
}
|
498
|
-
|
556
|
+
_this.emit("uploadprogress", file, progress, file.upload.bytesSent);
|
499
557
|
};
|
500
|
-
xhr.onload = e
|
501
|
-
|
502
|
-
if (file.status === WCC.Dropzone.CANCELED) {
|
558
|
+
xhr.onload = function(e) {
|
559
|
+
if (file.status == WCCDropzone.CANCELED) {
|
503
560
|
return;
|
504
561
|
}
|
505
|
-
if (xhr.readyState
|
562
|
+
if (xhr.readyState != 4) {
|
506
563
|
return;
|
507
564
|
}
|
508
565
|
response = xhr.responseText;
|
509
|
-
if (xhr.getResponseHeader("content-type") &&
|
566
|
+
if (xhr.getResponseHeader("content-type") && xhr.getResponseHeader("content-type").indexOf("application/json") >= 0) {
|
510
567
|
try {
|
511
568
|
response = JSON.parse(response);
|
512
|
-
} catch (
|
513
|
-
e = error1;
|
569
|
+
} catch (e) {
|
514
570
|
response = "Invalid JSON response from server.";
|
515
571
|
}
|
516
572
|
}
|
517
573
|
updateProgress();
|
518
|
-
if (
|
519
|
-
|
520
|
-
} else {
|
521
|
-
return this._finished([ file ], response, e);
|
574
|
+
if (xhr.status < 200 || xhr.status >= 300) handleError(); else {
|
575
|
+
_this._finished([ file ], response, e);
|
522
576
|
}
|
523
577
|
};
|
524
|
-
xhr.onerror = ()
|
525
|
-
if (file.status
|
578
|
+
xhr.onerror = function() {
|
579
|
+
if (file.status == WCCDropzone.CANCELED) {
|
526
580
|
return;
|
527
581
|
}
|
528
|
-
|
582
|
+
handleError();
|
529
583
|
};
|
530
|
-
progressObj = (
|
584
|
+
var progressObj = (_a = xhr.upload) !== null && _a !== void 0 ? _a : xhr;
|
531
585
|
progressObj.onprogress = updateProgress;
|
532
|
-
headers = {
|
586
|
+
var headers = {
|
533
587
|
Accept: "application/json",
|
534
588
|
"Cache-Control": "no-cache",
|
535
589
|
"X-Requested-With": "XMLHttpRequest"
|
536
590
|
};
|
537
591
|
if (this.options.headers) {
|
538
|
-
|
592
|
+
Object.assign(headers, this.options.headers);
|
539
593
|
}
|
540
594
|
if (file.uploadHeaders) {
|
541
|
-
|
595
|
+
Object.assign(headers, file.uploadHeaders);
|
542
596
|
}
|
543
|
-
for (
|
544
|
-
|
597
|
+
for (var _i = 0, _b = Object.entries(headers); _i < _b.length; _i++) {
|
598
|
+
var _c = _b[_i], headerName = _c[0], headerValue = _c[1];
|
545
599
|
xhr.setRequestHeader(headerName, headerValue);
|
546
600
|
}
|
547
601
|
this.emit("sending", file, xhr);
|
548
|
-
|
549
|
-
}
|
550
|
-
uploadFiles(files) {
|
551
|
-
var
|
552
|
-
|
553
|
-
|
554
|
-
file = files[l];
|
555
|
-
results.push(this.uploadFile(file));
|
602
|
+
xhr.send(file);
|
603
|
+
};
|
604
|
+
WCCDropzone.prototype.uploadFiles = function(files) {
|
605
|
+
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
|
606
|
+
var file = files_1[_i];
|
607
|
+
this.uploadFile(file);
|
556
608
|
}
|
557
|
-
|
558
|
-
|
559
|
-
};
|
560
|
-
|
561
|
-
WCC.Dropzone.uploadPendingWarning = "File uploads have not yet completed. If you submit the form now they will not be saved. Are you sure you want to continue?";
|
562
|
-
|
563
|
-
WCC.Dropzone.prototype.defaultOptions.url = "UNUSED";
|
609
|
+
};
|
610
|
+
return WCCDropzone;
|
611
|
+
}(BaseDropzone);
|
564
612
|
|
565
|
-
|
613
|
+
var uploadPendingWarning = "File uploads have not yet completed. If you submit the form now they will not be saved. Are you sure you want to continue?";
|
566
614
|
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
615
|
+
function tessaInit() {
|
616
|
+
$(".tessa-upload").each((function(i, item) {
|
617
|
+
var $item = $(item);
|
618
|
+
var directUploadURL = $item.data("direct-upload-url") || "/rails/active_storage/direct_uploads";
|
619
|
+
var options = __assign({
|
620
|
+
maxFiles: 1,
|
621
|
+
addRemoveLinks: true,
|
622
|
+
url: "UNUSED",
|
623
|
+
dictDefaultMessage: "Drop files or click to upload.",
|
624
|
+
accept: createAcceptFn({
|
625
|
+
directUploadURL: directUploadURL
|
626
|
+
})
|
627
|
+
}, $item.data("dropzone-options"));
|
628
|
+
if ($item.hasClass("multiple")) {
|
629
|
+
options.maxFiles = undefined;
|
580
630
|
}
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
631
|
+
var dropzone = new WCCDropzone(item, options);
|
632
|
+
$item.find('input[type="hidden"]').each((function(i, input) {
|
633
|
+
var _a, _b;
|
634
|
+
var $input = $(input);
|
635
|
+
var mockFile = $input.data("meta");
|
636
|
+
if (!mockFile) {
|
637
|
+
return;
|
638
|
+
}
|
639
|
+
mockFile.accepted = true;
|
640
|
+
(_a = dropzone.options.addedfile) === null || _a === void 0 ? void 0 : _a.call(dropzone, mockFile);
|
641
|
+
(_b = dropzone.options.thumbnail) === null || _b === void 0 ? void 0 : _b.call(dropzone, mockFile, mockFile.url);
|
642
|
+
dropzone.emit("complete", mockFile);
|
643
|
+
dropzone.files.push(mockFile);
|
644
|
+
}));
|
645
|
+
var inputName = $item.data("input-name") || $item.find('input[type="hidden"]').attr("name");
|
646
|
+
dropzone.on("success", (function(file) {
|
647
|
+
$('input[name="'.concat(inputName, '"]')).val(file.signedID);
|
648
|
+
}));
|
649
|
+
dropzone.on("removedfile", (function(file) {
|
650
|
+
$item.find('input[name="'.concat(inputName, '"]')).val("");
|
651
|
+
}));
|
596
652
|
}));
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
$(sel).each((function(i, form) {
|
602
|
-
var $form;
|
603
|
-
$form = $(form);
|
604
|
-
return $form.bind("submit", (function(event) {
|
605
|
-
var safeToSubmit;
|
606
|
-
safeToSubmit = true;
|
653
|
+
$("form:has(.tessa-upload)").each((function(i, form) {
|
654
|
+
var $form = $(form);
|
655
|
+
$form.on("submit", (function(event) {
|
656
|
+
var safeToSubmit = true;
|
607
657
|
$form.find(".tessa-upload").each((function(j, dropzoneElement) {
|
608
|
-
|
609
|
-
if (file.status
|
610
|
-
|
658
|
+
dropzoneElement.dropzone.files.forEach((function(file) {
|
659
|
+
if (file.status && file.status != WCCDropzone.SUCCESS) {
|
660
|
+
safeToSubmit = false;
|
611
661
|
}
|
612
662
|
}));
|
613
663
|
}));
|
614
|
-
if (!safeToSubmit && !confirm(
|
664
|
+
if (!safeToSubmit && !confirm(uploadPendingWarning)) {
|
615
665
|
return false;
|
616
666
|
}
|
617
667
|
}));
|
618
668
|
}));
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
669
|
+
}
|
670
|
+
|
671
|
+
function createAcceptFn(_a) {
|
672
|
+
var directUploadURL = _a.directUploadURL;
|
673
|
+
return function(file, done) {
|
674
|
+
var postData = {
|
675
|
+
blob: {
|
676
|
+
filename: file.name,
|
677
|
+
byte_size: file.size,
|
678
|
+
content_type: file.type,
|
679
|
+
checksum: ""
|
680
|
+
}
|
625
681
|
};
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
}
|
630
|
-
inputPrefix = $item.data("asset-field-prefix");
|
631
|
-
dropzone = new WCC.Dropzone(item, args);
|
632
|
-
$item.find('input[type="hidden"]').each((function(j, input) {
|
633
|
-
var $input, mockFile;
|
634
|
-
$input = $(input);
|
635
|
-
mockFile = $input.data("meta");
|
636
|
-
mockFile.accepted = true;
|
637
|
-
dropzone.options.addedfile.call(dropzone, mockFile);
|
638
|
-
dropzone.options.thumbnail.call(dropzone, mockFile, mockFile.url);
|
639
|
-
dropzone.emit("complete", mockFile);
|
640
|
-
return dropzone.files.push(mockFile);
|
641
|
-
}));
|
642
|
-
updateAction = function(file) {
|
643
|
-
var actionInput, inputID;
|
644
|
-
if (file.assetID == null) {
|
645
|
-
return;
|
682
|
+
FileChecksum.create(file, (function(error, checksum) {
|
683
|
+
if (error) {
|
684
|
+
return done(error);
|
646
685
|
}
|
647
|
-
|
648
|
-
|
649
|
-
if (!actionInput.length) {
|
650
|
-
actionInput = $('<input type="hidden">').attr({
|
651
|
-
id: inputID,
|
652
|
-
name: `${inputPrefix}[${file.assetID}][action]`
|
653
|
-
}).appendTo(item);
|
686
|
+
if (!checksum) {
|
687
|
+
return done("Failed to generate checksum for file '".concat(file.name, "'"));
|
654
688
|
}
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
689
|
+
postData.blob["checksum"] = checksum;
|
690
|
+
$.ajax(directUploadURL, {
|
691
|
+
type: "POST",
|
692
|
+
data: postData,
|
693
|
+
success: function(response) {
|
694
|
+
file.uploadURL = response.direct_upload.url;
|
695
|
+
file.uploadMethod = "PUT";
|
696
|
+
file.uploadHeaders = response.direct_upload.headers;
|
697
|
+
file.signedID = response.signed_id;
|
698
|
+
done();
|
699
|
+
},
|
700
|
+
error: function(response) {
|
701
|
+
console.error(response);
|
702
|
+
done("Failed to initiate the upload process!");
|
703
|
+
}
|
704
|
+
});
|
664
705
|
}));
|
665
|
-
}
|
666
|
-
}
|
706
|
+
};
|
707
|
+
}
|
667
708
|
|
668
|
-
$(
|
669
|
-
return window.WCC.tessaInit();
|
670
|
-
}));
|
709
|
+
$(tessaInit);
|
@@ -2,6 +2,34 @@
|
|
2
2
|
typeof define === "function" && define.amd ? define(factory) : factory();
|
3
3
|
})((function() {
|
4
4
|
"use strict";
|
5
|
+
var extendStatics = function(d, b) {
|
6
|
+
extendStatics = Object.setPrototypeOf || {
|
7
|
+
__proto__: []
|
8
|
+
} instanceof Array && function(d, b) {
|
9
|
+
d.__proto__ = b;
|
10
|
+
} || function(d, b) {
|
11
|
+
for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
|
12
|
+
};
|
13
|
+
return extendStatics(d, b);
|
14
|
+
};
|
15
|
+
function __extends(d, b) {
|
16
|
+
if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
17
|
+
extendStatics(d, b);
|
18
|
+
function __() {
|
19
|
+
this.constructor = d;
|
20
|
+
}
|
21
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __);
|
22
|
+
}
|
23
|
+
var __assign = function() {
|
24
|
+
__assign = Object.assign || function __assign(t) {
|
25
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
26
|
+
s = arguments[i];
|
27
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
28
|
+
}
|
29
|
+
return t;
|
30
|
+
};
|
31
|
+
return __assign.apply(this, arguments);
|
32
|
+
};
|
5
33
|
var sparkMd5 = {
|
6
34
|
exports: {}
|
7
35
|
};
|
@@ -412,249 +440,260 @@
|
|
412
440
|
return SparkMD5;
|
413
441
|
}));
|
414
442
|
})(sparkMd5);
|
415
|
-
var
|
416
|
-
|
417
|
-
|
418
|
-
static create(file, callback) {
|
419
|
-
const instance = new FileChecksum(file);
|
420
|
-
instance.create(callback);
|
421
|
-
}
|
422
|
-
constructor(file) {
|
443
|
+
var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
|
444
|
+
var FileChecksum = function() {
|
445
|
+
function FileChecksum(file) {
|
423
446
|
this.file = file;
|
424
447
|
this.chunkSize = 2097152;
|
425
448
|
this.chunkCount = Math.ceil(this.file.size / this.chunkSize);
|
426
449
|
this.chunkIndex = 0;
|
427
450
|
}
|
428
|
-
create(callback) {
|
451
|
+
FileChecksum.create = function(file, callback) {
|
452
|
+
var instance = new FileChecksum(file);
|
453
|
+
instance.create(callback);
|
454
|
+
};
|
455
|
+
FileChecksum.prototype.create = function(callback) {
|
456
|
+
var _this = this;
|
429
457
|
this.callback = callback;
|
430
|
-
this.md5Buffer = new
|
458
|
+
this.md5Buffer = new sparkMd5.exports.ArrayBuffer;
|
431
459
|
this.fileReader = new FileReader;
|
432
|
-
this.fileReader.addEventListener("load", (
|
433
|
-
|
460
|
+
this.fileReader.addEventListener("load", (function(event) {
|
461
|
+
return _this.fileReaderDidLoad(event);
|
462
|
+
}));
|
463
|
+
this.fileReader.addEventListener("error", (function(event) {
|
464
|
+
return _this.fileReaderDidError(event);
|
465
|
+
}));
|
434
466
|
this.readNextChunk();
|
435
|
-
}
|
436
|
-
fileReaderDidLoad(event) {
|
467
|
+
};
|
468
|
+
FileChecksum.prototype.fileReaderDidLoad = function(event) {
|
469
|
+
var _a;
|
470
|
+
if (!this.md5Buffer || !this.fileReader) {
|
471
|
+
throw new Error("FileChecksum: fileReaderDidLoad called before create");
|
472
|
+
}
|
473
|
+
if (!((_a = event.target) === null || _a === void 0 ? void 0 : _a.result)) {
|
474
|
+
return;
|
475
|
+
}
|
437
476
|
this.md5Buffer.append(event.target.result);
|
438
477
|
if (!this.readNextChunk()) {
|
439
|
-
|
440
|
-
|
441
|
-
this.callback
|
478
|
+
var binaryDigest = this.md5Buffer.end(true);
|
479
|
+
var base64digest = btoa(binaryDigest);
|
480
|
+
if (this.callback) {
|
481
|
+
this.callback(null, base64digest);
|
482
|
+
}
|
483
|
+
}
|
484
|
+
};
|
485
|
+
FileChecksum.prototype.fileReaderDidError = function(event) {
|
486
|
+
if (this.callback) {
|
487
|
+
this.callback("Error reading ".concat(this.file.name));
|
488
|
+
}
|
489
|
+
};
|
490
|
+
FileChecksum.prototype.readNextChunk = function() {
|
491
|
+
if (!this.fileReader) {
|
492
|
+
throw new Error("FileChecksum: readNextChunk called before create");
|
442
493
|
}
|
443
|
-
}
|
444
|
-
fileReaderDidError(event) {
|
445
|
-
this.callback(`Error reading ${this.file.name}`);
|
446
|
-
}
|
447
|
-
readNextChunk() {
|
448
494
|
if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {
|
449
|
-
|
450
|
-
|
451
|
-
|
495
|
+
var start = this.chunkIndex * this.chunkSize;
|
496
|
+
var end = Math.min(start + this.chunkSize, this.file.size);
|
497
|
+
var bytes = fileSlice.call(this.file, start, end);
|
452
498
|
this.fileReader.readAsArrayBuffer(bytes);
|
453
499
|
this.chunkIndex++;
|
454
500
|
return true;
|
455
501
|
} else {
|
456
502
|
return false;
|
457
503
|
}
|
458
|
-
}
|
459
|
-
|
460
|
-
|
504
|
+
};
|
505
|
+
return FileChecksum;
|
506
|
+
}();
|
461
507
|
window.WCC || (window.WCC = {});
|
462
|
-
$ = window.jQuery;
|
463
|
-
Dropzone.autoDiscover = false;
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
508
|
+
var $ = window.jQuery;
|
509
|
+
window.Dropzone.autoDiscover = false;
|
510
|
+
var BaseDropzone = window.Dropzone;
|
511
|
+
var WCCDropzone = function(_super) {
|
512
|
+
__extends(WCCDropzone, _super);
|
513
|
+
function WCCDropzone() {
|
514
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
515
|
+
}
|
516
|
+
WCCDropzone.prototype.uploadFile = function(file) {
|
517
|
+
var _this = this;
|
518
|
+
var _a;
|
519
|
+
var xhr = new XMLHttpRequest;
|
468
520
|
file.xhr = xhr;
|
469
521
|
xhr.open(file.uploadMethod, file.uploadURL, true);
|
470
|
-
response = null;
|
471
|
-
handleError = ()
|
472
|
-
|
473
|
-
|
474
|
-
|
522
|
+
var response = null;
|
523
|
+
var handleError = function() {
|
524
|
+
var _a;
|
525
|
+
_this._errorProcessing([ file ], response || ((_a = _this.options.dictResponseError) === null || _a === void 0 ? void 0 : _a.replace("{{statusCode}}", xhr.status.toString())), xhr);
|
526
|
+
};
|
527
|
+
var updateProgress = function(e) {
|
528
|
+
var _a;
|
529
|
+
var progress;
|
530
|
+
if (e) {
|
475
531
|
progress = 100 * e.loaded / e.total;
|
476
|
-
file.upload = {
|
532
|
+
file.upload = __assign(__assign({}, file.upload), {
|
477
533
|
progress: progress,
|
478
534
|
total: e.total,
|
479
535
|
bytesSent: e.loaded
|
480
|
-
};
|
536
|
+
});
|
481
537
|
} else {
|
482
|
-
allFilesFinished = true;
|
483
538
|
progress = 100;
|
484
|
-
|
485
|
-
|
539
|
+
var allFilesFinished = false;
|
540
|
+
if (file.upload.progress == 100 && file.upload.bytesSent == file.upload.total) {
|
541
|
+
allFilesFinished = true;
|
486
542
|
}
|
487
543
|
file.upload.progress = progress;
|
488
|
-
file.upload.bytesSent = file.upload.total;
|
544
|
+
file.upload.bytesSent = (_a = file.upload) === null || _a === void 0 ? void 0 : _a.total;
|
489
545
|
if (allFilesFinished) {
|
490
546
|
return;
|
491
547
|
}
|
492
548
|
}
|
493
|
-
|
549
|
+
_this.emit("uploadprogress", file, progress, file.upload.bytesSent);
|
494
550
|
};
|
495
|
-
xhr.onload = e
|
496
|
-
|
497
|
-
if (file.status === WCC.Dropzone.CANCELED) {
|
551
|
+
xhr.onload = function(e) {
|
552
|
+
if (file.status == WCCDropzone.CANCELED) {
|
498
553
|
return;
|
499
554
|
}
|
500
|
-
if (xhr.readyState
|
555
|
+
if (xhr.readyState != 4) {
|
501
556
|
return;
|
502
557
|
}
|
503
558
|
response = xhr.responseText;
|
504
|
-
if (xhr.getResponseHeader("content-type") &&
|
559
|
+
if (xhr.getResponseHeader("content-type") && xhr.getResponseHeader("content-type").indexOf("application/json") >= 0) {
|
505
560
|
try {
|
506
561
|
response = JSON.parse(response);
|
507
|
-
} catch (
|
508
|
-
e = error1;
|
562
|
+
} catch (e) {
|
509
563
|
response = "Invalid JSON response from server.";
|
510
564
|
}
|
511
565
|
}
|
512
566
|
updateProgress();
|
513
|
-
if (
|
514
|
-
|
515
|
-
} else {
|
516
|
-
return this._finished([ file ], response, e);
|
567
|
+
if (xhr.status < 200 || xhr.status >= 300) handleError(); else {
|
568
|
+
_this._finished([ file ], response, e);
|
517
569
|
}
|
518
570
|
};
|
519
|
-
xhr.onerror = ()
|
520
|
-
if (file.status
|
571
|
+
xhr.onerror = function() {
|
572
|
+
if (file.status == WCCDropzone.CANCELED) {
|
521
573
|
return;
|
522
574
|
}
|
523
|
-
|
575
|
+
handleError();
|
524
576
|
};
|
525
|
-
progressObj = (
|
577
|
+
var progressObj = (_a = xhr.upload) !== null && _a !== void 0 ? _a : xhr;
|
526
578
|
progressObj.onprogress = updateProgress;
|
527
|
-
headers = {
|
579
|
+
var headers = {
|
528
580
|
Accept: "application/json",
|
529
581
|
"Cache-Control": "no-cache",
|
530
582
|
"X-Requested-With": "XMLHttpRequest"
|
531
583
|
};
|
532
584
|
if (this.options.headers) {
|
533
|
-
|
585
|
+
Object.assign(headers, this.options.headers);
|
534
586
|
}
|
535
587
|
if (file.uploadHeaders) {
|
536
|
-
|
588
|
+
Object.assign(headers, file.uploadHeaders);
|
537
589
|
}
|
538
|
-
for (
|
539
|
-
|
590
|
+
for (var _i = 0, _b = Object.entries(headers); _i < _b.length; _i++) {
|
591
|
+
var _c = _b[_i], headerName = _c[0], headerValue = _c[1];
|
540
592
|
xhr.setRequestHeader(headerName, headerValue);
|
541
593
|
}
|
542
594
|
this.emit("sending", file, xhr);
|
543
|
-
|
544
|
-
}
|
545
|
-
uploadFiles(files) {
|
546
|
-
var
|
547
|
-
|
548
|
-
|
549
|
-
file = files[l];
|
550
|
-
results.push(this.uploadFile(file));
|
595
|
+
xhr.send(file);
|
596
|
+
};
|
597
|
+
WCCDropzone.prototype.uploadFiles = function(files) {
|
598
|
+
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
|
599
|
+
var file = files_1[_i];
|
600
|
+
this.uploadFile(file);
|
551
601
|
}
|
552
|
-
return results;
|
553
|
-
}
|
554
|
-
};
|
555
|
-
WCC.Dropzone.uploadPendingWarning = "File uploads have not yet completed. If you submit the form now they will not be saved. Are you sure you want to continue?";
|
556
|
-
WCC.Dropzone.prototype.defaultOptions.url = "UNUSED";
|
557
|
-
WCC.Dropzone.prototype.defaultOptions.dictDefaultMessage = "Drop files or click to upload.";
|
558
|
-
WCC.Dropzone.prototype.defaultOptions.accept = function(file, done) {
|
559
|
-
var dz, postData, tessaParams;
|
560
|
-
dz = $(file._removeLink).closest(".tessa-upload").first();
|
561
|
-
tessaParams = dz.data("tessa-params") || {};
|
562
|
-
postData = {
|
563
|
-
name: file.name,
|
564
|
-
size: file.size,
|
565
|
-
mime_type: file.type
|
566
602
|
};
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
603
|
+
return WCCDropzone;
|
604
|
+
}(BaseDropzone);
|
605
|
+
var uploadPendingWarning = "File uploads have not yet completed. If you submit the form now they will not be saved. Are you sure you want to continue?";
|
606
|
+
function tessaInit() {
|
607
|
+
$(".tessa-upload").each((function(i, item) {
|
608
|
+
var $item = $(item);
|
609
|
+
var directUploadURL = $item.data("direct-upload-url") || "/rails/active_storage/direct_uploads";
|
610
|
+
var options = __assign({
|
611
|
+
maxFiles: 1,
|
612
|
+
addRemoveLinks: true,
|
613
|
+
url: "UNUSED",
|
614
|
+
dictDefaultMessage: "Drop files or click to upload.",
|
615
|
+
accept: createAcceptFn({
|
616
|
+
directUploadURL: directUploadURL
|
617
|
+
})
|
618
|
+
}, $item.data("dropzone-options"));
|
619
|
+
if ($item.hasClass("multiple")) {
|
620
|
+
options.maxFiles = undefined;
|
571
621
|
}
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
622
|
+
var dropzone = new WCCDropzone(item, options);
|
623
|
+
$item.find('input[type="hidden"]').each((function(i, input) {
|
624
|
+
var _a, _b;
|
625
|
+
var $input = $(input);
|
626
|
+
var mockFile = $input.data("meta");
|
627
|
+
if (!mockFile) {
|
628
|
+
return;
|
629
|
+
}
|
630
|
+
mockFile.accepted = true;
|
631
|
+
(_a = dropzone.options.addedfile) === null || _a === void 0 ? void 0 : _a.call(dropzone, mockFile);
|
632
|
+
(_b = dropzone.options.thumbnail) === null || _b === void 0 ? void 0 : _b.call(dropzone, mockFile, mockFile.url);
|
633
|
+
dropzone.emit("complete", mockFile);
|
634
|
+
dropzone.files.push(mockFile);
|
635
|
+
}));
|
636
|
+
var inputName = $item.data("input-name") || $item.find('input[type="hidden"]').attr("name");
|
637
|
+
dropzone.on("success", (function(file) {
|
638
|
+
$('input[name="'.concat(inputName, '"]')).val(file.signedID);
|
639
|
+
}));
|
640
|
+
dropzone.on("removedfile", (function(file) {
|
641
|
+
$item.find('input[name="'.concat(inputName, '"]')).val("");
|
642
|
+
}));
|
587
643
|
}));
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
var $form;
|
593
|
-
$form = $(form);
|
594
|
-
return $form.bind("submit", (function(event) {
|
595
|
-
var safeToSubmit;
|
596
|
-
safeToSubmit = true;
|
644
|
+
$("form:has(.tessa-upload)").each((function(i, form) {
|
645
|
+
var $form = $(form);
|
646
|
+
$form.on("submit", (function(event) {
|
647
|
+
var safeToSubmit = true;
|
597
648
|
$form.find(".tessa-upload").each((function(j, dropzoneElement) {
|
598
|
-
|
599
|
-
if (file.status
|
600
|
-
|
649
|
+
dropzoneElement.dropzone.files.forEach((function(file) {
|
650
|
+
if (file.status && file.status != WCCDropzone.SUCCESS) {
|
651
|
+
safeToSubmit = false;
|
601
652
|
}
|
602
653
|
}));
|
603
654
|
}));
|
604
|
-
if (!safeToSubmit && !confirm(
|
655
|
+
if (!safeToSubmit && !confirm(uploadPendingWarning)) {
|
605
656
|
return false;
|
606
657
|
}
|
607
658
|
}));
|
608
659
|
}));
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
660
|
+
}
|
661
|
+
function createAcceptFn(_a) {
|
662
|
+
var directUploadURL = _a.directUploadURL;
|
663
|
+
return function(file, done) {
|
664
|
+
var postData = {
|
665
|
+
blob: {
|
666
|
+
filename: file.name,
|
667
|
+
byte_size: file.size,
|
668
|
+
content_type: file.type,
|
669
|
+
checksum: ""
|
670
|
+
}
|
615
671
|
};
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
}
|
620
|
-
inputPrefix = $item.data("asset-field-prefix");
|
621
|
-
dropzone = new WCC.Dropzone(item, args);
|
622
|
-
$item.find('input[type="hidden"]').each((function(j, input) {
|
623
|
-
var $input, mockFile;
|
624
|
-
$input = $(input);
|
625
|
-
mockFile = $input.data("meta");
|
626
|
-
mockFile.accepted = true;
|
627
|
-
dropzone.options.addedfile.call(dropzone, mockFile);
|
628
|
-
dropzone.options.thumbnail.call(dropzone, mockFile, mockFile.url);
|
629
|
-
dropzone.emit("complete", mockFile);
|
630
|
-
return dropzone.files.push(mockFile);
|
631
|
-
}));
|
632
|
-
updateAction = function(file) {
|
633
|
-
var actionInput, inputID;
|
634
|
-
if (file.assetID == null) {
|
635
|
-
return;
|
672
|
+
FileChecksum.create(file, (function(error, checksum) {
|
673
|
+
if (error) {
|
674
|
+
return done(error);
|
636
675
|
}
|
637
|
-
|
638
|
-
|
639
|
-
if (!actionInput.length) {
|
640
|
-
actionInput = $('<input type="hidden">').attr({
|
641
|
-
id: inputID,
|
642
|
-
name: `${inputPrefix}[${file.assetID}][action]`
|
643
|
-
}).appendTo(item);
|
676
|
+
if (!checksum) {
|
677
|
+
return done("Failed to generate checksum for file '".concat(file.name, "'"));
|
644
678
|
}
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
679
|
+
postData.blob["checksum"] = checksum;
|
680
|
+
$.ajax(directUploadURL, {
|
681
|
+
type: "POST",
|
682
|
+
data: postData,
|
683
|
+
success: function(response) {
|
684
|
+
file.uploadURL = response.direct_upload.url;
|
685
|
+
file.uploadMethod = "PUT";
|
686
|
+
file.uploadHeaders = response.direct_upload.headers;
|
687
|
+
file.signedID = response.signed_id;
|
688
|
+
done();
|
689
|
+
},
|
690
|
+
error: function(response) {
|
691
|
+
console.error(response);
|
692
|
+
done("Failed to initiate the upload process!");
|
693
|
+
}
|
694
|
+
});
|
654
695
|
}));
|
655
|
-
}
|
656
|
-
}
|
657
|
-
$(
|
658
|
-
return window.WCC.tessaInit();
|
659
|
-
}));
|
696
|
+
};
|
697
|
+
}
|
698
|
+
$(tessaInit);
|
660
699
|
}));
|
data/lib/tessa/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tessa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
4
|
+
version: 6.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Powell
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-08-
|
12
|
+
date: 2023-08-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|