tessa 6.0.1 → 6.0.2
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.
- 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
|