tessa 6.0.0 → 6.0.1

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: 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: