forked from fa/breadcrumb-the-shire
Most German docs were written with `ue`/`ae`/`oe`/`ss` ASCII fallbacks (`fuer`, `aenderung`, `koennen`, `gemaess`) — relic from older toolchain constraints. Replaced 237 occurrences across 38 .md files with proper umlauts and ß so the docs read naturally. Substitutions are constrained to plain prose: fenced code blocks (```...```), inline code spans (`...`), markdown link targets `[..](..)`, and HTML comments are preserved verbatim. Path references like `docs/howto-erste-aenderung.md` keep their original (umlaut-replaced) filenames — only the surrounding prose is normalised. Tool: bin/fix-md-umlauts.py (idempotent — no-op on already-clean files). Re-runnable if ASCII fallbacks creep back in via copy-paste. Doc-link-check + doc-drift-check stay green. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.4 KiB
4.4 KiB
UI Boundaries (MUST / MUST NOT)
Listen-Standard
- MUST Listen über
initStandardListPage(...)initialisieren. - MUST Filter-Toolbar über zentrale Helper/Partials rendern.
- MUST aktive Chips/Drawer-Verhalten über Standard-Contracts laufen lassen.
- MUST NOT direkt
gridFiltersFromSchema(...)oderinitListFilterExperience(...)in Listen-Templates verwenden. - MUST NOT Legacy-Filter-Toggle-Markup (
data-toolbar-toggle,data-filter-overflow,data-filter-toggle) neu einbauen. - MUST rowInteraction-Standard für Listen mit Row-Navigation beibehalten (sichtbare Action-Spalte + Enter + Doppelklick-Fallback).
- MUST pageSize-Standard beibehalten (10/25/50/100, Toolbar rechts, URL > localStorage > default).
Detailseiten-Standard
- MUST Hauptformular mit
data-standard-detail-form="1"markieren. - MUST Unsaved/Shortcut/Dirty-State über
initStandardDetailPage(...)nutzen. - MUST Detail-Aktionen über Action-Policy-Contract (
data-detail-action-policy,data-detail-action-kind,data-detail-confirm-message) steuern. - MUST NOT inline
confirm(...)(onclick/onsubmit) auf standardisierten Detailseiten nutzen.
Confirm + Telemetry Standard
- MUST Confirm-Dialoge zentral über den globalen Confirm-Service abwickeln.
- MUST NOT
window.confirm(...)in App-JS oder inline HTML-Handlern verwenden. - MUST relevante Frontend-Warnpfade zentral über Frontend-Telemetrie erfassen.
- MUST NOT relevante UX-/Fehlerpfade nur als Console-Warnung implementieren.
Frontend Page-Module Hard Cut
- MUST Seiteninitialisierung über dedizierte Module unter
web/js/pages/*umsetzen. - MUST Page-Config über
script[type="application/json"]+readPageConfig(...)bereitstellen/lesen. - MUST alle JS-
srcinpages/**undtemplates/**überassetVersion('...js...')laden. - MUST NOT inline
<script type="module">...</script>inpages/**odertemplates/**verwenden.
Component Lifecycle Runtime
- MUST migrierte Komponenten über
init(root, config)+destroy()standardisieren. - MUST NOT migrierte Komponenten per
DOMContentLoaded/Module-Sideeffect selbst auto-initialisieren. - MUST Listener, Timer und Observer, die in
init(...)entstehen, indestroy()wieder abbauen. - MUST Runtime-Konfiguration über Page-Config (
readPageConfig(...)) beziehen, keine verteilten Ad-hoc-Globals. - MUST host-gebundene UI-Komponenten über explizite
data-app-component-Hosts im Markup binden. - Global-Utilities ohne natürliches Host-Element MAY via Runtime
scope: 'global'registriert werden, MÜSSEN aber denselben Lifecycle-Contract inkl.destroy()einhalten.
Shared Partials
- MUST Listen-Titlebar über
templates/partials/app-list-titlebar.phtmlrendern. - MUST List-Tabs über
templates/partials/app-list-tabs.phtmlrendern. - MUST Purge-Action über
templates/partials/app-list-purge-action.phtmlrendern. - MUST Detail-Validation-Summary über
templates/partials/app-details-validation-summary.phtmlrendern.
RBAC in Templates
- MUST UI-Capabilities nur über
$viewAuthlesen. - MUST NOT
can('...')in Templates verwenden.
CSS Boundaries
- MUST Styles möglichst lokal in
web/css/components,web/css/layoutoderweb/css/pageshalten. - MUST NOT globale unscoped Overrides ohne klaren Scope einführen.
- MUST Vendor-Overrides nur in
web/css/vendor-overrides/**pflegen. - MUST bestehende CSS-Variablen bevorzugen statt neue Inline-Farbwerte zu verteilen.
Komponenten in Formularen
- MUST Core-Button-Klassen (
secondary outline small,danger outline small) verwenden statt Custom-Button-CSS. Custom-CSS nur für Layout (z.B.border-radius: 50%). - MUST
margin-bottom: 0auf Buttons, Inputs, Selects und Labels innerhalb selbststaendiger Komponenten in Formularen resetten (Core setztmargin-bottom: var(--app-spacing)global). - MUST Checkboxen in Flex-Containern mit expliziter Groesse (
width: 1.25em; height: 1.25em) undflex-shrink: 0versehen (Core nutztappearance: nonemit Custom-Sizing). - MUST
position: stickymittop: calc(var(--app-topbar-height) + ...)verwenden, nichttop: 0(Topbar ist sticky). - MUST Icon-Only-Buttons mit
data-tooltipundaria-labelversehen. - MUST bei
grid-template-columnsmit mehr als einer Spalte ein@media-Fallback auf Single-Column definieren. - MUST bestehende
--app-*CSS-Variablen für Farben verwenden, nie Farbwerte hardcoden.