From 42cfed5fa81e6bcfa94fbce1b2cce1f8a3a5ac74 Mon Sep 17 00:00:00 2001 From: j433866 Date: Thu, 25 Jul 2019 15:16:07 +0100 Subject: [PATCH] Fix file inputs being overwritten with strings. Added force option in case we really need to overwrite --- src/web/waiters/InputWaiter.mjs | 8 +++++--- src/web/workers/InputWorker.mjs | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/web/waiters/InputWaiter.mjs b/src/web/waiters/InputWaiter.mjs index a261d294..40ec412f 100644 --- a/src/web/waiters/InputWaiter.mjs +++ b/src/web/waiters/InputWaiter.mjs @@ -515,8 +515,9 @@ class InputWaiter { * * @param {number} inputNum * @param {string | ArrayBuffer} value + * @param {boolean} [force=false] - If true, forces the value to be updated even if the type is different to the currently stored type */ - updateInputValue(inputNum, value) { + updateInputValue(inputNum, value, force=false) { let includeInput = false; const recipeStr = toBase64(value, "A-Za-z0-9+/"); // B64 alphabet with no padding if (recipeStr.length > 0 && recipeStr.length <= 68267) { @@ -534,7 +535,8 @@ class InputWaiter { action: "updateInputValue", data: { inputNum: inputNum, - value: value + value: value, + force: force } }, transferable); } @@ -1025,7 +1027,7 @@ class InputWaiter { this.manager.highlighter.removeHighlights(); getSelection().removeAllRanges(); - this.updateInputValue(inputNum, ""); + this.updateInputValue(inputNum, "", true); this.set({ inputNum: inputNum, diff --git a/src/web/workers/InputWorker.mjs b/src/web/workers/InputWorker.mjs index 4ec1d17f..cec68627 100644 --- a/src/web/workers/InputWorker.mjs +++ b/src/web/workers/InputWorker.mjs @@ -546,10 +546,13 @@ self.updateInputProgress = function(inputData) { * @param {object} inputData * @param {number} inputData.inputNum - The input that's having its value updated * @param {string | ArrayBuffer} inputData.value - The new value of the input + * @param {boolean} inputData.force - If true, still updates the input value if the input type is different to the stored value */ self.updateInputValue = function(inputData) { const inputNum = inputData.inputNum; if (inputNum < 1) return; + if (Object.prototype.hasOwnProperty.call(self.inputs[inputNum].data, "fileBuffer") && + typeof inputData.value === "string" && !inputData.force) return; const value = inputData.value; if (self.inputs[inputNum] !== undefined) { if (typeof value === "string") {