diff --git a/ts/editor/CodeMirror.svelte b/ts/editor/CodeMirror.svelte index 204d22161..d2859ee10 100644 --- a/ts/editor/CodeMirror.svelte +++ b/ts/editor/CodeMirror.svelte @@ -30,6 +30,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html export let configuration: CodeMirrorLib.EditorConfiguration; export let code: Writable; + export let hidden = false; const defaultConfiguration = { rtlMoveVisually: true, @@ -79,6 +80,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html use:openCodeMirror={{ configuration: { ...configuration, ...defaultConfiguration }, resolve, + hidden, }} /> diff --git a/ts/editor/code-mirror.ts b/ts/editor/code-mirror.ts index f9dbb9d3e..91d8f0ef3 100644 --- a/ts/editor/code-mirror.ts +++ b/ts/editor/code-mirror.ts @@ -63,24 +63,37 @@ export function focusAndSetCaret( interface OpenCodeMirrorOptions { configuration: CodeMirror.EditorConfiguration; resolve(editor: CodeMirror.EditorFromTextArea): void; + hidden: boolean; } export function openCodeMirror( textarea: HTMLTextAreaElement, - { configuration, resolve }: Partial, + options: Partial, ): { update: (options: Partial) => void; destroy: () => void } { - const editor = CodeMirror.fromTextArea(textarea, configuration); - resolve?.(editor); + let editor: CodeMirror.EditorFromTextArea; - return { - update({ configuration }: Partial): void { + function update({ + configuration, + resolve, + hidden, + }: Partial): void { + if (editor) { for (const key in configuration) { editor.setOption( key as keyof CodeMirror.EditorConfiguration, configuration[key], ); } - }, + } else if (!hidden) { + editor = CodeMirror.fromTextArea(textarea, configuration); + resolve?.(editor); + } + } + + update(options); + + return { + update, destroy(): void { editor.toTextArea(); }, diff --git a/ts/editor/plain-text-input/PlainTextInput.svelte b/ts/editor/plain-text-input/PlainTextInput.svelte index 7556d9364..c639ffa76 100644 --- a/ts/editor/plain-text-input/PlainTextInput.svelte +++ b/ts/editor/plain-text-input/PlainTextInput.svelte @@ -136,7 +136,13 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html class:hidden on:focusin={() => ($focusedInput = api)} > - +