Skip to content

Conversation

@ru3fu5z
Copy link

@ru3fu5z ru3fu5z commented Nov 11, 2025

Kurzbeschreibung

Die Style-Dropdowns (BlockStyles und InlineStyles) in CKEditor zeigten bisher nicht an, welcher Style aktuell aktiv ist. Mit diesem PR wird der Zustand korrekt angezeigt und die Aktivierung/Deaktivierung der Block-Style-Kommandos stabilisiert. Das verbessert die Redakteurs-UX deutlich und behebt das als „Known Issue“ dokumentierte Verhalten.

Datum: 2025-11-11 14:54


Hintergrund/Motivation

In Projekten mit TechDivision.CkStyles wurden Styles korrekt angewendet, aber das Dropdown im Editor blieb visuell leer. Das Paket verwies bisher auf eine „autoparagraph“-Limitation des CKEditors. Die Analyse zeigte jedoch zwei konkrete Implementierungsfehler:

  • Falscher Redux-Selector in den React-Select-Komponenten (es wurde der Node-Pfad statt des Formatierungs-States gelesen)
  • Unvollständige State-Logik in BlockStyleCommand.refresh() (kein Reset von isEnabled)

Änderungen im Detail

  1. React-Selectoren korrigiert
  • Datei: Packages/Plugins/TechDivision.CkStyles/Resources/Private/JavaScript/CkStyles/src/components/BlockStyleSelector.js
    • Änderung: selectors.CR.Nodes.focusedNodePathSelector(state)selectors.UI.ContentCanvas.formattingUnderCursor(state)
  • Datei: Packages/Plugins/TechDivision.CkStyles/Resources/Private/JavaScript/CkStyles/src/components/InlineStyleSelector.js
    • Änderung: selectors.CR.Nodes.focusedNodePathSelector(state)selectors.UI.ContentCanvas.formattingUnderCursor(state)
  1. Command-Refresh robuster gemacht
  • Datei: Packages/Plugins/TechDivision.CkStyles/Resources/Private/JavaScript/CkStyles/src/BlockStyleCommand.js
    • In refresh() vor der Schleife: this.isEnabled = false;
    • In der Schleife bei erstem Treffer: break;
  1. Build/Assets
  • JS neu gebaut, Output aktualisiert: Packages/Plugins/TechDivision.CkStyles/Resources/Public/JavaScript/CkStyles/Plugin.js

Technische Erläuterung

  • formattingUnderCursor ist der korrekte Redux-Selector, der den CKEditor-Formatierungszustand unter dem Cursor bereitstellt. Dieser enthält Keys wie inlineStyles:<preset> bzw. blockStyles:<preset> und deren aktuelle Werte.
  • Ohne Reset von isEnabled konnte der Zustand von Commands zwischen Selektionen „kleben“ bleiben. Der explizite Reset garantiert korrekte Aktivierung nur, wenn das Schema das Attribut wirklich erlaubt.

@ru3fu5z
Copy link
Author

ru3fu5z commented Nov 11, 2025

related #43

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant