Feature/tabs 9.1.0#427
Conversation
…iert, Version 9.1.1
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
Moin WalkthroughÄnderungspaket für MForm 9.1: Repeater‑Decode erweitert auf int|string mit decodeById, ID‑freies Tab‑Rendering (JS + Backend + CSS + ARIA), umfangreiche Form‑Builder‑Erweiterungen (Palette, neue Feldtypen, Modal), zahlreiche Template/Demo‑ und Dokumentationsanpassungen sowie Version‑Bump. ChangesMForm 9.1 – Repeater, Tabs, Builder, Docs
Sequence Diagram(s)(Kein zusätzliches Diagramm in sichtbarem Bereich – relevante flows wurden im versteckten Review‑Artefakt visualisiert.) Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related issues
Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Pull request overview
Bumps MForm to 9.1.1 and standardizes Repeater decoding to support slot-id based access (decode(1)) while also rolling in the related Tabs/Form-Builder updates and documentation/demo alignments for the 9.1 line.
Changes:
MFormRepeaterHelper::decode()now acceptsint|stringand addsdecodeById(int $valueId)for direct REDAXO value-slot decoding.- Tabs rendering was updated towards an ID-free/tab-scoped approach (PHP renderer + fragments + JS init), including optional
tab-style/tab-layouthandling. - Visual Form Builder palette/properties were extended (search, modal, alerts, toggle checkbox, color swatch) and docs/demos were updated accordingly.
Reviewed changes
Copilot reviewed 49 out of 49 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| pages/module/wrapper/tabs/output.inc | Demo output switched to decode(<slot>) usage. |
| pages/module/wrapper/tabs_modern_vertical/output.inc | New demo output for modern/vertical tabs wrapper. |
| pages/module/wrapper/tabs_modern_vertical/input.inc | New demo input using tab-style / tab-layout attributes. |
| pages/module/wrapper/inline/output.inc | Demo output switched to decode(<slot>). |
| pages/module/wrapper/columns/output.inc | Demo output switched to decode(<slot>). |
| pages/module/wrapper/collapse/output.inc | Demo output switched to decode(<slot>). |
| pages/module/wrapper/collapse_select/output.inc | Demo output switched to decode(<slot>). |
| pages/module/wrapper/collapse_checkradio/output.inc | Demo output switched to decode(<slot>). |
| pages/module/wrapper/accordion/output.inc | Demo output switched to decode(<slot>). |
| pages/module/repeater/widgets_repeater/output.inc | Demo output switched to decode(<slot>). |
| pages/module/repeater/tinymce_nested_repeater/output.inc | Demo output switched to decode(<slot>). |
| pages/module/repeater/tabs_repeater_tabs/output.inc | New nested demo output for “tabs → repeater in tab → tabs”. |
| pages/module/repeater/tabs_repeater_tabs/input.inc | New nested demo input for “tabs → repeater in tab → tabs”. |
| pages/module/repeater/single_repeater/output.inc | Demo output switched to decode(<slot>). |
| pages/module/repeater/nested_repeater/output.inc | Demo output switched to decode(<slot>). |
| pages/module/repeater/copy_paste_repeater/output.inc | Demo output switched to decode(<slot>). |
| pages/module/extended/placeholder/output.inc | Demo output switched to decode(<slot>). |
| pages/module/expert/template_api/output.inc | Demo output switched to decode(<slot>). |
| pages/module/expert/repeater_helper_api/output.inc | Demo output switched to decode(<slot>). |
| pages/module/expert/html_form_elements/output.inc | Demo output switched to decode(<slot>). |
| pages/module/expert/color_swatch_demo/output.inc | Demo output switched to decode(<slot>). |
| pages/module/base/text/output.inc | Demo output switched to decode(<slot>). |
| pages/module/base/select/output.inc | Demo output switched to decode(<slot>). |
| pages/formbuilder.php | Form Builder UI updated (palette search, additional palette items, additional properties). |
| package.yml | Version bump to 9.1.1. |
| lib/MForm/Repeater/MFormRepeaterHelper.php | Adds decodeById() and extends decode() signature to accept slot ids. |
| lib/MForm/Parser/MFormParser.php | Adds tab layout/style class mapping and trims class concatenation for active. |
| lib/MForm/MFormElements.php | Maps tab-layout / tab-style to data-group-* attributes for grouping. |
| lib/MForm/FlexRepeater/MFormFlexRepeaterRenderer.php | Tab auto-grouping + ID-free tab markup for FlexRepeater rendering. |
| lang/en_gb.lang | Adds labels for new demo modules. |
| lang/de_de.lang | Adds labels for new demo modules. |
| fragments/mform/mform_wrapper.php | Updates tab wrapper/tab nav markup to match new JS/tab scoping approach. |
| docs/ROADMAP_9.1_ISSUES.md | Roadmap task list reorganized/updated. |
| docs/14_fragments_output.md | Updates repeater decode examples to slot-id form. |
| docs/13_api_reference.md | Updates API docs for new decode signature and tab options. |
| docs/11_tutorial_modul.md | Updates tutorial repeater decode examples to slot-id form. |
| docs/08_mblock_migration.md | Updates migration doc repeater decode examples to slot-id form. |
| docs/07_repeater.md | Updates repeater docs for slot-id decode and ID-free tabs guidance. |
| docs/05_wrapper.md | Documents optional tab variants (modern/vertical/icons). |
| docs/03_customlink.md | Updates repeater decode usage in examples. |
| docs/00_whats_new.md | Adds “Update 9.1” notes for tabs/form builder changes. |
| CHANGELOG.md | Adds 9.1.1 section and includes 9.1.0 notes. |
| assets/repeater.js | Updates repeater-context tab initialization to ID-free/tab-scoped toggling + ARIA linking. |
| assets/mform.js | Updates general tab initialization to ID-free/tab-scoped toggling + ARIA linking. |
| assets/js/formbuilder.js | Extends builder types (toggle checkbox, alerts, colorswatch, modal), palette search, and code generation. |
| assets/css/mform.css | Adds styling for modern + vertical tab variants (incl. dark theme variables). |
| assets/css/list-widget.css | Improves long text wrapping (overflow-wrap:anywhere). |
| assets/css/formbuilder.css | Adds palette scroll/search UI and improves colorswatch help wrapping. |
| assets/css/flex-repeater.css | Improves label wrapping (overflow-wrap:anywhere). |
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/07_repeater.md (1)
67-68:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winMoin – Signaturtabelle auf
int|stringaktualisieren.Hier steht noch
decode(string $rexValue), obwohl die Doku sonst bereitsdecode(1)zeigt. Das ist inkonsistent zur aktuellen API und kann bei der Nutzung verwirren. Bitte aufdecode(int|string $source)anpassen.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/07_repeater.md` around lines 67 - 68, Update the signature in the docs table to match the current API: replace the entry showing `decode(string $rexValue)` with `decode(int|string $source)` so it reflects the actual accepted types and parameter name; ensure the adjacent `prepareItemsForOutput(array $items)` entry remains unchanged and the table formatting stays consistent.
🧹 Nitpick comments (1)
assets/mform.js (1)
193-270: 🏗️ Heavy liftMoin – Tab-Initialisierung zentralisieren, um Drift zwischen Dateien zu vermeiden.
Die Logik in Line 193-270 ist nahezu identisch zu
assets/repeater.js(Line 69-146). Bitte in einen gemeinsamen Helper auslagern, damit Fixes an einer Stelle landen und nicht auseinanderlaufen.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/mform.js` around lines 193 - 270, Extract the duplicate tab-initialization logic (ensureAriaLinking, activateTab, the click handler on '[data-mform-tab-toggle]', and the final activation block that uses nav, panes, wrapper, and data attribute 'data-mform-tab-toggle' / 'data-tab-group-nav-tab-id') into a single shared helper module/function and replace the inline code in both locations with a call to that helper, passing the wrapper/nav/panes or a container element; ensure the helper preserves the existing behaviors (setting link/pane ids, aria-controls/aria-labelledby, aria-selected, active class toggling) and rebinds the click namespace 'click.mformTabs' on the provided wrapper so both original call sites simply invoke the new initializeTabs(container) helper.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@assets/js/formbuilder.js`:
- Around line 944-958: In renderCall(), there are two duplicate case
'togglecheckbox' labels causing the first (colorSwatchArray/parseColorSwatches)
branch to always capture togglecheckbox and the optionsArray/parseOptions branch
to never run; fix by making the first case only handle 'colorswatch' (remove
'togglecheckbox' from that case) so that item.type === 'togglecheckbox' falls
through to the branch that uses optionsArray(parseOptions(item.options)) and
phpStr(item.defaultValue) with attrPhp as intended (refer to parseColorSwatches,
colorSwatchArray, parseOptions, optionsArray, phpStr, attrPhp and the renderCall
function to locate the corrected switch).
In `@docs/00_whats_new.md`:
- Line 12: In the release doc line containing "Der Visual Form Builder
unterstuetzt diese drei Tab-Optionen ebenfalls in den Tab-Eigenschaften." fix
the user-facing typo by replacing "unterstuetzt" with the correct German umlaut
form "unterstützt" (and scan the same file for any other occurrences of
"unterstuetzt" to replace them as well).
---
Outside diff comments:
In `@docs/07_repeater.md`:
- Around line 67-68: Update the signature in the docs table to match the current
API: replace the entry showing `decode(string $rexValue)` with
`decode(int|string $source)` so it reflects the actual accepted types and
parameter name; ensure the adjacent `prepareItemsForOutput(array $items)` entry
remains unchanged and the table formatting stays consistent.
---
Nitpick comments:
In `@assets/mform.js`:
- Around line 193-270: Extract the duplicate tab-initialization logic
(ensureAriaLinking, activateTab, the click handler on '[data-mform-tab-toggle]',
and the final activation block that uses nav, panes, wrapper, and data attribute
'data-mform-tab-toggle' / 'data-tab-group-nav-tab-id') into a single shared
helper module/function and replace the inline code in both locations with a call
to that helper, passing the wrapper/nav/panes or a container element; ensure the
helper preserves the existing behaviors (setting link/pane ids,
aria-controls/aria-labelledby, aria-selected, active class toggling) and rebinds
the click namespace 'click.mformTabs' on the provided wrapper so both original
call sites simply invoke the new initializeTabs(container) helper.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: f2e4cf53-388d-423f-8268-3540906fbe7a
📒 Files selected for processing (49)
CHANGELOG.mdassets/css/flex-repeater.cssassets/css/formbuilder.cssassets/css/list-widget.cssassets/css/mform.cssassets/js/formbuilder.jsassets/mform.jsassets/repeater.jsdocs/00_whats_new.mddocs/03_customlink.mddocs/05_wrapper.mddocs/07_repeater.mddocs/08_mblock_migration.mddocs/11_tutorial_modul.mddocs/13_api_reference.mddocs/14_fragments_output.mddocs/ROADMAP_9.1_ISSUES.mdfragments/mform/mform_wrapper.phplang/de_de.langlang/en_gb.langlib/MForm/FlexRepeater/MFormFlexRepeaterRenderer.phplib/MForm/MFormElements.phplib/MForm/Parser/MFormParser.phplib/MForm/Repeater/MFormRepeaterHelper.phppackage.ymlpages/formbuilder.phppages/module/base/select/output.incpages/module/base/text/output.incpages/module/expert/color_swatch_demo/output.incpages/module/expert/html_form_elements/output.incpages/module/expert/repeater_helper_api/output.incpages/module/expert/template_api/output.incpages/module/extended/placeholder/output.incpages/module/repeater/copy_paste_repeater/output.incpages/module/repeater/nested_repeater/output.incpages/module/repeater/single_repeater/output.incpages/module/repeater/tabs_repeater_tabs/input.incpages/module/repeater/tabs_repeater_tabs/output.incpages/module/repeater/tinymce_nested_repeater/output.incpages/module/repeater/widgets_repeater/output.incpages/module/wrapper/accordion/output.incpages/module/wrapper/collapse/output.incpages/module/wrapper/collapse_checkradio/output.incpages/module/wrapper/collapse_select/output.incpages/module/wrapper/columns/output.incpages/module/wrapper/inline/output.incpages/module/wrapper/tabs/output.incpages/module/wrapper/tabs_modern_vertical/input.incpages/module/wrapper/tabs_modern_vertical/output.inc
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
assets/js/formbuilder.js (1)
1437-1448:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winMoin –
colorswatchwird hier mit dem falschen Parser kommentiert.
optionValuesComment()nimmt fürcolorswatchaktuellparseOptions(). Dadurch können die ausgegebenen „moegliche Werte“-Kommentare bei|preview-Syntax bzw. Zeilen ohne=irreführend sein.Vorgeschlagene Korrektur
- var opts = parseOptions(item.options || ''); + var opts = item.type === 'colorswatch' + ? parseColorSwatches(item.options || '') + : parseOptions(item.options || '');🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/js/formbuilder.js` around lines 1437 - 1448, The optionValuesComment() block currently treats 'colorswatch' like other choice fields by calling parseOptions(item.options || ''), which produces misleading "moegliche Werte" comments for color-swatch preview/lines without '='; update optionValuesComment() so that when item.type === 'colorswatch' it uses the colorswatch-specific parser (e.g. parseColorSwatchOptions or the existing color/swatch parser in the codebase) instead of parseOptions, and then format the returned swatch entries into the same lines array (preserving the "moegliche Werte:" header) so preview syntax and lines without '=' are handled correctly. Ensure you reference the item.type === 'colorswatch' branch, replace the parseOptions call with the color-swatch parser, and keep the rest of the lines construction logic compatible with color entries.
🧹 Nitpick comments (1)
CHANGELOG.md (1)
12-17: ⚡ Quick winMoin – Kompatibilitätsauswirkung der neuen Persistenz bitte explizit ergänzen.
Die 9.1.1-Einträge nennen die
localStorage-Persistenz, aber nicht klar als Kompatibilitäts-/Verhaltensänderung (z. B. „kein Breaking Change, aber Entwürfe bleiben backend-seitenübergreifend erhalten“).As per coding guidelines, "Update CHANGELOG.md with release-ready entries describing compatibility impacts when making relevant changes".
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@CHANGELOG.md` around lines 12 - 17, Add an explicit compatibility-impact sentence to the 9.1.1 CHANGELOG.md entry: under the "Form Builder Persistenz über Seitenwechsel" (and/or the "Persistenz-Reset im Form Builder") note, state that this introduces localStorage-backed persistence across backend pages, clarify it is not a breaking change but changes behavior (drafts remain backend-page-crossing) and explain user-visible effects (e.g., drafts persist across page switches and are cleared on "Alles loeschen" or when empty). Ensure the wording mentions version 9.1.1 and references the existing bullets "Form Builder Persistenz über Seitenwechsel" and "Persistenz-Reset im Form Builder" so readers understand compatibility impact.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@assets/js/formbuilder.js`:
- Around line 1437-1448: The optionValuesComment() block currently treats
'colorswatch' like other choice fields by calling parseOptions(item.options ||
''), which produces misleading "moegliche Werte" comments for color-swatch
preview/lines without '='; update optionValuesComment() so that when item.type
=== 'colorswatch' it uses the colorswatch-specific parser (e.g.
parseColorSwatchOptions or the existing color/swatch parser in the codebase)
instead of parseOptions, and then format the returned swatch entries into the
same lines array (preserving the "moegliche Werte:" header) so preview syntax
and lines without '=' are handled correctly. Ensure you reference the item.type
=== 'colorswatch' branch, replace the parseOptions call with the color-swatch
parser, and keep the rest of the lines construction logic compatible with color
entries.
---
Nitpick comments:
In `@CHANGELOG.md`:
- Around line 12-17: Add an explicit compatibility-impact sentence to the 9.1.1
CHANGELOG.md entry: under the "Form Builder Persistenz über Seitenwechsel"
(and/or the "Persistenz-Reset im Form Builder") note, state that this introduces
localStorage-backed persistence across backend pages, clarify it is not a
breaking change but changes behavior (drafts remain backend-page-crossing) and
explain user-visible effects (e.g., drafts persist across page switches and are
cleared on "Alles loeschen" or when empty). Ensure the wording mentions version
9.1.1 and references the existing bullets "Form Builder Persistenz über
Seitenwechsel" and "Persistenz-Reset im Form Builder" so readers understand
compatibility impact.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 8c71a178-0535-4b07-8ba1-ffc349fb9555
📒 Files selected for processing (3)
CHANGELOG.mdassets/js/flex-repeater.jsassets/js/formbuilder.js
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/07_repeater.md (1)
274-293:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winMoin, bitte die verpflichtenden Begleit-Dokus mitziehen (
00_whats_newund05_wrapper).Hier werden nutzerrelevante Wrapper/Tab-Änderungen dokumentiert; laut Repo-Regel sollten dazu zusätzlich
docs/00_whats_new.mdund das thematische Gegenstückdocs/05_wrapper.mdaktualisiert werden.As per coding guidelines "Add new user-relevant features to docs/00_whats_new.md and update topic-specific documentation files like docs/07_repeater.md and docs/05_wrapper.md".
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/07_repeater.md` around lines 274 - 293, Update docs/00_whats_new.md and docs/05_wrapper.md to include the new Repeater wrapper/Tab capabilities introduced in docs/07_repeater.md: summarize that FlexRepeater now supports wrapper methods like addStartGroupTab/addTab/addCloseTab/addCloseGroupTab, addTabElement, addCollapseElement/addStartGroupCollapse, addFieldsetArea, addStartGroupInline, addStartGroupColumn/addColumn/addCloseGroupColumn, and addModalElement; note ID-free tab rendering scoped by .mform-tabs and data attributes (data-tab-item, data-tab-group-nav-tab-id, data-group-open-tab), mention automatic grouping behavior when addTabElement is used without explicit group, and add cross-reference links from 00_whats_new and 05_wrapper to the detailed section in 07_repeater.md.
♻️ Duplicate comments (1)
assets/js/formbuilder.js (1)
1031-1045:⚠️ Potential issue | 🟠 Major | ⚡ Quick winMoin, doppeltes
case 'togglecheckbox'macht den korrekten Zweig unerreichbar.Der erste
togglecheckbox-Treffer landet imcolorSwatchArray(parseColorSwatches(...))-Pfad undbreakt sofort; der zweitetogglecheckbox-Block mitoptionsArray(parseOptions(...))wird nie ausgeführt.🔧 Vorschlag
- case 'togglecheckbox': case 'colorswatch': { line += ', ' + colorSwatchArray(parseColorSwatches(item.options)); var hasDefaultColorValue = !!item.defaultValue; if (attrPhp || hasDefaultColorValue) line += ', ' + (attrPhp || 'null'); if (hasDefaultColorValue) line += ', ' + phpStr(item.defaultValue); break; } case 'togglecheckbox': { line += ', ' + optionsArray(parseOptions(item.options)); var hasDefaultValue = !!item.defaultValue; if (attrPhp || hasDefaultValue) line += ', ' + (attrPhp || 'null'); if (hasDefaultValue) line += ', ' + phpStr(item.defaultValue); break; }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@assets/js/formbuilder.js` around lines 1031 - 1045, The switch has a duplicate case 'togglecheckbox' which causes the intended optionsArray branch to be unreachable; remove 'togglecheckbox' from the first case group so that the first block only handles 'colorswatch' (using parseColorSwatches/colorSwatchArray) and the later case 'togglecheckbox' block remains to handle optionsArray(parseOptions(...)) and defaultValue/phpStr logic (references: colorSwatchArray, parseColorSwatches, optionsArray, parseOptions, phpStr, attrPhp, item.defaultValue).
🧹 Nitpick comments (1)
lib/MForm/Repeater/MFormRepeaterHelper.php (1)
302-307: ⚡ Quick winMoin, PHPDoc von
decodeById()bitte auf Parameterebene vervollständigen.Der neue öffentliche Parameter
$valueIdfehlt im PHPDoc (@param), obwohl die umliegenden Methoden konsistent dokumentiert sind.🔧 Vorschlag
/** * Decodes repeater data from the current slice by value slot id. * + * `@param` int $valueId * `@return` array<int, array<string, mixed>> */ public static function decodeById(int $valueId): arrayAs per coding guidelines "Keep PHPDoc and type hints clean and consistent in PHP code".
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@lib/MForm/Repeater/MFormRepeaterHelper.php` around lines 302 - 307, Die PHPDoc für die öffentliche Methode decodeById(int $valueId): array fehlt den param-Eintrag; ergänze oberhalb der Funktion einen `@param` int $valueId Eintrag mit kurzer Beschreibung (z. B. "ID des Value-Slots, dessen Repeater-Daten decodiert werden sollen"), sodass die PHPDoc konsistent mit den umliegenden Methoden ist und der vorhandene `@return-Typ` erhalten bleibt.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/07_repeater.md`:
- Line 67: The markdown table row for `decode(int|string $source)` contains
three pipe-separated cells causing MD056; edit the table line that includes the
`decode(int|string $source)` entry and remove the extra column separator so the
row has exactly two cells (left: the code/descriptor `decode(int|string
$source)`, right: the descriptive text about slot resolution/JSON/entity
decoding and filtering), ensuring the table header and other rows remain
consistent.
---
Outside diff comments:
In `@docs/07_repeater.md`:
- Around line 274-293: Update docs/00_whats_new.md and docs/05_wrapper.md to
include the new Repeater wrapper/Tab capabilities introduced in
docs/07_repeater.md: summarize that FlexRepeater now supports wrapper methods
like addStartGroupTab/addTab/addCloseTab/addCloseGroupTab, addTabElement,
addCollapseElement/addStartGroupCollapse, addFieldsetArea, addStartGroupInline,
addStartGroupColumn/addColumn/addCloseGroupColumn, and addModalElement; note
ID-free tab rendering scoped by .mform-tabs and data attributes (data-tab-item,
data-tab-group-nav-tab-id, data-group-open-tab), mention automatic grouping
behavior when addTabElement is used without explicit group, and add
cross-reference links from 00_whats_new and 05_wrapper to the detailed section
in 07_repeater.md.
---
Duplicate comments:
In `@assets/js/formbuilder.js`:
- Around line 1031-1045: The switch has a duplicate case 'togglecheckbox' which
causes the intended optionsArray branch to be unreachable; remove
'togglecheckbox' from the first case group so that the first block only handles
'colorswatch' (using parseColorSwatches/colorSwatchArray) and the later case
'togglecheckbox' block remains to handle optionsArray(parseOptions(...)) and
defaultValue/phpStr logic (references: colorSwatchArray, parseColorSwatches,
optionsArray, parseOptions, phpStr, attrPhp, item.defaultValue).
---
Nitpick comments:
In `@lib/MForm/Repeater/MFormRepeaterHelper.php`:
- Around line 302-307: Die PHPDoc für die öffentliche Methode decodeById(int
$valueId): array fehlt den param-Eintrag; ergänze oberhalb der Funktion einen
`@param` int $valueId Eintrag mit kurzer Beschreibung (z. B. "ID des Value-Slots,
dessen Repeater-Daten decodiert werden sollen"), sodass die PHPDoc konsistent
mit den umliegenden Methoden ist und der vorhandene `@return-Typ` erhalten bleibt.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: c7527985-18d1-4456-8c99-06b646f0dee4
📒 Files selected for processing (4)
CHANGELOG.mdassets/js/formbuilder.jsdocs/07_repeater.mdlib/MForm/Repeater/MFormRepeaterHelper.php
✅ Files skipped from review due to trivial changes (1)
- CHANGELOG.md
Version 9.1.1
Verbesserungen
MFormRepeaterHelper::decode()akzeptiert jetzt neben String-Payloads auch direkt numerische Value-Slots (z. B.decode(1)).MFormRepeaterHelper::decodeById(int $valueId)für die direkte Auflösung über den REDAXO-Value-Slot.MFormRepeaterHelper::decode(<slot>)stattdecode('REX_VALUE[...]').Summary by CodeRabbit
Neue Features
Verbesserungen
Bug Fixes
Dokumentation