From f6ae89587c9737ff2550b91bd9e84c011b8306fb Mon Sep 17 00:00:00 2001 From: n1474335 Date: Fri, 28 Oct 2022 12:24:16 +0100 Subject: [PATCH] EOL sequences are now preserved between tabs --- src/web/waiters/InputWaiter.mjs | 12 +++++++++++- src/web/waiters/OutputWaiter.mjs | 17 ++++++++++++++++- src/web/workers/InputWorker.mjs | 8 +++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/web/waiters/InputWaiter.mjs b/src/web/waiters/InputWaiter.mjs index a9a86b75..9f584a98 100644 --- a/src/web/waiters/InputWaiter.mjs +++ b/src/web/waiters/InputWaiter.mjs @@ -470,6 +470,7 @@ class InputWaiter { * @param {string} status * @param {number} progress * @param {number} encoding + * @param {string} eolSequence * @param {boolean} [silent=false] - If false, fires the manager statechange event */ async set(inputNum, inputData, silent=false) { @@ -477,8 +478,16 @@ class InputWaiter { const activeTab = this.manager.tabs.getActiveTab("input"); if (inputNum !== activeTab) return; + // Update current character encoding this.inputChrEnc = inputData.encoding; + // Update current eol sequence + this.inputEditorView.dispatch({ + effects: this.inputEditorConf.eol.reconfigure( + EditorState.lineSeparator.of(inputData.eolSequence) + ) + }); + if (inputData.file) { this.setFile(inputNum, inputData); } else { @@ -634,7 +643,8 @@ class InputWaiter { inputNum: inputNum, buffer: buffer, stringSample: stringSample, - encoding: this.getChrEnc() + encoding: this.getChrEnc(), + eolSequence: this.inputEditorView.state.lineBreak } }, transferable); } diff --git a/src/web/waiters/OutputWaiter.mjs b/src/web/waiters/OutputWaiter.mjs index 57eede3c..08e870e6 100755 --- a/src/web/waiters/OutputWaiter.mjs +++ b/src/web/waiters/OutputWaiter.mjs @@ -129,6 +129,13 @@ class OutputWaiter { eolChange(eolVal) { const oldOutputVal = this.getOutput(); + const currentTabNum = this.manager.tabs.getActiveTab("output"); + if (currentTabNum >= 0) { + this.outputs[currentTabNum].eolSequence = eolVal; + } else { + throw new Error("Cannot change output eol sequence to " + eolVal); + } + // Update the EOL value this.outputEditorView.dispatch({ effects: this.outputEditorConf.eol.reconfigure(EditorState.lineSeparator.of(eolVal)) @@ -336,7 +343,8 @@ class OutputWaiter { status: "inactive", bakeId: -1, progress: false, - encoding: 0 + encoding: 0, + eolSequence: "\u000a" }; this.outputs[inputNum] = newOutput; @@ -491,6 +499,13 @@ class OutputWaiter { const outputFile = document.getElementById("output-file"); + // Update the EOL value + this.outputEditorView.dispatch({ + effects: this.outputEditorConf.eol.reconfigure( + EditorState.lineSeparator.of(output.eolSequence) + ) + }); + // If pending or baking, show loader and status message // If error, style the tab and handle the error // If done, display the output if it's the active tab diff --git a/src/web/workers/InputWorker.mjs b/src/web/workers/InputWorker.mjs index aecc7a17..b3ac4e4a 100644 --- a/src/web/workers/InputWorker.mjs +++ b/src/web/workers/InputWorker.mjs @@ -31,6 +31,7 @@ self.pendingFiles = []; * @property {string} status * @property {number} progress * @property {number} encoding + * @property {string} eolSequence */ self.inputs = {}; self.loaderWorkers = []; @@ -514,6 +515,7 @@ self.updateInputProgress = function(inputData) { * @param {number} inputData.inputNum - The input that's having its value updated * @param {ArrayBuffer} inputData.buffer - The new value of the input as a buffer * @param {number} [inputData.encoding] - The character encoding of the input data + * @param {string} [inputData.eolSequence] - The end of line sequence of the input data * @param {string} [inputData.stringSample] - A sample of the value as a string (truncated to 4096 chars) */ self.updateInputValue = function(inputData) { @@ -527,6 +529,9 @@ self.updateInputValue = function(inputData) { if ("encoding" in inputData) { self.inputs[inputNum].encoding = inputData.encoding; } + if ("eolSequence" in inputData) { + self.inputs[inputNum].eolSequence = inputData.eolSequence; + } if (!("stringSample" in inputData)) { inputData.stringSample = Utils.arrayBufferToStr(inputData.buffer.slice(0, 4096)); } @@ -762,7 +767,8 @@ self.addInput = function( file: null, status: "pending", progress: 0, - encoding: 0 + encoding: 0, + eolSequence: "\u000a" }; switch (type) {