Skip to content

Removed label column class for full-width items - #460

Merged
skerbis merged 1 commit into
FriendsOfREDAXO:mainfrom
JulianSchnaars:patch-1
Sep 23, 2026
Merged

skerbis merged 1 commit into
FriendsOfREDAXO:mainfrom
JulianSchnaars:patch-1

Conversation

@JulianSchnaars

@JulianSchnaars JulianSchnaars commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

The control-label class pulls the label to the right. This is not required for full-width inputs as those are aligned left.

Summary by CodeRabbit

  • Fehlerbehebungen
    • Bei vollständig ausgefüllten Formularfeldern wird die Beschriftung nicht mehr mit der zusätzlichen Label-Formatierung dargestellt. Die übrige Spaltenaufteilung bleibt unverändert. Dadurch wird die Darstellung dieser Beschriftungen angepasst, ohne das Layout der anderen Spalten zu verändern.

The control-label class pulls the label to the right. This is not required for full-width inputs as those are aligned left.
@coderabbitai

coderabbitai Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 31e609a5-4e64-4b8b-b9a2-7464054ac99b

📥 Commits

Reviewing files that changed from the base of the PR and between 1ce45be and f6acd1e.

📒 Files selected for processing (1)
  • lib/MForm/FlexRepeater/MFormFlexRepeaterRenderer.php

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


Moin

Walkthrough

Bei vollständigen FlexRepeater-Feldern entfernt wrapFormGroup die Klasse control-label aus der Label-Spalte. Die übrigen Spaltenklassen bleiben unverändert.

Changes

FlexRepeater-Label

Layer / File(s) Zusammenfassung
Klasse der Label-Spalte anpassen
lib/MForm/FlexRepeater/MFormFlexRepeaterRenderer.php
Wenn isFull() zutrifft, erhält die Label-Spalte nur noch col-sm-12 mfr-field-label.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Bug fix

Suggested reviewers: skerbis

Merge Risk: ⚪ Minimal · up to f6acd

The focused label-class change has no confirmed behavior or availability risk and is mergeable with normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Moin. Der Titel beschreibt klar die zentrale Änderung: Bei Elementen mit voller Breite entfällt die Klasse control-label in der Label-Spalte.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@skerbis

skerbis commented Sep 23, 2026

Copy link
Copy Markdown
Member

Danke dir, Julian! 🙏

Ich habe das nachgestellt und kann es bestätigen: Der klassische Parser-Pfad setzt bei setFull() über das Fragment mform_default.php (default_full) genau col-sm-12 ohne control-label – der Flex-Repeater wich davon ab, entgegen seinem eigenen Kommentar "setFull() wie in den Parser-Templates".

Direkter Vergleich am gerenderten Markup:

Flex-Repeater setFull():   <div class="control-label col-sm-12 mfr-field-label">
Klassischer Parser:        <div class="col-sm-12">

Und deine Begründung passt: be_style definiert .form-horizontal .control-label { … text-align: right }, ein rechtsbündiges Label über einem linksbündigen Full-Width-Input ist schlicht falsch. Die Zeile ist außerdem die einzige Stelle im lib/-Verzeichnis, die das so setzt – der Einzeiler ist also vollständig.

Ein Nebeneffekt als Hinweis, den ich separat nachziehe: assets/css/flex-repeater.css selektiert für die Layouts vertical/inline ausschließlich über .control-label; die ohnehin vorhandene Klasse .mfr-field-label wird im CSS nirgends benutzt. Für setFull()-Felder entfallen damit in diesen Layouts margin-bottom, font-weight und das overflow-wrap: anywhere. Ich stelle die Selektoren in einem Folge-PR auf .mfr-field-label um, dann ist das Styling unabhängig von der Bootstrap-Klasse.

Wird gemergt.

@skerbis
skerbis merged commit fc82051 into FriendsOfREDAXO:main Sep 23, 2026
1 check passed
skerbis added a commit that referenced this pull request Sep 23, 2026
)

* Beispielmodule repariert, Helper fuer Nicht-Repeater-Slots, 10.0.1

Fuenf der mitgelieferten Demo-Module liefen beim Ausfuehren auf einen Fatal
Error, liessen sich aber ueber die Beispiele-Seite als echte Module
installieren: falsches Argument bei addSelectField(), setSize('full') statt
setSize(int), fehlendes use-Statement und das nicht existierende
rex_var::toStr(). Alle 42 Demo-Module werden jetzt gegen eine laufende
REDAXO-Instanz gerendert und sind fehlerfrei.

14 Demos hatten als output.inc nur einen Debug-Stub
(dump(MFormRepeaterHelper::decode(...))) - bei Nicht-Repeater-Demos zusaetzlich
mit der falschen Methode, die dort nur [] liefern kann. Alle haben jetzt einen
echten Ausgabe-Code.

decode() warf bei Slots mit Punkt-Notation einen TypeError, weil deren Werte
keine Item-Arrays sind. Es prueft nun, ob ueberhaupt eine Repeater-Liste
vorliegt, und liefert sonst []. Fuer solche Slots gibt es jetzt
MFormOutputHelper::values(), value() und isRepeater(); MFormRepeaterHelper
traegt dieselben Methoden als Alias, damit der gewohnte Einstieg ueber decode()
weiter funktioniert.

Alle Datenformate, die 10.0.0 verarbeitet hat, liefern unveraendert dasselbe
Ergebnis - durch einen eigenen Test abgesichert. Die oeffentliche API waechst
nur, nichts wurde entfernt oder umbenannt.

Ausserdem sprechen die Flex-Repeater-Styles die Label-Spalte jetzt ueber
.mfr-field-label an statt ueber .control-label. Nach #460 haetten
setFull()-Felder in den Layouts vertical und inline sonst ihre
Label-Formatierung verloren.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* installer_ignore: Entwicklungs- und Test-Artefakte nicht mit ausliefern

Das Release-ZIP enthielt bisher tests/, phpunit.xml.dist, composer.json/lock,
node_modules und die Linter-Konfigurationen. Zur Laufzeit wird davon nichts
gebraucht - REDAXO autoloadet nur lib/ und vendor/, gelesen wird keine dieser
Dateien.

docs/ bleibt bewusst drin: pages/docs.php rendert die Markdown-Dateien als
Doku-Seite im Backend.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* CodeRabbit-Review: values() bei Punkt-Notation ab .0, doppeltes Escaping

values() gab fuer Punkt-Notation ab Index 0 ein leeres Array zurueck. Felder wie
1.0 und 1.1 landen als JSON-Liste (["a","b"]) im Slot - die Pruefung
array_is_list() hat die faelschlich als Nicht-Feld-Wert abgewiesen. Betroffen
waren die Demos base/select, base/text, extended/placeholder und
expert/html_form_elements, die dadurch nichts ausgegeben haetten.

Die Pruefung ist ueberfluessig: isRepeaterPayload() faengt Repeater-Listen und
das Umschlag-Format bereits ab. An echten Slot-Werten aus der Datenbank
gegengeprueft - dort sind alle Listen Repeater-Daten, die weiterhin korrekt
abgewiesen werden.

Ausserdem maskierten vier Demos die REX_VALUE-Platzhalter doppelt. REDAXO setzt
REX_VALUE[n] ohne output-Argument bereits per rex_escape() + nl2br() ein
(rex_var_value::getOutput()), und rex_var ersetzt auch innerhalb von
String-Literalen. Aus "Tom & Jerry" wurde so "Tom &amp;amp; Jerry" und aus
Zeilenumbruechen sichtbares "&lt;br /&gt;". Die zweite Maskierung ist raus.

Die Changelog- und Doku-Formulierung sagte, alle drei Methoden gaeben immer ein
Array zurueck. Das gilt nur fuer values(); value() liefert den angefragten Wert
oder den Default.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

2 participants