From 7819e6c4402c9fed1d3e4058120617b63644ddf6 Mon Sep 17 00:00:00 2001 From: Aitor Moreno Date: Wed, 7 Jan 2026 12:18:05 +0100 Subject: [PATCH 1/2] :bug: Fix previous styles lost when changing selected text --- CHANGES.md | 2 +- .../editor/controllers/SelectionController.js | 38 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 41b4b44eaa..431495c074 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -23,7 +23,7 @@ - Fix wrong board size presets in Android [Taiga #12339](https://tree.taiga.io/project/penpot/issue/12339) - Fix problem with grid layout components and auto sizing [Github #7797](https://github.com/penpot/penpot/issues/7797) - Fix some alignments on inspect tab [Taiga #12915](https://tree.taiga.io/project/penpot/issue/12915) - +- Fix problem with text editor maintaining previous styles [Taiga #12835](https://tree.taiga.io/project/penpot/issue/12835) ## 2.12.1 diff --git a/frontend/text-editor/src/editor/controllers/SelectionController.js b/frontend/text-editor/src/editor/controllers/SelectionController.js index 2586aab148..add28d65d7 100644 --- a/frontend/text-editor/src/editor/controllers/SelectionController.js +++ b/frontend/text-editor/src/editor/controllers/SelectionController.js @@ -242,7 +242,6 @@ export class SelectionController extends EventTarget { continue; } let styleValue = element.style.getPropertyValue(styleName); - if (styleName === "font-family") { styleValue = sanitizeFontFamily(styleValue); } @@ -277,22 +276,29 @@ export class SelectionController extends EventTarget { this.#applyDefaultStylesToCurrentStyle(); const root = startNode.parentElement.parentElement.parentElement; this.#applyStylesFromElementToCurrentStyle(root); - // FIXME: I don't like this approximation. Having to iterate nodes twice - // is bad for performance. I think we need another way of "computing" - // the cascade. - for (const textNode of this.#textNodeIterator.iterateFrom( - startNode, - endNode, - )) { - const paragraph = textNode.parentElement.parentElement; + if (startNode === endNode) { + const paragraph = startNode.parentElement.parentElement; this.#applyStylesFromElementToCurrentStyle(paragraph); - } - for (const textNode of this.#textNodeIterator.iterateFrom( - startNode, - endNode, - )) { - const textSpan = textNode.parentElement; - this.#mergeStylesFromElementToCurrentStyle(textSpan); + const textSpan = startNode.parentElement; + this.#applyStylesFromElementToCurrentStyle(textSpan); + } else { + // FIXME: I don't like this approximation. Having to iterate nodes twice + // is bad for performance. I think we need another way of "computing" + // the cascade. + for (const textNode of this.#textNodeIterator.iterateFrom( + startNode, + endNode, + )) { + const paragraph = textNode.parentElement.parentElement; + this.#applyStylesFromElementToCurrentStyle(paragraph); + } + for (const textNode of this.#textNodeIterator.iterateFrom( + startNode, + endNode, + )) { + const textSpan = textNode.parentElement; + this.#mergeStylesFromElementToCurrentStyle(textSpan); + } } return this; } From b0dc7d6ffbbaee6008962f9390e3d66140312007 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Thu, 8 Jan 2026 13:56:22 +0100 Subject: [PATCH 2/2] :wrench: Change default jmx port on deps.edn --- backend/deps.edn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/deps.edn b/backend/deps.edn index 31b5e48096..cbf1176953 100644 --- a/backend/deps.edn +++ b/backend/deps.edn @@ -97,8 +97,8 @@ :jmx-remote {:jvm-opts ["-Dcom.sun.management.jmxremote" - "-Dcom.sun.management.jmxremote.port=9090" - "-Dcom.sun.management.jmxremote.rmi.port=9090" + "-Dcom.sun.management.jmxremote.port=9000" + "-Dcom.sun.management.jmxremote.rmi.port=9000" "-Dcom.sun.management.jmxremote.local.only=false" "-Dcom.sun.management.jmxremote.authenticate=false" "-Dcom.sun.management.jmxremote.ssl=false"