Extend the sl-* naming convention to the BBCode parser output and all frontend themes. Parser.php generates these class names dynamically, so all consuming CSS files must be updated in the same change.
Core changes:
- Parser (core/classes/parser.php):
- ...handler: class="code" -> class="sl-code"
handler: class="hide" -> class="sl-hide"Скрытый текст виден только зарегистрированным пользователям, пожалуйста войдите или зарегистрируйтесь.
- Frontend templates (default, lite, simple — div.html):
- is_code path: class="code" -> class="sl-code"
- Frontend CSS (default/theme.css, lite/theme.css):
- .hide/.code selectors renamed to .sl-hide/.sl-code
Benefits: - Parser output class names now consistent with sl-* convention - All themes (admin, default, lite, simple) use identical class names - No divergence between parser output and CSS selectors
Technical notes: - simple/theme.css had no .hide/.code rules; div.html still updated so the generated markup is consistent across all themes - admin/theme.css was updated in the preceding commit
Migrate all non-prefixed own class names in the admin theme to the canonical sl-* naming convention. Removes obsolete CodeMirror 5 rules since the project now uses CodeMirror 6 (cm-editor).
Core changes:
- Admin CSS (theme.css):
Renamed 19 class groups: wrapper, header, footer, toolbar, language, reset, thide, copyright, wraptop/mid/foot and traffic chart classes
- Renamed .code/.hide to .sl-code/.sl-hide
Removed dead CodeMirror 5 selectors (.CodeMirror, .CodeMirror-hints, and two .CodeMirror layout sub-selectors)
- Admin HTML templates (admin.html, basic-monitor.html, link.html, div.html):
- Updated all class attributes to match renamed CSS selectors
Benefits: - Admin CSS fully compliant with sl-* naming convention - No dead rules for removed library version (CM5 replaced by CM6) - Consistent selector prefix across all admin CSS
Technical notes: - .wrapper/.header/.footer were legacy layout names alongside sl-admin-* - CodeMirror 5 used .CodeMirror; version 6 (cm6.bundle.js) uses .cm-editor - .code/.hide also renamed to match sl-* convention applied in this sprint
Reorganize admin theme into two stylesheets and stop emitting CSS class strings from PHP. Asset loader now auto-discovers theme CSS files instead of using a hardcoded list.
CSS structure - Add templates/admin/assets/css/base.css: HTML tag resets, typography, base form element styling. No classes - Merge legacy system.css and new.css into templates/admin/assets/css/theme.css along with the previous theme.css contents (page chrome, login-shell, components). Delete obsolete system.css and new.css - Replace hardcoded ['theme.css','system.css','new.css','blocks.css'] list in core/security.php and core/access.php with new helper getThemeCssFiles() that globs templates/{theme}/assets/css/*.css alphabetically. New helper added in core/system.php
Dead CSS removal - Drop legacy underscore aliases: .sl_first (was emitted by core/admin.php), .sl_warn/.sl_info/.sl_atten (unused in admin), .sl_tip aliasing (~14 selector groups in new.css), and .sl_info:before/.sl_warn:before sprite hook - Drop duplicate .sl-form-control declaration that lived in both system.css and new.css. Canonical declaration now in theme.css - Fix .sl-admin-shell .sl-table-list selector which never matched (admin uses .sl-table-list-sort) - selector corrected to .sl-table-list-sort
Debug section tone vocabulary - Normalize debugSection() tones in core/system.php from ad-hoc color names (system/green/blue/orangered/purple/fuchsia/red) to a small semantic palette: info/success/warn/danger/accent - Add matching .sl-debug-section-info and .sl-debug-section-accent CSS rules alongside existing success/warn/danger so all PHP-passed tones now apply
Renames driven by 'no PHP-emitted CSS class strings' rule - Rename .sl_code_editor to .sl-code-editor across plugins/editors/codemirror (driver.php and assets/cm6.css) and theme.css - Rename .sl-status-status-blue to .sl-status-blue (drop the duplicated word) in theme.css and templates/admin/partials/basic-monitor.html
Templates take ownership of class names previously emitted by PHP - Drop 'class' field from getAdminTopMenu() items in core/admin.php (the legacy sl_first rules were redundant against the toolbar baseline anyway) - New fragment editor-robots-button.html plus sibling editor-robots-button.js delegate replace the inline class='sl-but-green' and onclick handler that admin/modules/editor.php used to emit. Runtime auto-injects the JS sibling - New fragment monitor-info-icon.html replaces the '<i class="bi bi-info-circle sl-monitor-info-icon">' string that admin/modules/monitor.php::getTooltipText() used to build - Extend getTplAddDateTime() in core/helpers.php with is_config flag and drop the 'attr' parameter. All five callers in admin/modules/config.php and modules/account/admin/index.php now pass 'is_config' => true instead of 'attr' => 'class="sl-select-config"' - Drop the $clas parameter from getTplModuleSelect() in core/helpers.php; the function now passes 'is_config' => true to the select fragment internally. Callers in admin/modules/config.php and modules/sitemap/admin/index.php updated - Introduce private buildBbcodeImage() in core/classes/parser.php so the parser owns its <img class='sl-img'> markup in one place. Four [img] bbcode handlers updated to call it
Test fixture - tests/Unit/AdminPageRenderFlowTest.php: switch fixture string from 'class=\"sl_warn\"' to 'class=\"sl-warn\"' to match the dash convention
Admin and public templates load separate CSS contexts and never share stylesheets. All sl_* rules in templates/admin/assets/css/system.css that are only used in public templates (or not used anywhere) have been removed. The file now contains only what the admin area actually needs.
Core changes:
- Removed — dead CSS (public-only, never loaded in admin):
- .sl_hidden, .sl_none (public table/layout helpers)
- .sl_conf, .sl_note, .sl_small, .sl_label (public form helpers)
- .sl_orange, .sl_blue (public color utilities)
- .sl_avatar (public user avatar)
- .sl_atten, .sl_warn, .sl_info (public alert boxes)
- .sl_menu, .sl_drop, .sl_drop-form (public nav — admin uses sl-menu in new.css)
- .sl_right, .sl_left, .sl_center, .sl_pos_right, .sl_pos_center (public positioning)
- .sl_num, .sl_pnum, .sl_flag (public meta icons)
- .sl_rate, .sl_urating, .sl_out, .sl_over, rate-box, min-rate (public ratings)
.sl_n_act, .sl_coms, .sl_n_deact, .sl_plus, .sl_post, .sl_date, .sl_cat, .sl_views, .sl_votes (public module meta icons)
- .sl_loading (public Ajax loader)
- .sl_preview_mini (public image preview)
- .sl_bodyline, .sl_blockline (public content blocks)
- .sl_img_mod, .sl_td_mod, .sl_tab_bl, .sl_tab_blm, .sl_img_blm (public block tables)
- .sl_table_block, .sl_table_edit, .sl_table_form, .sl_table_conf, .sl_table_basic (public tables)
- sl_table_conf td .CodeMirror (dead rule — sl_table_conf not used in admin)
- Kept — admin-active rules:
- CodeMirror base styles (.CodeMirror, .CodeMirror-hints)
- .sl-field, .sl-form-control (used in admin.php and categories.php)
- .sl-red, .sl-green (used in pdo.php debug output)
- .sl-callout-* (used in parser.php for admin markdown rendering)
- .sl-sort / .sl-sort-asc / .sl-sort-desc (used in slaed.js tablesort)
- .sl-but* button variants (used throughout admin)
- .sl-preview* (used in admin/partials/preview.html)
Benefits: - system.css shrinks from ~620 lines to ~190 lines - Zero dead CSS remains in admin stylesheet - No risk of admin accidentally inheriting public-only styles
Technical notes: - Public templates have their own system.css in templates/default|lite/assets/css/ - Removed classes remain intact in public template CSS files — no public breakage
slaedcms.png and 000slaedcms.png were the CSS-background logo images referenced via background-image in theme.css. The admin logo is now rendered as an <img> tag (committed in Feature: Admin logo selection), so these sprite files are no longer referenced anywhere and can be removed.
Core changes:
- Deleted: templates/admin/images/slaedcms.png
- Deleted: templates/admin/images/000slaedcms.png
Benefits: - Repository no longer carries unreferenced binary assets - Grep confirms zero remaining references to these filenames in PHP, CSS, or templates
Technical notes: - Replacement logo images live in templates/admin/images/logos/ - No functional change; CSS background-image sprite approach was already removed
All sl_* class names actively used within the admin area are renamed to the canonical sl-* (dash) convention. Dead CSS rules that were already superseded by equivalents in new.css are removed.
Core changes:
- Sort indicators (plugins/system/slaed.js):
classList operations renamed: sl_sort → sl-sort, sl_sort_asc → sl-sort-asc, sl_sort_desc → sl-sort-desc (6 occurrences)
- Markdown callouts (core/classes/parser.php):
$map array updated: sl_callout_note/tip/important/warning/caution → sl-callout-note/tip/important/warning/caution
- DB debug colors (core/classes/pdo.php):
- $color values renamed: sl_red → sl-red, sl_green → sl-green
- Admin CSS (templates/admin/assets/css/system.css):
- .sl_sort / .sl_sort_asc / .sl_sort_desc → .sl-sort / .sl-sort-asc / .sl-sort-desc
- .sl_callout_ (10 selectors) → .sl-callout-
- .sl_red → .sl-red, .sl_green → .sl-green
Benefits: - All admin-active CSS classes now follow the uniform sl-* naming convention - Grep for sl_* in admin scope returns zero hits for the renamed classes - sl_orange, sl_blue, sl_small etc. remain as-is (not used in admin area)
Technical notes: - No DB schema changes; no API changes - .sl_word alias removed separately (see next commit)
config/local.php fingerprint updated to reflect the new base config state after admin_logo was added to config/global.php. config/news.php line endings normalized from CRLF to LF.
Core changes:
- Config local (config/local.php):
- base_fingerprint updated to match new global config hash
- Config news (config/news.php):
- Line endings normalized (CRLF → LF); no content changes
Benefits: - Fingerprint keeps config drift detection accurate after global config additions - Consistent line endings across all config files
Technical notes: - No functional change - No DB schema changes
Changelog module lang files contained colons embedded directly in constant values (_CHLOG_SEARCH, _CHLOG_DATE_FROM, _CHLOG_DATE_TO). These are removed to match the project-wide convention where punctuation is rendered by CSS, keeping constants reusable as plain label strings.
Core changes:
- Changelog lang (modules/changelog/lang/*.php — de, en, fr, pl, ru, uk):
- _CHLOG_SEARCH: removed trailing ':'
- _CHLOG_DATE_FROM: removed trailing ':'
- _CHLOG_DATE_TO: removed trailing ':'
- Changelog admin lang (modules/changelog/admin/lang/*.php — de, en, fr, pl, ru, uk):
- Same three constants cleaned across all six admin language files
Benefits: - Constants match the colon-free convention established across admin and module labels - No risk of double colons when constants are reused in non-label contexts
Technical notes: - No functional change; CSS ::after provides the visible colon - No DB schema changes
All internal function names are renamed to the set/get convention for consistency. The global CheckBox() function is removed in favour of setTableCheckAll(), which uses data-attribute delegation. setImageReplace() now handles multiple selects via data-sl-image-replace instead of a single hardcoded id="img_replace". Tablesort extensions are inlined into setTableSort().
Core changes:
- Function renames (slaed.js):
- initLightbox → setLightbox (merged ensureLightboxStyles + createLightbox inline)
- close → setLightboxClose
- open → setLightboxOpen
- ensureLightbox → getLightbox
- toggleBlock → setToggleBlock
- animateSlide → setSlideMotion
- animateFadeScale → setFadeScale
- fetchJson → getJsonData
- initImageReplace → setImageReplace
- initToggleBlocks → setToggleBlocks
- initSlaedUi → setSlaedUi
- processNext → setProcessNext
- scan → checkScan
- setImageReplace():
- Queries all [data-sl-image-replace] selects instead of getElementById('img_replace')
- Falls back to legacy id="img_replace" and attaches data attribute automatically
- Each select targets the element whose id matches its data-sl-image-replace value
- setTableCheckAll() (new):
- Replaces global window.CheckBox(id, clas)
- Click delegation on th[data-sl-check-all] header cells toggles master checkbox
- Change delegation on master checkbox syncs all [data-sl-check-item] inputs in form scope
- Works with any number of tables; no global state or id coupling
- setTableSort():
- Tablesort slaedNumber and slaedDate extensions inlined here
- Removed standalone initTableSortExtensions(); guard flag unchanged
- setSlaedUi():
- Calls setTableCheckAll() in addition to existing initializers
Benefits: - Consistent naming convention across all internal helpers - CheckBox() global removed; no inline OnClick attributes needed in PHP/templates - Multiple image-preview selectors on the same page work without id conflicts - Tablesort extension setup no longer risks running before setTableSort
Technical notes: - window.CheckBox is gone; callers that used it must use data-sl-check-all - data-sl-image-replace attribute wired in select.html fragment - data-sl-check-all attribute wired in th.html fragment - No external API changes
Admin stylesheet receives a full custom checkbox design, a CSS-driven colon rule for form labels, search highlight utility, and cleanup of obsolete rules that were duplicated from or superseded by new.css. Public theme CSS files receive the .sl-highlight utility class.
Core changes:
- Admin new.css:
- Added .sl-highlight utility (red text on yellow bg) for search results
Added CSS ::after colon rule for .sl-div-label and .sl-div-label-main * Suppresses colon when a radio-group follows (.sl-radio-group sibling) * Enables consistent punctuation without PHP-side concatenation
Added full custom checkbox design for .sl-admin-shell input[type="checkbox"] * Appearance: 16×16px, gradient border, animated checked/indeterminate states * SVG checkmark and indeterminate bar via background-image data URIs * Focus-visible ring and disabled opacity
- Removed .sl-code-row-odd / .sl-code-row-even (no longer used)
- Removed .sl-page-title block (superseded by admin header CSS)
- Admin system.css:
- .sl_word selector extended to include .sl-highlight (aliased)
- Removed .sl-table-form / .sl-form duplicates (kept .sl_table_form legacy)
- Removed .sl-config-form / .sl-config-grid / .sl-config-item block (moved to new.css)
- Admin theme.css:
- Removed .clr utility (use clearfix or flex instead)
- Removed table.tabreset (no longer referenced)
- Removed .list-text (obsolete)
- Removed .lcolomn / .rcolomn float helpers
Logo rule changed from CSS background sprite to img-based selector (.header h1 a sets width; .header h1 img sets display:block and height:auto)
- Public new.css (default, lite, simple templates):
- Added .sl-highlight utility class to match admin styling
Benefits: - Checkbox appearance is now fully branded and consistent across admin - Colon is a CSS responsibility, not PHP string concatenation - theme.css/system.css reduced by ~100 lines of dead rules - Public highlight class enables consistent search term styling on frontend
Technical notes: - Custom checkbox uses appearance:none + SVG data URIs; no external assets - .sl_table_form is kept for backward compat with legacy module templates - No JS or PHP changes in this commit





