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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97d04730151300a62dbd1abc5a52d0fa768ff9170b08f3fb1e3ac40aea74278e
4
- data.tar.gz: 0fcd8e364428394587b86af49e2042bdcb14574c7c9f499164c62d235114977b
3
+ metadata.gz: d040e7a0fa04eead3454cadf4e255c8b7ba12e5b5aaf8fd56c5450a674c2727c
4
+ data.tar.gz: 21cbcffa7525a138438d1ec86ed3023758a7ccb0461b6e9554a09286068cfc58
5
5
  SHA512:
6
- metadata.gz: 44ee62a0b0fe6b810559e85c9032929b16f3ea22ac0cd2b41045a86614ad60c9e0b1aedc86e3884e51fe923d9e44ed0e5514b615af3dc99700c26ec1400a1dd3
7
- data.tar.gz: f869838f12e587ee6ced568125dca1ffd44973955a276f5d37fb5b4711829cc09b85c6b1f69f780de2bb1e83ecaf5994738a796f48fec623083efdbcb59aebe6
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 SparkMD5 = sparkMd5.exports;
444
+ var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
414
445
 
415
- const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
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 SparkMD5.ArrayBuffer;
460
+ this.md5Buffer = new sparkMd5.exports.ArrayBuffer;
431
461
  this.fileReader = new FileReader;
432
- this.fileReader.addEventListener("load", (event => this.fileReaderDidLoad(event)));
433
- this.fileReader.addEventListener("error", (event => this.fileReaderDidError(event)));
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
- const binaryDigest = this.md5Buffer.end(true);
440
- const base64digest = btoa(binaryDigest);
441
- this.callback(null, base64digest);
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
- const start = this.chunkIndex * this.chunkSize;
450
- const end = Math.min(start + this.chunkSize, this.file.size);
451
- const bytes = fileSlice.call(this.file, start, end);
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
- window.WCC.Dropzone = class Dropzone extends window.Dropzone {
470
- uploadFile(file) {
471
- var handleError, headerName, headerValue, headers, progressObj, ref, response, updateProgress, xhr;
472
- xhr = new XMLHttpRequest;
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 = () => this._errorProcessing([ file ], response || this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr);
477
- updateProgress = e => {
478
- var allFilesFinished, progress;
479
- if (e != null) {
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
- if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
490
- allFilesFinished = false;
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
- return this.emit("uploadprogress", file, progress, file.upload.bytesSent);
556
+ _this.emit("uploadprogress", file, progress, file.upload.bytesSent);
499
557
  };
500
- xhr.onload = e => {
501
- var ref;
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 !== 4) {
562
+ if (xhr.readyState != 4) {
506
563
  return;
507
564
  }
508
565
  response = xhr.responseText;
509
- if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
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 (error1) {
513
- e = error1;
569
+ } catch (e) {
514
570
  response = "Invalid JSON response from server.";
515
571
  }
516
572
  }
517
573
  updateProgress();
518
- if (!(200 <= (ref = xhr.status) && ref < 300)) {
519
- return handleError();
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 === WCC.Dropzone.CANCELED) {
578
+ xhr.onerror = function() {
579
+ if (file.status == WCCDropzone.CANCELED) {
526
580
  return;
527
581
  }
528
- return handleError();
582
+ handleError();
529
583
  };
530
- progressObj = (ref = xhr.upload) != null ? ref : xhr;
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
- $.extend(headers, this.options.headers);
592
+ Object.assign(headers, this.options.headers);
539
593
  }
540
594
  if (file.uploadHeaders) {
541
- $.extend(headers, file.uploadHeaders);
595
+ Object.assign(headers, file.uploadHeaders);
542
596
  }
543
- for (headerName in headers) {
544
- headerValue = headers[headerName];
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
- return xhr.send(file);
549
- }
550
- uploadFiles(files) {
551
- var file, l, len, results;
552
- results = [];
553
- for (l = 0, len = files.length; l < len; l++) {
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
- return results;
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
- WCC.Dropzone.prototype.defaultOptions.dictDefaultMessage = "Drop files or click to upload.";
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
- WCC.Dropzone.prototype.defaultOptions.accept = function(file, done) {
568
- var dz, postData, tessaParams;
569
- dz = $(file._removeLink).closest(".tessa-upload").first();
570
- tessaParams = dz.data("tessa-params") || {};
571
- postData = {
572
- name: file.name,
573
- size: file.size,
574
- mime_type: file.type
575
- };
576
- postData = $.extend(postData, tessaParams);
577
- return FileChecksum.create(file, (function(error, checksum) {
578
- if (error) {
579
- return done(error);
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
- postData["checksum"] = checksum;
582
- return $.ajax("/tessa/uploads", {
583
- type: "POST",
584
- data: postData,
585
- success: function(response) {
586
- file.uploadURL = response.upload_url;
587
- file.uploadMethod = response.upload_method;
588
- file.uploadHeaders = response.upload_headers;
589
- file.assetID = response.asset_id;
590
- return done();
591
- },
592
- error: function(response) {
593
- return done("Failed to initiate the upload process!");
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
- window.WCC.tessaInit = function(sel) {
600
- sel = sel || "form:has(.tessa-upload)";
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
- return $(dropzoneElement.dropzone.files).each((function(k, file) {
609
- if (file.status != null && file.status !== WCC.Dropzone.SUCCESS) {
610
- return safeToSubmit = false;
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(WCC.Dropzone.uploadPendingWarning)) {
664
+ if (!safeToSubmit && !confirm(uploadPendingWarning)) {
615
665
  return false;
616
666
  }
617
667
  }));
618
668
  }));
619
- return $(".tessa-upload", sel).each((function(i, item) {
620
- var $item, args, dropzone, inputPrefix, updateAction;
621
- $item = $(item);
622
- args = {
623
- maxFiles: 1,
624
- addRemoveLinks: true
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
- $.extend(args, $item.data("dropzone-options"));
627
- if ($item.hasClass("multiple")) {
628
- args.maxFiles = null;
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
- inputID = `#tessa_asset_action_${file.assetID}`;
648
- actionInput = $(inputID);
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
- return actionInput.val(file.action);
656
- };
657
- dropzone.on("success", (function(file) {
658
- file.action = "add";
659
- return updateAction(file);
660
- }));
661
- return dropzone.on("removedfile", (function(file) {
662
- file.action = "remove";
663
- return updateAction(file);
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
- $((function() {
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 SparkMD5 = sparkMd5.exports;
416
- const fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
417
- class FileChecksum {
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 SparkMD5.ArrayBuffer;
458
+ this.md5Buffer = new sparkMd5.exports.ArrayBuffer;
431
459
  this.fileReader = new FileReader;
432
- this.fileReader.addEventListener("load", (event => this.fileReaderDidLoad(event)));
433
- this.fileReader.addEventListener("error", (event => this.fileReaderDidError(event)));
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
- const binaryDigest = this.md5Buffer.end(true);
440
- const base64digest = btoa(binaryDigest);
441
- this.callback(null, base64digest);
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
- const start = this.chunkIndex * this.chunkSize;
450
- const end = Math.min(start + this.chunkSize, this.file.size);
451
- const bytes = fileSlice.call(this.file, start, end);
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
- var $;
504
+ };
505
+ return FileChecksum;
506
+ }();
461
507
  window.WCC || (window.WCC = {});
462
- $ = window.jQuery;
463
- Dropzone.autoDiscover = false;
464
- window.WCC.Dropzone = class Dropzone extends window.Dropzone {
465
- uploadFile(file) {
466
- var handleError, headerName, headerValue, headers, progressObj, ref, response, updateProgress, xhr;
467
- xhr = new XMLHttpRequest;
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 = () => this._errorProcessing([ file ], response || this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr);
472
- updateProgress = e => {
473
- var allFilesFinished, progress;
474
- if (e != null) {
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
- if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
485
- allFilesFinished = false;
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
- return this.emit("uploadprogress", file, progress, file.upload.bytesSent);
549
+ _this.emit("uploadprogress", file, progress, file.upload.bytesSent);
494
550
  };
495
- xhr.onload = e => {
496
- var ref;
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 !== 4) {
555
+ if (xhr.readyState != 4) {
501
556
  return;
502
557
  }
503
558
  response = xhr.responseText;
504
- if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
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 (error1) {
508
- e = error1;
562
+ } catch (e) {
509
563
  response = "Invalid JSON response from server.";
510
564
  }
511
565
  }
512
566
  updateProgress();
513
- if (!(200 <= (ref = xhr.status) && ref < 300)) {
514
- return handleError();
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 === WCC.Dropzone.CANCELED) {
571
+ xhr.onerror = function() {
572
+ if (file.status == WCCDropzone.CANCELED) {
521
573
  return;
522
574
  }
523
- return handleError();
575
+ handleError();
524
576
  };
525
- progressObj = (ref = xhr.upload) != null ? ref : xhr;
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
- $.extend(headers, this.options.headers);
585
+ Object.assign(headers, this.options.headers);
534
586
  }
535
587
  if (file.uploadHeaders) {
536
- $.extend(headers, file.uploadHeaders);
588
+ Object.assign(headers, file.uploadHeaders);
537
589
  }
538
- for (headerName in headers) {
539
- headerValue = headers[headerName];
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
- return xhr.send(file);
544
- }
545
- uploadFiles(files) {
546
- var file, l, len, results;
547
- results = [];
548
- for (l = 0, len = files.length; l < len; l++) {
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
- postData = $.extend(postData, tessaParams);
568
- return FileChecksum.create(file, (function(error, checksum) {
569
- if (error) {
570
- return done(error);
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
- postData["checksum"] = checksum;
573
- return $.ajax("/tessa/uploads", {
574
- type: "POST",
575
- data: postData,
576
- success: function(response) {
577
- file.uploadURL = response.upload_url;
578
- file.uploadMethod = response.upload_method;
579
- file.uploadHeaders = response.upload_headers;
580
- file.assetID = response.asset_id;
581
- return done();
582
- },
583
- error: function(response) {
584
- return done("Failed to initiate the upload process!");
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
- window.WCC.tessaInit = function(sel) {
590
- sel = sel || "form:has(.tessa-upload)";
591
- $(sel).each((function(i, form) {
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
- return $(dropzoneElement.dropzone.files).each((function(k, file) {
599
- if (file.status != null && file.status !== WCC.Dropzone.SUCCESS) {
600
- return safeToSubmit = false;
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(WCC.Dropzone.uploadPendingWarning)) {
655
+ if (!safeToSubmit && !confirm(uploadPendingWarning)) {
605
656
  return false;
606
657
  }
607
658
  }));
608
659
  }));
609
- return $(".tessa-upload", sel).each((function(i, item) {
610
- var $item, args, dropzone, inputPrefix, updateAction;
611
- $item = $(item);
612
- args = {
613
- maxFiles: 1,
614
- addRemoveLinks: true
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
- $.extend(args, $item.data("dropzone-options"));
617
- if ($item.hasClass("multiple")) {
618
- args.maxFiles = null;
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
- inputID = `#tessa_asset_action_${file.assetID}`;
638
- actionInput = $(inputID);
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
- return actionInput.val(file.action);
646
- };
647
- dropzone.on("success", (function(file) {
648
- file.action = "add";
649
- return updateAction(file);
650
- }));
651
- return dropzone.on("removedfile", (function(file) {
652
- file.action = "remove";
653
- return updateAction(file);
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
- $((function() {
658
- return window.WCC.tessaInit();
659
- }));
696
+ };
697
+ }
698
+ $(tessaInit);
660
699
  }));
data/lib/tessa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Tessa
2
- VERSION = "6.0.1"
2
+ VERSION = "6.0.2"
3
3
  end
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.1
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-10 00:00:00.000000000 Z
12
+ date: 2023-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake