Add new sl-* CSS rules required by the consolidated partial and updated fragment templates introduced in this refactor wave. Applied uniformly to default, lite, and simple themes.
Core changes:
- Fieldset and text utility classes (*/assets/css/new.css):
- sl-fieldset-form-legend-success, sl-fieldset-form-legend-danger: fieldset legend states
- sl-fieldset-center: centered fieldset content
- sl-fieldset-legend-info: info-state legend color
- sl-text-success, sl-text-danger: inline text state colors
- sl-text-bold: font-weight shorthand
- sl-text-justify: text-align helper
- Alpha navigation letter badge:
- sl-letter: styled inline letter box for alpha-nav links (replaces old inline style)
- Rating system CSS (sl-rate-*):
- sl-rate, sl-urating, sl-crating: star rating bar layout and positioning
- min-rate variants: compact 16px rating bar for content lists
- sl-rate-like, sl-rate-plus, sl-rate-minus: like/dislike button sprites
- sl-rate-num, sl-rate-is: score bubble with directional arrow and active state
data-sl-rating-width attribute selectors (0–100): replace inline style width for CSP compliance and data-attribute-driven rendering
Benefits:
- All visual state decisions moved from PHP into CSS and data-attributes
- data-sl-rating-width eliminates inline style="width:X%" on rating bars
- New utility classes cover fieldset/form feedback states without custom CSS
Technical notes:
- sl-rate-* rules migrated from legacy inline CSS; no functional change
- data-sl-rating-width selectors cover 0–100 integer percent values
- Applied identically to default, lite, and simple themes
Delete all fragment templates that are no longer referenced by PHP callers after the migration to boolean-flag fragments, unified partials, and merged rating/list/action contracts. Applied uniformly to default, lite, and simple themes.
Core changes:
- Fragments replaced by boolean flags in existing fragments:
- category-link → link with is_category; category-select → select
- action-delete → link with is_delete; action-menu-item → list-item
- comment-date → inline-badge with is_comment_date
- comment-avatar → image with is_avatar; comment-rank-image → image
- meta-value → span with label; bold-text → span with is_bold
- br-line, break → removed (handled inline or replaced by list/line-stack-item)
- view-field → field-value fragment; heading-2 → title fragment
- alpha-nav-link, alpha-nav-text → removed (caller handles inline)
- navi-tab-link → link + list-item combination
- Fragments replaced by consolidated partials:
- account-view → partials/account-view; login → partials/login-nav
- contact-form, contact-email-body → partials/contact-form + message-block
- ajax-textarea-form → partials/form-wrap
- forum-reply-form, forum-mod-form, forum-mod-check, forum-mod-checkall → partials/forum-reply-form
- forum-htmx-edit-link, forum-status-img, forum-status-img-link, forum-topic-icon → partials
- files-download-form → partials/files-download-form
- recommend-form, recommend-mail-message → partials/recommend-form + message-block
- rss-info-form, rss-read-forms → respective partials
- session-summary → partials/session-summary
- shop-kasse-form, shop-voting-box → partials/shop-kasse-form
- voting-widget → partials/voting-widget
whois-domain-form, whois-info-button, whois-license-add-button, whois-license-form, whois-output-open/line/close, whois-result → partials/whois-output
- money-email-confirm, money-email-order, order-email-admin → partials + message-block
- comment-list-form → partials/mini-post-form; privat-message → forum-view-basic
- main-slider → partials/main-slider
- Rating duplicates removed:
- rating-bar-live, rating-like-live → merged into rating-bar/rating-like with is_live flag
- Misc micro-fragments removed:
- modul-link, media-link-break, media-post-badge, form-submit-btn
- faq-quicklinks-open, faq-quicklinks-row, faq-quicklinks-close → table/table-row
- partials/alerts, partials/login-without, partials/login
Benefits:
- Removes ~180 dead template files from the repository
- Fragment directory contains only actively used atomic components
- Eliminates the possibility of callers using stale/obsolete contracts
Technical notes:
- All deleted files have confirmed zero callers after previous refactor commits
- Applied identically to default, lite, and simple themes (~180 files total)
Rewrite existing fragment and partial templates to accept boolean semantic flags instead of raw CSS class strings, consolidate conditional rendering logic inside the templates, and merge live/static rating variants into unified fragments. Applied uniformly to default, lite, and simple themes.
Core changes:
- Universal fragments updated to accept boolean flags:
link: is_footer_button, is_last, is_account_button, is_votes, is_comments, is_delete, is_category, is_avatar_link, is_blank
- image: is_avatar (adds sl_avatar class internally)
- span: is_highlight, is_bold, is_message_in/out/save, is_hidden, is_votes
- post-div: is_form_submit, is_center
- table: is_form, is_avatar_grid, is_amount, is_faq; open/close handled internally
- select: is_account (replaces sl-field--account class string)
- button: is_legacy_green (replaces sl_but_green class string)
- textarea: is_editor_area (replaces sl_earea class string)
- comment-action-ajax: is_button_blue flag
- inline-badge: is_comment_date variant
- category-row: is_hidden flag replaces style string
- table-row: is_avatar flag in cell context
- Rating fragments merged and extended:
rating-bar: absorbs rating-bar-live behavior via is_live + target_id flags; has_score replaces nrate class string; data-sl-rating-width attribute for CSS
rating-like: absorbs rating-like-live behavior via is_live flag; has_score replaces nrate class string
- rating-wrap: is_like replaces wrap_class string
- Forum/view fragments updated:
- forum-view-basic: extended with is_private_message flag and new meta fields
- comment.html: updated field names for consistency
- Navigation and account fragments:
- account-nav, account-nav-item: updated slot names
- login-logged, navi, msg-center, main-section, main-content-item: minor updates
- Partials updated:
- view.html, contact-block.html: field name and conditional logic updates
Benefits:
- Templates own their own CSS decisions — PHP passes intent, not class names
- Fewer breaking changes needed for future CSS refactors
- Rating templates unified: 4 fragments → 2 with conditional live behavior
Technical notes:
rating-bar-live and rating-like-live fragments are no longer called from PHP (they remain as dead files until the delete commit removes them)
- All changes are backward-compatible within the new boolean API
Introduce consolidated partial templates and new utility fragments that replace multiple scattered atomic fragments with single reusable view-level contracts. Applied uniformly to default, lite, and simple themes.
Core changes:
- New partial templates (*/partials/):
- account-view: full user profile view shell
- contact-form: contact page form with captcha and field layout
- editor-upload-panel: BB-editor file upload panel with HTMX upload form
- fieldset-block: generic fieldset wrapper with legend and content
- fieldset-post-form: fieldset-wrapped post/comment add form
- files-download-form: file download action form
- form-wrap: generic form container (replaces ajax-textarea-form partial)
- forum-reply-form: forum reply/edit HTMX form
- line-list: ordered/unordered list layout for inline stacked items
- login-nav: login form embedded in site header navigation
- main-slider: front-page image slider partial
- message-block: generic labeled key-value email/notification block
- mini-post-form: compact inline post form
- recommend-form: recommend-to-friend form
- rss-info-form: RSS subscription info and subscribe form
- rss-read-forms: RSS reader add-source form
- session-summary: active session overview table
- shop-kasse-form: shop checkout/order form
- voting-widget: voting poll with results, admin controls, and footer links
- whois-output: WHOIS domain/IP lookup result panel
- New utility fragments (*/fragments/):
- list / list-item: generic ol/ul list and li item (replaces inline HTML lists)
- line-stack-item: stacked inline item wrapper
- debug-section: debug info section header
- debug-stats: CPU/memory stats row in debug panel
- email-noscript: noscript fallback block for HTML emails
- rss-source-title: RSS source title row
- security-mail-message: security event notification email body
Benefits:
- Eliminates inline HTML string concatenation for complex form/view layouts
- Single template file per concept instead of 3-8 micro-fragments per form
- Uniform partial contracts across all three themes
Technical notes:
- Applied identically to default, lite, and simple themes (87 new files total)
- PHP callers updated in preceding commits; these files complete the contract
Update all module callers to match the updated fragment/partial contracts: replace CSS class strings with boolean semantic flags, adopt consolidated partials for forms and views, and align getPageNumbers() calls with the dropped $frag parameter.
Core changes:
- Fragment API normalization (all 20 modules + admin/modules/referers.php):
link: 'class' => 'sl_but_foot' → is_footer_button; 'class' => 'sl_last' → is_last; 'class' => 'sl_but' → is_account_button; 'class' => 'sl_votes/sl_coms' → is_votes/is_comments
image: 'class' => 'sl_avatar' → is_avatar; link_class sl-avatar-link → is_avatar_link; 'img_class' → is_avatar in table-row cells
table: 'class' => 'sl_table_form' → is_form; + is_avatar_grid flag for avatar grids; 'class' => 'sl_table_amount' → is_amount
- post-div: 'class' => 'sl-form-submit' → is_form_submit; 'class' => 'sl_center' → is_center
- select: 'select_class' => 'sl-field--account' → is_account
- submit: 'class' => 'sl_but_blue' removed (fragment uses default style)
- Partial migration:
- contact: contact-form → getHtmlPart('contact-form'); contact-email-body → message-block
- account: account-view → getHtmlPart('account-view')
- faq: faq-quicklinks-open/row/close → table/table-row/table with is_faq flag
- files, forum, whois, shop, rss, recommend, money, order: respective obsolete fragments → partials
- Action element migration:
- action-delete → link with is_delete flag (across forum, content, faq, voting, news, etc.)
- action-menu-item → list-item with content_html key (all editor action menus)
- getPageNumbers() caller updates (admin + all modules):
- Drop first $frag argument from every call site
Benefits:
- Modules no longer carry CSS knowledge — all styling decisions live in templates
- Consistent boolean flag convention across all call sites
- Partial-based forms reduce inline HTML from module PHP files
Technical notes:
- getPageNumbers() breaking change handled in all 21 affected call sites
- No functional behavior changes — pure API contract migration
Replace raw CSS class strings and obsolete fragment names with boolean semantic flags and consolidated partial templates, completing the contract-driven template layer. getPageNumbers() signature simplified by removing the unused $frag parameter.
Core changes:
- Fragment/partial API migration (core/helpers.php):
- getPageNumbers(): remove dead $frag param, update all internal call sites
- getTplViewFieldRows(): view-field → field-value, label → label key rename
- getTplBbEditor(): inline HTML → getHtmlPart('editor-upload-panel', ...)
- getTplAjaxTextarea(): ajax-textarea-form → getHtmlPart('form-wrap', ...) + inlined buttons
- getRatingAsync(): nrate class string → has_score bool; rating-like-live/rating-bar-live merged into unified rating-like/rating-bar with is_live flag; wrap_class → is_like bool
- getTplCategorySelect(): category-select → getHtmlFrag('select', ...)
- Security email templates (core/security.php):
- addHackReport/addWarnReport: security-report-email + br-line → getHtmlPart('message-block', lines[])
- System helpers (core/system.php):
- setHead(): getHtmlFrag('login') → getHtmlPart('login-nav')
- filterTextHighlight(): remove admin-only span-raw branch, use span with is_highlight flag
- setCategories(): style string → is_hidden bool; category-link → link with is_category flag; category-row style → is_hidden
- addSitemapTask(): inline HTML ol/li → list/list-item fragments; add $tpl to globals
- getNaviTabs(): navi-tab-link → link + list-item
- getVotingView(): action-delete → link with is_delete; action-menu-item → list-item; voting-widget → getHtmlPart; CSS class strings → is_* booleans; width calculation clamped with max/min/round
- User/message templates (core/user.php):
- setComShow: submit class removed (default style)
- setMessageShow: post-div class → is_center bool
- getPrivateMessageView: action-menu-item → list-item; comment-date → inline-badge with is_comment_date; comment-rank-image → image; meta-value → span with label; privat-message → forum-view-basic with is_private_message; span class strings → is_* booleans
Benefits:
- PHP callers no longer embed CSS class strings, removing style coupling
- Partial contracts centralize layout logic in templates
- Unified rating-like and rating-bar fragments (removed *-live duplicates)
- Cleaner boolean API reduces fragile string concatenation
Technical notes:
- getPageNumbers() signature change is breaking for all callers (all updated in this commit)
- rating-like-live and rating-bar-live fragments no longer referenced from PHP
- message-block partial replaces security-report-email + br-line combination
Delete frontend fragments whose callers have been migrated in the preceding runtime-migration commit. Every deletion is covered by a generic replacement contract; no productive code path references these files any more.
Core changes:
- Account form fragments (10 files × 3 themes):
- Replaced by partials/form-add with flexible attributes
- activate, edit, login, newuser, passlost, password, privat-message, rss-select, rss-url, comment
- Account view helpers (14 files × 3 themes):
- account-avatar-current, account-avatar-grid-cell, account-avatar-grid, account-avatar-upload
- account-favorite-add, account-favorite-on, account-favorite-off, account-favorites-list
- account-last-row, account-last-wrap
- account-message-admin-note, account-pm-icon-link
- account-avatar-grid-row-open, account-avatar-grid-row-close (merged via open flag)
- Shop summary fragments (4 files × 3 themes):
- shop-cart-item-row, shop-cart-table (replaced by generic table)
- shop-partners-form, shop-partners-summary
- Clients list info (clients-list-info, 3 files):
- Replaced by post-div atom
- Link variant (comment-action-link, 3 files):
- Replaced by the generic link fragment with is_blank flag
Benefits:
- Net template count reduced by 90 productive files
- Single source of truth per view role (forms, tables, links, avatars)
- No orphaned references remain
Technical notes:
- All deletions verified via grep before commit
- Three themes (default, simple, lite) carry identical deletions
Migrate PHP callers to the new unified contracts introduced in the preceding template commits. Removes every raw <a> HTML string from core/user.php, drops hclass attribute assembly in core/system.php, switches comment-action-link callsites to the generic link atom, and rewrites the shop cart summary onto the generic table/table-row.
Core changes:
- Account module (modules/account/index.php):
- Migrate the avatar-grid row loop onto account-avatar-grid-row with open flag (no per-row tr/close fragments)
- Drop per-cell width math; grid sizing is now CSS-driven
- Migrate account forms to the shared form-add partial with new flags
- User helpers (core/user.php):
- Replace five add_menu raw-HTML calls with comment-action-ajax and link fragment arrays joined by pipe separators
- Favorites toggle inlined via span fragment
- No raw HTML remains in user.php for action menus
- System helpers (core/system.php):
- Drop hclass variable in ashowcom; pass is_closed/closed_title
- Replace comment-action-link with link (including is_blank flag)
- Rewrite getCartSummary onto generic table/table-row/link/ajax fragments (no shop-cart-* fragments)
- Rename checkbox-input callers to checkbox
- Search, voting, admin config (modules/search/index.php, modules/voting/index.php, admin/modules/config.php):
- Switch comment-action-link to link
- Forum module (modules/forum/index.php):
- Open and close mod-form via forum-mod-form with open flag
- Pass is_closed/closed_title to forum-view-basic (no hclass)
- Shop module (modules/shop/index.php):
- Align cart callers with the new table-based summary
- Clients module (modules/clients/index.php):
- Switch clients-list-info to the generic post-div atom
- Help and order modules (modules/help/index.php, modules/help/admin/index.php, modules/order/index.php):
- Adjust getTplFieldsIn call sites to the named-array signature
- Parser (core/classes/parser.php):
- Rename checkbox-input call to checkbox
Benefits:
- Removes the last inline <a> HTML from frontend PHP
- Single link contract powers every non-htmx action link
- Shop cart uses the generic table atom; no bespoke fragments left
- Account views are contract-driven, not per-form duplicates
Technical notes:
- Link fragment adds rel=noopener noreferrer to former target=_blank callers (security hardening, not behavior change)
- Legacy add_menu(string) signature preserved for existing clients/forum callers; arrays joined with pipe separators at callsites
Drop the hclass attribute-string hack in favor of explicit is_closed/closed_title booleans, replace inline-style avatars with proper <img class="sl_avatar">, and rename forum-mod-form-open to forum-mod-form with an open flag (matching the table/cat-wrap pattern).
Core changes:
- Comment post shell (comment.html):
- Replace hclass passthrough with conditional is_closed attributes
- Default avatar branch now uses <img> (not <a style background-image>)
- Avatar fragment (comment-avatar.html):
- Switch from <a class sl_avatar style background-image> to <img>
- Forum list mod-form (forum-mod-form.html, renamed):
- Collapse forum-mod-form-open into single fragment with open flag
- Emit <form> on open and </form> otherwise
- Forum post shell (forum-view-basic.html):
- Replace hclass with is_closed/closed_title
- Switch avatar to <img>
- Private message shell (privat-message.html):
- Switch avatar to <img>
- Account profile view (account-view.html):
- Switch avatar to <img>
Benefits:
- Removes every hclass attribute-string hack from the codebase
- Eliminates inline style= for dynamic avatar URLs
- Fewer fragment files (forum-mod-form-open gone via rename)
Technical notes:
- Callers updated in the runtime-migration commit that follows
- All three themes (default, simple, lite) kept in sync
Extend the shared form-add partial so callers can override action, method, form name/id, enctype, and append content after submit. Needed to migrate account forms (POST, GET activate, htmx hx-post variants) onto a single reusable contract.
Core changes:
- partials/form-add.html (default/simple/lite):
- Optional action with no_action bypass
- Optional method (default post), form_name (default post), form_id
- Optional enctype with no_enctype bypass; default multipart
- Optional form_attr raw-attribute passthrough
- Optional token (render only when present)
- Optional after_submit content hook
Benefits:
- Single partial covers 7+ formerly separate account-*-form fragments
- GET, POST and htmx-post flows share the same layout
- Preserves defaults: existing callers continue to work unchanged
Technical notes:
- All three themes carry identical markup
- No PHP changes in this commit; runtime migration in later commits