enhancement
major
minor
defect
critical
major
minor
major
#30266
React-Konfigurationseditor: Mehrzeilige Texte (HTML, Markdown, Code, mehrzeilig) nutzen standardmäßig die ganze Zeile
Kontext
Im Konfigurationseditor der React-Oberfläche (z. B. im View-Designer und in Formularen über <config-form>) werden die Eigenschaften einer Konfiguration in einem mehrspaltigen Raster angezeigt. Ein Feld nimmt die volle Breite bisher nur dann ein, wenn die Eigenschaft oder ihr Werttyp mit @RenderWholeLine annotiert ist. Felder mit Text über mehrere Zeilen - internationalisiertes HTML, HTML-Quelltext, Markdown (@CommonMark), Code (@Code) und mehrzeiliger Text (@MultiLine) - stehen deshalb in einer schmalen Spalte des Rasters und sind kaum bearbeitbar.
Der klassische Konfigurationseditor gibt dagegen jedem internationalisierten Text (ResKey, HtmlResKey) die ganze Zeile; auch modellbasierte Formulare stellen mehrzeiligen Text (@MultiLine) über die ganze Zeile dar.
Verhalten
- Ein Feld, dessen Text mehrere Zeilen umfasst, nimmt im React-Konfigurationseditor standardmäßig die ganze Zeile ein: @Html, @CommonMark, @Code und @MultiLine, jeweils als einfacher und als internationalisierter Text, ebenso der WYSIWYG-Editor, der Code-Editor und der TL-Script-Editor.
- Einzeilige internationalisierte Texte bleiben im Raster: Sie werden in React als ein Eingabefeld in der Sprache des Benutzers bearbeitet (weitere Sprachen über einen Dialog) und brauchen die ganze Zeile nicht.
- Eine explizite Annotation @RenderWholeLine (auch @RenderWholeLine(false)) hat weiterhin Vorrang.
- Eigenschaften vom Typ HtmlResKey (z. B. die Beschreibung von Internationalized) werden wie ein internationalisierter HTML-Text pro Sprache bearbeitet (mit dem WYSIWYG-Editor, ohne ihn als HTML-Quelltext pro Sprache) und über die ganze Zeile dargestellt. Bisher wurden sie als einzeiliges Textfeld mit dem kodierten Schlüssel angeboten.
Technische Hinweise
- Ob ein Feld die ganze Zeile braucht, entscheidet der Provider, der das Eingabefeld erzeugt: ConfigControlProvider#rendersWholeLine(ConfigFieldModel) bzw. ConfigAnnotationControlProvider#rendersWholeLine(ConfigFieldModel, A), standardmäßig false - analog zu FieldProvider.renderWholeLine() der modellbasierten Formulare. So entscheidet auch ein Modul, das einen Editor ersetzt (WYSIWYG, Code-Editor), für seinen eigenen Editor. ConfigControlService#rendersWholeLine(ConfigFieldModel) fragt denselben Provider, den createControl verwendet; ConfigEditorControl nutzt es, wenn keine @RenderWholeLine-Annotation vorliegt.
- HtmlResKey: Format-Zuordnung für DefaultHtmlResKey$ValueFormat auf I18NHtmlFormatProvider (configedit) bzw. I18NHtmlWysiwygFormatProvider (react.wysiwyg). Die Umrechnung zwischen HtmlResKey und ResKey erledigt der allgemeine Adapter MappedFieldModel (com.top_logic.layout.react). Dass eine solche Eigenschaft mit eigenen Übersetzungen im Formular erscheint, regelt ConfigControlService#isEditedInField (#30223).
Migration
Nur für Anwendungen mit einem eigenen ConfigAnnotationControlProvider (React-Konfigurationseditor): Ein Provider lehnt eine Eigenschaft nicht mehr ab, indem er aus createControl(...) null zurückgibt, sondern über die Methode accepts(ConfigFieldModel model, A annotation). createControl wird nur noch für akzeptierte Eigenschaften aufgerufen und darf kein null liefern. Die bisherige Bedingung für das null-Ergebnis wird in eine Überschreibung von accepts verschoben (z. B. return ConfigControlService.holdsText(model);). Soll das erzeugte Eingabefeld die ganze Zeile einnehmen (mehrzeiliger Inhalt), zusätzlich rendersWholeLine(ConfigFieldModel, A) mit true überschreiben.