Журнал изменений
Die zwei Submit-Buttons im Datenbank-Modul nutzen jetzt getHtmlFrag('button') statt getHtmlFrag('input') und übergeben name_attr direkt — konsistent mit dem erweiterten button-Fragment-Vertrag.
Core changes:
- dump() — database.php:
getHtmlFrag('input', ['itype' => 'submit', 'name_attr' => ..., 'input_attr' => 'class="..."']) → getHtmlFrag('button', ['button_type' => 'submit', 'name_attr' => ..., 'class' => '...'])
- Betrifft _DB_PARSE (sl-but-green) und _EXECUTE (sl-but-blue)
Benefits:
- Einheitlicher button-Fragment-Aufruf über alle Module
- name_attr als expliziter Parameter statt über input_attr-String
Technical notes:
- button.html rendert <input type="submit"> — kein Unterschied im HTML-Output
Überflüssige Wrapper-Divs (.sl-box-pad, .sl-box-content) aus box.html, table.html, module-head.html und preview.html entfernt; button.html um name_attr erweitert; session-summary auf sl-but umgestellt.
Core changes:
- box.html / table.html / module-head.html / preview.html:
- .sl-box-pad und .sl-box-content Wrapper-Divs entfernt
- .sl-box bleibt als äußerer Container erhalten
- Inhalt rückt eine Ebene nach oben
- button.html:
- name="{{ name_attr }}" Attribut ergänzt (für submit-Buttons mit name)
- is_chlog_primary/is_chlog_secondary: sl-changelog-button-* Klassen durch sl-but-blue / sl-but ersetzt
- session-summary.html:
- Update-Button-Link: sl-session-button → sl-but (einheitliche Button-Klasse)
Benefits:
- Weniger DOM-Tiefe ohne CSS-Auswirkungen
- button.html abdeckt jetzt auch submit-Buttons mit name-Attribut
- Konsistente Verwendung von sl-but statt fragment-spezifischen Aliases
Technical notes:
- sl-box-pad und sl-box-content hatten keine eigenen CSS-Regeln — rein strukturelles Markup
- Bestehende Aufrufer von box.html / table.html nicht betroffen
Drei CSS-Dateien koordiniert überarbeitet: theme.css übernimmt das Seiten-Layout mit modernem Gradient und responsive Wrapper; system.css konsolidiert die Button-Stile auf inline-flex mit einheitlicher Höhe; new.css gibt die duplizierten Button-Regeln ab.
Core changes:
- theme.css:
- html: Gradient-Hintergrund (#8bc7dd → #c7e5f0 → #d9eef6) statt pagebg.jpg
- body: transparent, min-height 100vh; body:has(.slaenter) zentriert Login per CSS Grid
- .wrapper: responsive width: min(1280px, calc(100vw - 32px)), border + box-shadow statt PNG-Wraptop/Wrapfoot
- Neue sl-admin-* Layoutklassen: sl-admin-main (flex), sl-admin-sidebar, sl-admin-content, sl-admin-header, sl-admin-footer, sl-admin-brand, sl-admin-toolbar, sl-admin-language
- .slaenter-spezifisches Layout entfernt (Login läuft jetzt über body:has(.slaenter))
- system.css:
- .sl-but, .sl-but-blue, .sl-but-red, .sl-but-green, .sl-but-foot, .sl-but-back: inline-flex statt inline-block; min-height: 29px, padding: 0 12px statt feste height/line-height
- Legacy sl_but_* Alias-Klassen entfernt
- new.css:
- Duplizierte .sl-but / .sl-but-blue / .sl-but-red / .sl-but-green Regeln entfernt (jetzt nur in system.css)
- sl-div-item-full: CodeMirror/cm-editor/sl_code_editor ergänzt, min-width: 0 gesetzt
Benefits:
- Login-Seite ohne PNG-Abhängigkeit, korrekt zentriert auf allen Viewports
- Einheitliche Button-Höhe (29px) über alle Kontexte
- Responsive Wrapper löst fixed 1094px ab
Technical notes:
- body:has(.slaenter) setzt overflow: hidden — kein Scroll auf Login-Seite
- sl-admin-main nutzt flex mit sl-admin-sidebar (flex: 0 0 auto) und sl-admin-content (flex: 1)
Admin- und Login-Layout auf semantische HTML5-Elemente umgestellt und einheitliche sl-admin-* CSS-Klassen als strukturelle Marker eingeführt, um das Layout von den alten float-basierten lcolomn/rcolomn-Klassen zu lösen.
Core changes:
- admin.html:
- <meta name="viewport"> ergänzt
- .wrapper erhält zusätzlich sl-admin-shell
- .header erhält sl-admin-header; lcolomn/rcolomn durch sl-admin-brand / sl-admin-toolbar ersetzt
- Doppeltes .vsep + .container + float-Struktur durch sl-admin-main / <aside class="sl-admin-sidebar"> / <main class="sl-admin-content"> ersetzt
- .footer erhält sl-admin-footer
- .language erhält sl-admin-language
- bare.html (Login-Layout):
- Gleiche sl-admin-* Klassenergänzungen
- .wrapper zusätzlich sl-admin-login-shell
- .header → sl-admin-login-header
Benefits:
- Semantische aside/main-Elemente für Accessibility und Lesbarkeit
- sl-admin-* Marker als stabile CSS-Anker unabhängig von Legacy-Klassen
- Viewport-Meta ermöglicht responsives Verhalten
Technical notes:
- Alte Klassen (lcolomn, rcolomn, vsep, container) bleiben im HTML erhalten für Rückwärtskompatibilität
- sl-admin-shell / sl-admin-sidebar / sl-admin-content sind neue CSS-Klassen (theme.css)
Drei Dashboard-/Sidebar-Elemente erhalten CSS-Farbverläufe statt PNG-Sprites. Zusätzlich strukturelle CSS-Klassen für die neuen Grid-Komponenten eingeführt, die durch die Fragment-Migration benötigt werden.
Core changes:
- Gradient-Header (new.css):
- .sl-dashboard-panel-head: blauer Verlauf (ersetzt bchead.png)
- .sl-sidebar-block h3: grüner Verlauf (ersetzt leftblocktop.png + leftbdbtm.png)
- .sl-sidebar-block:has([data-sl-toggle-control="sl_block_3/4"]) h3: oranger Verlauf für "Новые" und "Ждут проверки"
- Strukturelle Grid-CSS (new.css):
- sl-sidebar-count-row / sl-sidebar-count-list / sl-sidebar-count-label / sl-sidebar-count-value
- sl-admin-block-links / sl-admin-block-link
- sl-session-line / sl-session-row / sl-session-name / sl-session-module / sl-session-* Hilfsklassen
- sl-tabs-content > .sl-tab-panel:first-child { display: block } — erster Tab sichtbar per Default
Benefits:
- PNG-freie Darstellung für drei zentrale UI-Elemente
- Orange-Kennzeichnung von Moderations-Blöcken per CSS :has() ohne HTML-Änderung
- Strukturklassen ermöglichen konsistentes Grid-Layout in Sidebar-Blöcken
Technical notes:
- border-radius + overflow:hidden auf .sl-sidebar-block ersetzt negative Margins auf h3
- Farbverlauf-Formel: hell oben → mittel → Knick bei 50% → leicht dunkler unten
Die "Новые"- und "Ждут проверки"-Sidebar-Blöcke wurden von der table-row/table-cells-Struktur auf das neue sidebar-count-row-Fragment umgestellt — konsistentes Rendering ohne Tabellen-Overhead.
Core changes:
- admininfo() — "Новые"-Block (core/admin.php):
- Alle Modul-Zähler (users, faq, files, links, news, pages, shop, whois usw.) von getHtmlFrag('table-row', [...table-cells...]) auf getHtmlFrag('sidebar-count-row', ['label_html', 'value_html']) umgestellt
- Wrapper von getHtmlFrag('table', [...]) auf getHtmlFrag('content-block', ['class' => 'sl-sidebar-count-list']) gewechselt
- admininfo() — "Ждут проверки"-Block (core/admin.php):
- Kommentare-Zeile analog migriert
Benefits:
- Kein table-row/table-cells-Nesting mehr für einfache Label+Zahl-Paare
- sidebar-count-row ist eigenständig styled und wiederverwendbar
- PHP-Code klarer lesbar durch flache Fragment-Aufrufe
Technical notes:
- sidebar-count-row erwartet label_html (HTML-String) und value_html (HTML-String)
- sl-sidebar-count-list als Wrapper-Klasse für das Grid-Layout
Neue Fragment- und Partial-Dateien für den Admin-Bereich eingeführt, bestehende Fragmente von Tabellen-/Include-Struktur auf eigenständige Grid-Layouts und Inline-HTML migriert — für bessere Wartbarkeit und CSS-Grid-Kompatibilität.
Core changes:
- Neue atomare Head/Meta-Fragmente (head-link.html, head-script-inline.html, head-script-src.html, meta-refresh.html, span.html):
Kapseln HTML-Primitive als eigene Fragmente
- Einheitlicher Einstiegspunkt für <link>, <script src>, <script inline>, <meta http-equiv="refresh">, <span>
- Neues Fragment sidebar-count-row.html / Partial session-summary.html:
- sidebar-count-row: Grid-Layout für Label+Zahl-Paare im Sidebar-Block
- session-summary: Eigenständiges Partial für die Sitzungsübersicht mit Toggle-Logik
- Migrierte Fragmente (admin-block-links, session-row, tabs-link):
- admin-block-links: Tabelle → sl-admin-block-links Grid
- session-row: <tr><td> → sl-session-row Grid
- tabs-link: {% include %} → Inline-HTML mit sl-tabs-link-Logik
Benefits:
- Einheitliche Grid-Struktur ersetzt heterogene Tabellen-Hacks
- Fragmente sind unabhängig renderbar ohne Eltern-Kontext
- CSS-Klassen direkt im Fragment statt im PHP-Caller
Technical notes:
- sidebar-count-row erwartet label_html und value_html
- session-summary erwartet Admins/Members/Bots/Visitors-Daten inkl. Toggle-IDs
Updated required-file lists and CSS class assertions to match renamed templates, and added two new test methods to TemplateValidationTest for exhaustive reference checking and inline style detection.
Core changes:
- TemplateValidationTest (tests/TemplateValidationTest.php):
- Required frontend files: partials/liste.html → partials/content-list.html
New test testConcreteTemplateReferencesExist():
- Scans all PHP/HTML files in admin/, modules/, and template dirs
- Resolves every getHtmlFrag/getHtmlPart call to its template file path
- Resolves every {% include %} / {% extends %} reference
- Fails if any referenced file does not exist on disk
New test testHtmlTemplatesDoNotContainInlineStyles():
- Scans all .html template files (including module templates)
- Fails if any file contains <style>, </style>, or style= attributes
- AdminPreviewBridgeFlowTest (tests/Unit/AdminPreviewBridgeFlowTest.php):
- Updated assertions to reflect new admin preview partial contract
- ViewBridgeSmokeTest (tests/Unit/ViewBridgeSmokeTest.php):
- testHomeLayoutRendersCorrectly: sl_home → sl-home CSS class assertion
Benefits:
testConcreteTemplateReferencesExist provides an exhaustive linkage check; any missing template file is caught before runtime
- testHtmlTemplatesDoNotContainInlineStyles enforces the CSS convention
Technical notes:
- New tests scan the entire project tree at test time; no mocks required
Updated all module handlers (admin and public) to use canonical fragment names, pass the required button_type to form-submit, replace the renamed partials, and align account/forum/shop callers with new partial names.
Core changes:
- Fragment renames in all callers:
post-div → content-block (account, forum, files, links, news, pages, media, faq, shop, sitemap, voting, users, money, main, auto_links, clients, contact, content, help, jokes, order, recommend, rss, whois)
title-tip → info-tooltip (admin modules: account, content, files, forum, links, media, news, order, pages, shop, voting)
- forum-cat-wrap → forum-category-table
- forum-cat-basic → forum-category-row
form-submit: added button_type: 'submit' to all occurrences in public module handlers where previously omitted (account, files, links, etc.)
- Partial renames in callers:
- liste → content-list (account: last(), edithome())
- account-view → account-profile (account: view())
- fieldset-block → fieldset-panel (forum: forum(), view())
account/view(): added editor-action-menu fragment for admin actions (replaces inline has_admin_actions HTML in account-view/account-profile)
- admin_actions_html passed as rendered HTML to account-profile partial
- auto_links/index.php:
- cat-navi → category-nav
- shop/index.php:
- shop-rech → shop-invoice
Benefits:
- All module callers use canonical fragment names consistently
- form-submit button_type requirement fulfilled sitewide
Technical notes:
- No logic changes; substitution and contract alignment only
Removed the admin/public rendering split in changelog/common.php so both contexts now use the same fragment-based templates. Extended changelog/index.php with nested field sub-objects for the new partial contract. Fixed the billing template CSS reference.
Core changes:
- modules/changelog/common.php:
chlogRenderCommitStats: removed ADMIN_FILE branch; both contexts now call getHtmlFrag('changelog-stats', ...) with a files array for dot-path rendering
chlogRenderCommits: removed all ADMIN_FILE branches; all contexts now use getHtmlFrag('changelog-commit', ...) and getHtmlFrag('changelog-date-header', ...)
- body_html passed as pre-filtered content string (no wrapper fragment)
- basic-changelog-commit and changelog-commit-body fragments retired
- modules/changelog/index.php:
Added nested field sub-objects to getHtmlPart('changelog', ...):
- hidden, search_field, author_field, file_field, datefrom_field, dateto_field
- filter_button, reset_button (full button sub-objects with class overrides)
- modules/money/templates/billing.html:
- CSS link: templates/$theme/styles.css → templates/$theme/assets/css/new.css
Benefits:
- Single rendering path for changelog reduces maintenance surface
- Billing HTML now loads the correct CSS bundle
Technical notes:
- changelog-stats fragment now receives a files[] array for dot-path item rendering
- Callers passing body as raw string; changelog-commit wraps it if non-empty