"use strict";
|
Object.defineProperty(exports, "__esModule", { value: true });
|
exports.FileSelectionUi = void 0;
|
var strings_1 = require("../../strings");
|
var base_1 = require("./base");
|
var FileSelectionUi = (function () {
|
function FileSelectionUi(parentElement, showOnRender, onFileSelected) {
|
this.fileBasedScanRegion = this.createFileBasedScanRegion();
|
this.fileBasedScanRegion.style.display
|
= showOnRender ? "block" : "none";
|
parentElement.appendChild(this.fileBasedScanRegion);
|
var fileScanLabel = document.createElement("label");
|
fileScanLabel.setAttribute("for", this.getFileScanInputId());
|
fileScanLabel.style.display = "inline-block";
|
this.fileBasedScanRegion.appendChild(fileScanLabel);
|
this.fileSelectionButton
|
= base_1.BaseUiElementFactory.createElement("button", base_1.PublicUiElementIdAndClasses.FILE_SELECTION_BUTTON_ID);
|
this.setInitialValueToButton();
|
this.fileSelectionButton.addEventListener("click", function (_) {
|
fileScanLabel.click();
|
});
|
fileScanLabel.append(this.fileSelectionButton);
|
this.fileScanInput
|
= base_1.BaseUiElementFactory.createElement("input", this.getFileScanInputId());
|
this.fileScanInput.type = "file";
|
this.fileScanInput.accept = "image/*";
|
this.fileScanInput.style.display = "none";
|
fileScanLabel.appendChild(this.fileScanInput);
|
var $this = this;
|
this.fileScanInput.addEventListener("change", function (e) {
|
if (e == null || e.target == null) {
|
return;
|
}
|
var target = e.target;
|
if (target.files && target.files.length === 0) {
|
return;
|
}
|
var fileList = target.files;
|
var file = fileList[0];
|
var fileName = file.name;
|
$this.setImageNameToButton(fileName);
|
onFileSelected(file);
|
});
|
var dragAndDropMessage = this.createDragAndDropMessage();
|
this.fileBasedScanRegion.appendChild(dragAndDropMessage);
|
this.fileBasedScanRegion.addEventListener("dragenter", function (event) {
|
$this.fileBasedScanRegion.style.border
|
= $this.fileBasedScanRegionActiveBorder();
|
event.stopPropagation();
|
event.preventDefault();
|
});
|
this.fileBasedScanRegion.addEventListener("dragleave", function (event) {
|
$this.fileBasedScanRegion.style.border
|
= $this.fileBasedScanRegionDefaultBorder();
|
event.stopPropagation();
|
event.preventDefault();
|
});
|
this.fileBasedScanRegion.addEventListener("dragover", function (event) {
|
$this.fileBasedScanRegion.style.border
|
= $this.fileBasedScanRegionActiveBorder();
|
event.stopPropagation();
|
event.preventDefault();
|
});
|
this.fileBasedScanRegion.addEventListener("drop", function (event) {
|
event.stopPropagation();
|
event.preventDefault();
|
$this.fileBasedScanRegion.style.border
|
= $this.fileBasedScanRegionDefaultBorder();
|
var dataTransfer = event.dataTransfer;
|
if (dataTransfer) {
|
var files = dataTransfer.files;
|
if (!files || files.length === 0) {
|
return;
|
}
|
var isAnyFileImage = false;
|
for (var i = 0; i < files.length; ++i) {
|
var file = files.item(i);
|
if (!file) {
|
continue;
|
}
|
var imageType = /image.*/;
|
if (!file.type.match(imageType)) {
|
continue;
|
}
|
isAnyFileImage = true;
|
var fileName = file.name;
|
$this.setImageNameToButton(fileName);
|
onFileSelected(file);
|
dragAndDropMessage.innerText
|
= strings_1.Html5QrcodeScannerStrings.dragAndDropMessage();
|
break;
|
}
|
if (!isAnyFileImage) {
|
dragAndDropMessage.innerText
|
= strings_1.Html5QrcodeScannerStrings
|
.dragAndDropMessageOnlyImages();
|
}
|
}
|
});
|
}
|
FileSelectionUi.prototype.hide = function () {
|
this.fileBasedScanRegion.style.display = "none";
|
this.fileScanInput.disabled = true;
|
};
|
FileSelectionUi.prototype.show = function () {
|
this.fileBasedScanRegion.style.display = "block";
|
this.fileScanInput.disabled = false;
|
};
|
FileSelectionUi.prototype.isShowing = function () {
|
return this.fileBasedScanRegion.style.display === "block";
|
};
|
FileSelectionUi.prototype.resetValue = function () {
|
this.fileScanInput.value = "";
|
this.setInitialValueToButton();
|
};
|
FileSelectionUi.prototype.createFileBasedScanRegion = function () {
|
var fileBasedScanRegion = document.createElement("div");
|
fileBasedScanRegion.style.textAlign = "center";
|
fileBasedScanRegion.style.margin = "auto";
|
fileBasedScanRegion.style.width = "80%";
|
fileBasedScanRegion.style.maxWidth = "600px";
|
fileBasedScanRegion.style.border
|
= this.fileBasedScanRegionDefaultBorder();
|
fileBasedScanRegion.style.padding = "10px";
|
fileBasedScanRegion.style.marginBottom = "10px";
|
return fileBasedScanRegion;
|
};
|
FileSelectionUi.prototype.fileBasedScanRegionDefaultBorder = function () {
|
return "6px dashed #ebebeb";
|
};
|
FileSelectionUi.prototype.fileBasedScanRegionActiveBorder = function () {
|
return "6px dashed rgb(153 151 151)";
|
};
|
FileSelectionUi.prototype.createDragAndDropMessage = function () {
|
var dragAndDropMessage = document.createElement("div");
|
dragAndDropMessage.innerText
|
= strings_1.Html5QrcodeScannerStrings.dragAndDropMessage();
|
dragAndDropMessage.style.fontWeight = "400";
|
return dragAndDropMessage;
|
};
|
FileSelectionUi.prototype.setImageNameToButton = function (imageFileName) {
|
var MAX_CHARS = 20;
|
if (imageFileName.length > MAX_CHARS) {
|
var start8Chars = imageFileName.substring(0, 8);
|
var length_1 = imageFileName.length;
|
var last8Chars = imageFileName.substring(length_1 - 8, length_1);
|
imageFileName = "".concat(start8Chars, "....").concat(last8Chars);
|
}
|
var newText = strings_1.Html5QrcodeScannerStrings.fileSelectionChooseAnother()
|
+ " - "
|
+ imageFileName;
|
this.fileSelectionButton.innerText = newText;
|
};
|
FileSelectionUi.prototype.setInitialValueToButton = function () {
|
var initialText = strings_1.Html5QrcodeScannerStrings.fileSelectionChooseImage()
|
+ " - "
|
+ strings_1.Html5QrcodeScannerStrings.fileSelectionNoImageSelected();
|
this.fileSelectionButton.innerText = initialText;
|
};
|
FileSelectionUi.prototype.getFileScanInputId = function () {
|
return "html5-qrcode-private-filescan-input";
|
};
|
FileSelectionUi.create = function (parentElement, showOnRender, onFileSelected) {
|
var button = new FileSelectionUi(parentElement, showOnRender, onFileSelected);
|
return button;
|
};
|
return FileSelectionUi;
|
}());
|
exports.FileSelectionUi = FileSelectionUi;
|
//# sourceMappingURL=file-selection-ui.js.map
|