Refresh the stored value when changing the language
authorAlexander Ebert <ebert@woltlab.com>
Mon, 20 Nov 2023 17:06:40 +0000 (18:06 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Mon, 20 Nov 2023 17:06:40 +0000 (18:06 +0100)
Fixes #5712

ts/WoltLabSuite/Core/Language/Input.ts
ts/WoltLabSuite/Core/Language/Text.ts

index 81c0381f4e7c56fb3b6932fedb8a56c2aa1c1886..b4eaf2601b23bc4fd32ac00a7c6cd249d5464127 100644 (file)
@@ -28,7 +28,7 @@ type Values = Map<LanguageId, string>;
 
 export type InputOrTextarea = HTMLInputElement | HTMLTextAreaElement;
 
-type CallbackEvent = "select" | "submit";
+type CallbackEvent = "beforeSelect" | "select" | "submit";
 type Callback = (element: InputOrTextarea) => void;
 
 interface ElementData {
@@ -194,6 +194,11 @@ function select(elementId: string, languageId: number, isInit: boolean): void {
     const values = _values.get(elementId)!;
 
     if (data.languageId) {
+      const beforeSelect = data.callbacks.get("beforeSelect");
+      if (beforeSelect) {
+        beforeSelect(data.element);
+      }
+
       values.set(data.languageId, data.element.value);
     }
 
index 2755bfc53b8407b8c8e904de1b1782426a8c510b..1b69af96a214c4c10dd2a5f864f8f2f7938c3d32 100644 (file)
@@ -42,4 +42,7 @@ export function init(
 
   LanguageInput.registerCallback(elementId, "select", callbackSelect);
   LanguageInput.registerCallback(elementId, "submit", callbackSubmit);
+
+  // CKEditor does not permanently mirror the contents to the <textarea>.
+  LanguageInput.registerCallback(elementId, "beforeSelect", callbackSubmit);
 }