From c7c51d764fc3adc41b97993703138213edf71ed2 Mon Sep 17 00:00:00 2001 From: Johannes Marbach Date: Thu, 26 Oct 2023 15:35:02 +0200 Subject: [PATCH] Deserialise spoilers back into slash command form (#11805) * Deserialise spoilers back into slash command form Fixes: vector-im/element-web#26344 * Appease the linter --- src/editor/deserialize.ts | 4 ++++ test/editor/deserialize-test.ts | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/editor/deserialize.ts b/src/editor/deserialize.ts index 3b9c1cee2c..1d2d1f6b29 100644 --- a/src/editor/deserialize.ts +++ b/src/editor/deserialize.ts @@ -247,6 +247,10 @@ function parseNode(n: Node, pc: PartCreator, opts: IParseOptions, mkListItem?: ( return pc.plainWithEmoji(`${delimLeft}${tex}${delimRight}`); } + // Spoilers are translated back into their slash command form + else if ((n as Element).hasAttribute("data-mx-spoiler")) { + return [pc.plain("/spoiler "), ...parseChildren(n, pc, opts)]; + } } } diff --git a/test/editor/deserialize-test.ts b/test/editor/deserialize-test.ts index 275f34ca8f..2bd4925ec0 100644 --- a/test/editor/deserialize-test.ts +++ b/test/editor/deserialize-test.ts @@ -98,6 +98,11 @@ describe("editor/deserialize", function () { expect(parts.length).toBe(1); expect(parts[0]).toStrictEqual({ type: "plain", text: "/me says DON'T SHOUT!" }); }); + it("spoiler", function () { + const parts = normalize(parseEvent(textMessage("/spoiler broiler"), createPartCreator())); + expect(parts.length).toBe(1); + expect(parts[0]).toStrictEqual({ type: "plain", text: "/spoiler broiler" }); + }); }); describe("html messages", function () { it("inline styling", function () { @@ -295,6 +300,13 @@ describe("editor/deserialize", function () { expect(parts.length).toBe(1); expect(parts[0]).toStrictEqual({ type: "plain", text: "/me says _DON'T SHOUT_!" }); }); + it("spoiler", function () { + const parts = normalize( + parseEvent(htmlMessage("broiler"), createPartCreator()), + ); + expect(parts.length).toBe(1); + expect(parts[0]).toStrictEqual({ type: "plain", text: "/spoiler broiler" }); + }); it("preserves nested quotes", () => { const html = "
foo
bar
"; const parts = normalize(parseEvent(htmlMessage(html), createPartCreator()));