tessa 6.0.0 → 6.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e371f39003f6bfde2dfa802295896ff230b304604ae6650e4f2d7d69c8d6171
4
- data.tar.gz: 330b8bbd40c1b33f6d95cee2ceef210dcc46fc4601c835033b483e228313d79f
3
+ metadata.gz: 97d04730151300a62dbd1abc5a52d0fa768ff9170b08f3fb1e3ac40aea74278e
4
+ data.tar.gz: 0fcd8e364428394587b86af49e2042bdcb14574c7c9f499164c62d235114977b
5
5
  SHA512:
6
- metadata.gz: 1245a8a55b809694c47ecc8c558796a7ba4fd7e6667aa7c65cead7a8f1bab3be3e50bde7cf9391a641bdefe9eb51a78e11263be5ec0898b38d02d9a4a89a7ef2
7
- data.tar.gz: 6e7fb1e068dfdee9ca176cc2f03ac3d291758d2c3178e04b676d9034f430b14b4a2ed33b653ce3f07e3090aa812c42ac8cf2b6b379aebeaa497a2658f53655a0
6
+ metadata.gz: 44ee62a0b0fe6b810559e85c9032929b16f3ea22ac0cd2b41045a86614ad60c9e0b1aedc86e3884e51fe923d9e44ed0e5514b615af3dc99700c26ec1400a1dd3
7
+ data.tar.gz: f869838f12e587ee6ced568125dca1ffd44973955a276f5d37fb5b4711829cc09b85c6b1f69f780de2bb1e83ecaf5994738a796f48fec623083efdbcb59aebe6
@@ -1,34 +1,3 @@
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
-
32
1
  var sparkMd5 = {
33
2
  exports: {}
34
3
  };
@@ -441,269 +410,261 @@ var sparkMd5 = {
441
410
  }));
442
411
  })(sparkMd5);
443
412
 
444
- var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
413
+ var SparkMD5 = sparkMd5.exports;
445
414
 
446
- var FileChecksum = function() {
447
- function FileChecksum(file) {
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) {
448
423
  this.file = file;
449
424
  this.chunkSize = 2097152;
450
425
  this.chunkCount = Math.ceil(this.file.size / this.chunkSize);
451
426
  this.chunkIndex = 0;
452
427
  }
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;
428
+ create(callback) {
459
429
  this.callback = callback;
460
- this.md5Buffer = new sparkMd5.exports.ArrayBuffer;
430
+ this.md5Buffer = new SparkMD5.ArrayBuffer;
461
431
  this.fileReader = new FileReader;
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
- }));
432
+ this.fileReader.addEventListener("load", (event => this.fileReaderDidLoad(event)));
433
+ this.fileReader.addEventListener("error", (event => this.fileReaderDidError(event)));
468
434
  this.readNextChunk();
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
- }
435
+ }
436
+ fileReaderDidLoad(event) {
478
437
  this.md5Buffer.append(event.target.result);
479
438
  if (!this.readNextChunk()) {
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");
439
+ const binaryDigest = this.md5Buffer.end(true);
440
+ const base64digest = btoa(binaryDigest);
441
+ this.callback(null, base64digest);
495
442
  }
443
+ }
444
+ fileReaderDidError(event) {
445
+ this.callback(`Error reading ${this.file.name}`);
446
+ }
447
+ readNextChunk() {
496
448
  if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {
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);
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);
500
452
  this.fileReader.readAsArrayBuffer(bytes);
501
453
  this.chunkIndex++;
502
454
  return true;
503
455
  } else {
504
456
  return false;
505
457
  }
506
- };
507
- return FileChecksum;
508
- }();
458
+ }
459
+ }
509
460
 
510
- window.WCC || (window.WCC = {});
461
+ var $;
511
462
 
512
- var $ = window.jQuery;
463
+ window.WCC || (window.WCC = {});
513
464
 
514
- window.Dropzone.autoDiscover = false;
465
+ $ = window.jQuery;
515
466
 
516
- var BaseDropzone = window.Dropzone;
467
+ Dropzone.autoDiscover = false;
517
468
 
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;
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;
527
473
  file.xhr = xhr;
528
474
  xhr.open(file.uploadMethod, file.uploadURL, true);
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) {
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) {
538
480
  progress = 100 * e.loaded / e.total;
539
- file.upload = __assign(__assign({}, file.upload), {
481
+ file.upload = {
540
482
  progress: progress,
541
483
  total: e.total,
542
484
  bytesSent: e.loaded
543
- });
485
+ };
544
486
  } else {
487
+ allFilesFinished = true;
545
488
  progress = 100;
546
- var allFilesFinished = false;
547
- if (file.upload.progress == 100 && file.upload.bytesSent == file.upload.total) {
548
- allFilesFinished = true;
489
+ if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
490
+ allFilesFinished = false;
549
491
  }
550
492
  file.upload.progress = progress;
551
- file.upload.bytesSent = (_a = file.upload) === null || _a === void 0 ? void 0 : _a.total;
493
+ file.upload.bytesSent = file.upload.total;
552
494
  if (allFilesFinished) {
553
495
  return;
554
496
  }
555
497
  }
556
- _this.emit("uploadprogress", file, progress, file.upload.bytesSent);
498
+ return this.emit("uploadprogress", file, progress, file.upload.bytesSent);
557
499
  };
558
- xhr.onload = function(e) {
559
- if (file.status == WCCDropzone.CANCELED) {
500
+ xhr.onload = e => {
501
+ var ref;
502
+ if (file.status === WCC.Dropzone.CANCELED) {
560
503
  return;
561
504
  }
562
- if (xhr.readyState != 4) {
505
+ if (xhr.readyState !== 4) {
563
506
  return;
564
507
  }
565
508
  response = xhr.responseText;
566
- if (xhr.getResponseHeader("content-type") && xhr.getResponseHeader("content-type").indexOf("application/json") >= 0) {
509
+ if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
567
510
  try {
568
511
  response = JSON.parse(response);
569
- } catch (e) {
512
+ } catch (error1) {
513
+ e = error1;
570
514
  response = "Invalid JSON response from server.";
571
515
  }
572
516
  }
573
517
  updateProgress();
574
- if (xhr.status < 200 || xhr.status >= 300) handleError(); else {
575
- _this._finished([ file ], response, e);
518
+ if (!(200 <= (ref = xhr.status) && ref < 300)) {
519
+ return handleError();
520
+ } else {
521
+ return this._finished([ file ], response, e);
576
522
  }
577
523
  };
578
- xhr.onerror = function() {
579
- if (file.status == WCCDropzone.CANCELED) {
524
+ xhr.onerror = () => {
525
+ if (file.status === WCC.Dropzone.CANCELED) {
580
526
  return;
581
527
  }
582
- handleError();
528
+ return handleError();
583
529
  };
584
- var progressObj = (_a = xhr.upload) !== null && _a !== void 0 ? _a : xhr;
530
+ progressObj = (ref = xhr.upload) != null ? ref : xhr;
585
531
  progressObj.onprogress = updateProgress;
586
- var headers = {
532
+ headers = {
587
533
  Accept: "application/json",
588
534
  "Cache-Control": "no-cache",
589
535
  "X-Requested-With": "XMLHttpRequest"
590
536
  };
591
537
  if (this.options.headers) {
592
- Object.assign(headers, this.options.headers);
538
+ $.extend(headers, this.options.headers);
593
539
  }
594
540
  if (file.uploadHeaders) {
595
- Object.assign(headers, file.uploadHeaders);
541
+ $.extend(headers, file.uploadHeaders);
596
542
  }
597
- for (var _i = 0, _b = Object.entries(headers); _i < _b.length; _i++) {
598
- var _c = _b[_i], headerName = _c[0], headerValue = _c[1];
543
+ for (headerName in headers) {
544
+ headerValue = headers[headerName];
599
545
  xhr.setRequestHeader(headerName, headerValue);
600
546
  }
601
547
  this.emit("sending", file, xhr);
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);
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));
608
556
  }
609
- };
610
- return WCCDropzone;
611
- }(BaseDropzone);
557
+ return results;
558
+ }
559
+ };
612
560
 
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?";
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?";
614
562
 
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;
563
+ WCC.Dropzone.prototype.defaultOptions.url = "UNUSED";
564
+
565
+ WCC.Dropzone.prototype.defaultOptions.dictDefaultMessage = "Drop files or click to upload.";
566
+
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);
630
580
  }
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
- }));
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
+ });
652
596
  }));
653
- $("form:has(.tessa-upload)").each((function(i, form) {
654
- var $form = $(form);
655
- $form.on("submit", (function(event) {
656
- var safeToSubmit = true;
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;
657
607
  $form.find(".tessa-upload").each((function(j, dropzoneElement) {
658
- dropzoneElement.dropzone.files.forEach((function(file) {
659
- if (file.status && file.status != WCCDropzone.SUCCESS) {
660
- safeToSubmit = false;
608
+ return $(dropzoneElement.dropzone.files).each((function(k, file) {
609
+ if (file.status != null && file.status !== WCC.Dropzone.SUCCESS) {
610
+ return safeToSubmit = false;
661
611
  }
662
612
  }));
663
613
  }));
664
- if (!safeToSubmit && !confirm(uploadPendingWarning)) {
614
+ if (!safeToSubmit && !confirm(WCC.Dropzone.uploadPendingWarning)) {
665
615
  return false;
666
616
  }
667
617
  }));
668
618
  }));
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
- }
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
681
625
  };
682
- FileChecksum.create(file, (function(error, checksum) {
683
- if (error) {
684
- return done(error);
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;
685
646
  }
686
- if (!checksum) {
687
- return done("Failed to generate checksum for file '".concat(file.name, "'"));
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);
688
654
  }
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
- });
655
+ return actionInput.val(file.action);
656
+ };
657
+ dropzone.on("success", (function(file) {
658
+ file.action = "add";
659
+ return updateAction(file);
705
660
  }));
706
- };
707
- }
661
+ return dropzone.on("removedfile", (function(file) {
662
+ file.action = "remove";
663
+ return updateAction(file);
664
+ }));
665
+ }));
666
+ };
708
667
 
709
- $(tessaInit);
668
+ $((function() {
669
+ return window.WCC.tessaInit();
670
+ }));
@@ -2,34 +2,6 @@
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
- };
33
5
  var sparkMd5 = {
34
6
  exports: {}
35
7
  };
@@ -440,260 +412,249 @@
440
412
  return SparkMD5;
441
413
  }));
442
414
  })(sparkMd5);
443
- var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
444
- var FileChecksum = function() {
445
- function FileChecksum(file) {
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) {
446
423
  this.file = file;
447
424
  this.chunkSize = 2097152;
448
425
  this.chunkCount = Math.ceil(this.file.size / this.chunkSize);
449
426
  this.chunkIndex = 0;
450
427
  }
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;
428
+ create(callback) {
457
429
  this.callback = callback;
458
- this.md5Buffer = new sparkMd5.exports.ArrayBuffer;
430
+ this.md5Buffer = new SparkMD5.ArrayBuffer;
459
431
  this.fileReader = new FileReader;
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
- }));
432
+ this.fileReader.addEventListener("load", (event => this.fileReaderDidLoad(event)));
433
+ this.fileReader.addEventListener("error", (event => this.fileReaderDidError(event)));
466
434
  this.readNextChunk();
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
- }
435
+ }
436
+ fileReaderDidLoad(event) {
476
437
  this.md5Buffer.append(event.target.result);
477
438
  if (!this.readNextChunk()) {
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");
439
+ const binaryDigest = this.md5Buffer.end(true);
440
+ const base64digest = btoa(binaryDigest);
441
+ this.callback(null, base64digest);
493
442
  }
443
+ }
444
+ fileReaderDidError(event) {
445
+ this.callback(`Error reading ${this.file.name}`);
446
+ }
447
+ readNextChunk() {
494
448
  if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {
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);
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);
498
452
  this.fileReader.readAsArrayBuffer(bytes);
499
453
  this.chunkIndex++;
500
454
  return true;
501
455
  } else {
502
456
  return false;
503
457
  }
504
- };
505
- return FileChecksum;
506
- }();
507
- window.WCC || (window.WCC = {});
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
458
  }
516
- WCCDropzone.prototype.uploadFile = function(file) {
517
- var _this = this;
518
- var _a;
519
- var xhr = new XMLHttpRequest;
459
+ }
460
+ var $;
461
+ 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;
520
468
  file.xhr = xhr;
521
469
  xhr.open(file.uploadMethod, file.uploadURL, true);
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) {
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) {
531
475
  progress = 100 * e.loaded / e.total;
532
- file.upload = __assign(__assign({}, file.upload), {
476
+ file.upload = {
533
477
  progress: progress,
534
478
  total: e.total,
535
479
  bytesSent: e.loaded
536
- });
480
+ };
537
481
  } else {
482
+ allFilesFinished = true;
538
483
  progress = 100;
539
- var allFilesFinished = false;
540
- if (file.upload.progress == 100 && file.upload.bytesSent == file.upload.total) {
541
- allFilesFinished = true;
484
+ if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
485
+ allFilesFinished = false;
542
486
  }
543
487
  file.upload.progress = progress;
544
- file.upload.bytesSent = (_a = file.upload) === null || _a === void 0 ? void 0 : _a.total;
488
+ file.upload.bytesSent = file.upload.total;
545
489
  if (allFilesFinished) {
546
490
  return;
547
491
  }
548
492
  }
549
- _this.emit("uploadprogress", file, progress, file.upload.bytesSent);
493
+ return this.emit("uploadprogress", file, progress, file.upload.bytesSent);
550
494
  };
551
- xhr.onload = function(e) {
552
- if (file.status == WCCDropzone.CANCELED) {
495
+ xhr.onload = e => {
496
+ var ref;
497
+ if (file.status === WCC.Dropzone.CANCELED) {
553
498
  return;
554
499
  }
555
- if (xhr.readyState != 4) {
500
+ if (xhr.readyState !== 4) {
556
501
  return;
557
502
  }
558
503
  response = xhr.responseText;
559
- if (xhr.getResponseHeader("content-type") && xhr.getResponseHeader("content-type").indexOf("application/json") >= 0) {
504
+ if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
560
505
  try {
561
506
  response = JSON.parse(response);
562
- } catch (e) {
507
+ } catch (error1) {
508
+ e = error1;
563
509
  response = "Invalid JSON response from server.";
564
510
  }
565
511
  }
566
512
  updateProgress();
567
- if (xhr.status < 200 || xhr.status >= 300) handleError(); else {
568
- _this._finished([ file ], response, e);
513
+ if (!(200 <= (ref = xhr.status) && ref < 300)) {
514
+ return handleError();
515
+ } else {
516
+ return this._finished([ file ], response, e);
569
517
  }
570
518
  };
571
- xhr.onerror = function() {
572
- if (file.status == WCCDropzone.CANCELED) {
519
+ xhr.onerror = () => {
520
+ if (file.status === WCC.Dropzone.CANCELED) {
573
521
  return;
574
522
  }
575
- handleError();
523
+ return handleError();
576
524
  };
577
- var progressObj = (_a = xhr.upload) !== null && _a !== void 0 ? _a : xhr;
525
+ progressObj = (ref = xhr.upload) != null ? ref : xhr;
578
526
  progressObj.onprogress = updateProgress;
579
- var headers = {
527
+ headers = {
580
528
  Accept: "application/json",
581
529
  "Cache-Control": "no-cache",
582
530
  "X-Requested-With": "XMLHttpRequest"
583
531
  };
584
532
  if (this.options.headers) {
585
- Object.assign(headers, this.options.headers);
533
+ $.extend(headers, this.options.headers);
586
534
  }
587
535
  if (file.uploadHeaders) {
588
- Object.assign(headers, file.uploadHeaders);
536
+ $.extend(headers, file.uploadHeaders);
589
537
  }
590
- for (var _i = 0, _b = Object.entries(headers); _i < _b.length; _i++) {
591
- var _c = _b[_i], headerName = _c[0], headerValue = _c[1];
538
+ for (headerName in headers) {
539
+ headerValue = headers[headerName];
592
540
  xhr.setRequestHeader(headerName, headerValue);
593
541
  }
594
542
  this.emit("sending", file, xhr);
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);
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));
601
551
  }
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
602
566
  };
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;
567
+ postData = $.extend(postData, tessaParams);
568
+ return FileChecksum.create(file, (function(error, checksum) {
569
+ if (error) {
570
+ return done(error);
621
571
  }
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
- }));
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
+ });
643
587
  }));
644
- $("form:has(.tessa-upload)").each((function(i, form) {
645
- var $form = $(form);
646
- $form.on("submit", (function(event) {
647
- var safeToSubmit = true;
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;
648
597
  $form.find(".tessa-upload").each((function(j, dropzoneElement) {
649
- dropzoneElement.dropzone.files.forEach((function(file) {
650
- if (file.status && file.status != WCCDropzone.SUCCESS) {
651
- safeToSubmit = false;
598
+ return $(dropzoneElement.dropzone.files).each((function(k, file) {
599
+ if (file.status != null && file.status !== WCC.Dropzone.SUCCESS) {
600
+ return safeToSubmit = false;
652
601
  }
653
602
  }));
654
603
  }));
655
- if (!safeToSubmit && !confirm(uploadPendingWarning)) {
604
+ if (!safeToSubmit && !confirm(WCC.Dropzone.uploadPendingWarning)) {
656
605
  return false;
657
606
  }
658
607
  }));
659
608
  }));
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
- }
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
671
615
  };
672
- FileChecksum.create(file, (function(error, checksum) {
673
- if (error) {
674
- return done(error);
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;
675
636
  }
676
- if (!checksum) {
677
- return done("Failed to generate checksum for file '".concat(file.name, "'"));
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);
678
644
  }
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
- });
645
+ return actionInput.val(file.action);
646
+ };
647
+ dropzone.on("success", (function(file) {
648
+ file.action = "add";
649
+ return updateAction(file);
695
650
  }));
696
- };
697
- }
698
- $(tessaInit);
651
+ return dropzone.on("removedfile", (function(file) {
652
+ file.action = "remove";
653
+ return updateAction(file);
654
+ }));
655
+ }));
656
+ };
657
+ $((function() {
658
+ return window.WCC.tessaInit();
659
+ }));
699
660
  }));
@@ -25,11 +25,11 @@ module Tessa
25
25
 
26
26
  if asset&.key.present?
27
27
  return @builder.hidden_field("#{attribute_name}", {
28
- value: asset.key,
28
+ value: asset.signed_id,
29
29
  data: {
30
30
  meta: meta_for_blob(asset).merge({
31
31
  # this allows us to find the hidden HTML input to remove it if we remove the asset
32
- "signedID" => asset.key,
32
+ "signedID" => asset.signed_id,
33
33
  })
34
34
  }
35
35
  })
data/lib/tessa/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Tessa
2
- VERSION = "6.0.0"
2
+ VERSION = "6.0.1"
3
3
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tessa
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.0
4
+ version: 6.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Powell
8
8
  - Travis Petticrew
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-08-07 00:00:00.000000000 Z
12
+ date: 2023-08-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -218,7 +218,7 @@ homepage: https://github.com/watermarkchurch/tessa-client
218
218
  licenses:
219
219
  - MIT
220
220
  metadata: {}
221
- post_install_message:
221
+ post_install_message:
222
222
  rdoc_options: []
223
223
  require_paths:
224
224
  - lib
@@ -234,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
234
  version: '0'
235
235
  requirements: []
236
236
  rubygems_version: 3.0.3.1
237
- signing_key:
237
+ signing_key:
238
238
  specification_version: 4
239
239
  summary: Manage your assets.
240
240
  test_files: