Последнии сообщения форума
Add npm package with browser-audit scripts and an informational PHPUnit test that scans admin CSS class definitions against template HTML usage.
Core changes:
- Browser audit tooling (tools/browser-audit.mjs, package.json):
- Node.js script using chrome-remote-interface / Playwright
- npm scripts: browser:audit, browser:inspect, browser:attach
- CSS class audit test (tests/Unit/AdminCssClassUsageTest.php):
- Scans templates/admin/assets/css/.css for sl- class definitions
- Cross-references usage in admin fragment/layout/page/partial HTML
- Informational only — does not fail CI
Benefits: - Enables quick browser-driven audits from the command line - CSS audit test surfaces unused sl-* classes for future cleanup
Technical notes: - Test is informational (assertTrue(true)) — safe to add to CI - browser-audit.mjs requires Node.js and Chrome/Playwright to be available
Move [quote], [hide], and Markdown blockquote/callout output from inline strings in Parser to per-theme blockquote fragment templates, enabling markup customization without touching PHP.
Core changes:
- Parser blockquote rendering (core/classes/parser.php):
[quote] and [hide] tags call tpl->getHtmlFrag('blockquote', [...]) * is_quote / is_hide / is_callout / is_plain variants
- Markdown blockquote blocks and GitHub callouts use the same fragment
- Hardcoded HTML fallback preserved when $tpl is unavailable
- Blockquote fragment templates (templates/*/fragments/blockquote.html):
- Added to admin, default, lite, simple themes (identical content)
- callout_type passed through for sl-callout-{type} CSS class
- Link template refactor (templates/admin/fragments/link.html, core/admin.php):
- Replaced hardcoded class='sl-admin-language-link' with is_admin_language_link flag
- CSS class assignment stays in the template layer
- Language cleanup (lang/*.php — 6 files):
- Removed unused constants: _EIMG, _MEML, _PLOAD, _RATE3
- Docs and housekeeping:
docs/TEMPLATES.md: document and/or/not operators, dot-path lookups, and no equality/comparison operators in {% if %} expressions
- templates/admin/partials/basic-monitor.html: BOM character removed
Benefits: - Blockquote markup is now per-theme customizable - Dead lang constants removed from all 6 language files - Admin link CSS class logic fully in template layer
Technical notes: - blockquote fragment is identical across all 4 themes - Fallback HTML matches previous hardcoded output exactly - config/local.php fingerprint updated automatically
Wire icon_name into the block-sidebar partial and top-menu link fragment so every admin sidebar panel and toolbar entry carries a contextual Bootstrap Icon. Add --sl-color-primary-hover-soft token and a dedicated .sl-admin-shell sidebar skin with tight spacing, rounded tiles, and per-block-id header colour overrides.
Core changes:
- Template (block-sidebar.html):
- Render
<i class="bi bi-{{ icon_name }}">in h3 when icon_name is set - Icon wiring — PHP (admin/index.php, core/admin.php, core/system.php):
- Pass icon_name to all eight block-sidebar calls (shield-lock, puzzle, stars, hourglass-split, pencil-square, eye)
- Add icon key to every top-menu item array; forward as icon_name to getHtmlFrag('link')
- CSS tokens (base.css):
- Add
--sl-color-primary-hover-soft: #58a0c8 - Link :hover uses soft token and drops underline
- CSS sidebar skin (theme.css):
.sl-wrapper.sl-admin-shell .sl-admin-sidebar: tight CSS variables, rounded headers, icon sizing, per-block colour overrides- Menu grid: border/shadow moved from link to item wrapper; link reset to transparent/no-shadow
- Toolbar links: gap + padding added,
.biicon sizing rules, padding removed from innerb .sl-wrapper a:hoverscoped soft-colour override- Sidebar block base: gradient bg, lighter border (border not border-strong)
Benefits: - Sidebar blocks are visually identifiable by icon without reading the title - Top-menu entries gain icon context for faster scanning - Tight-shell skin aligns sidebar spacing with the updated layout
Technical notes: - icon_name is optional — partial renders nothing when absent (backward-compatible) - No database or API changes
Introduce a dedicated --sl-color-primary-center (#174372) token for the login header gradient midpoint and narrow the separator side offsets from 10 px to 5 px for a crisper edge. Replace two statistic demo pages with the admin left-blocks layout demo.
Core changes:
- Login header separator (base.css, theme.css):
Add
--sl-color-primary-center: #174372CSS variable * Replaces--sl-color-primaryat the 47.5–52.5 % gradient stops- Tighten
right/leftfrom 10 px to 5 px - Demo docs (docs/):
- Remove statistic-browser-analysis-demo.html and statistic-monitor-dashboard.html
- Add admin-left-blocks-demo.html
- Config (config/local.php):
- Routine base_fingerprint update
Benefits: - Separator midpoint color is independently tunable without affecting primary usages elsewhere - Narrower margins align separator precisely with the login form card edges
Technical notes: - Purely presentational — no functional or API changes
Removes the fixed width from .sl-block-sidebar, trims padding and background gradient from .sl-admin-sidebar, removes margin/padding from .sl-admin-content, and adjusts .sl-admin-content-inner and .sl-toolbar spacing for a cleaner fluid layout.
Core changes:
- Admin sidebar block (theme.css — .sl-block-sidebar):
- Removed width: 275px; block now sizes via its flex/grid parent
- Admin sidebar column (theme.css — .sl-admin-sidebar):
- padding: 13px 11px 15px 11px → 8px 0px
- Removed multi-stop background gradient (now inherits parent bg)
- Admin content area (theme.css — .sl-admin-content):
- Removed margin: 8px 6px 15px 0
- Removed padding: 0 0 15px 0
- Admin content inner (theme.css — .sl-admin-content-inner):
- padding: 0 var(--sl-space-lg) 15px → 0px 0px 0px 8px
- Toolbar (theme.css — .sl-toolbar):
- margin: 0 10px 0 5px → 0 0 0 12px
Benefits: - Sidebar width adapts to container; no overflow on narrow viewports - Content area padding controlled at inner level, not duplicated on outer
Technical notes: - No new CSS classes; all changes are targeted property updates - No HTML structure changes required
Adds filterConst() to the Template compiler pipeline so that {{ _UPPER_SNAKE }} tokens are compiled into defined()-guarded PHP echoes instead of being silently dropped or mishandled by filterEcho(). Documents the new syntax in TEMPLATES.md.
Core changes:
- Template compiler (core/classes/template.php — filterConst()):
- Matches {{ _NAME }} where NAME is UPPER_SNAKE with _ prefix, 1-11 chars
- Compiles to: <?= defined('_NAME') ? $this->getSafe(_NAME) : ''; ?>
- Runs before filterEcho() so constant tokens are consumed first
- Negative lookahead/lookbehind prevents matching {{{ _RAW }}} raw tags
- Docs (docs/TEMPLATES.md):
- Added one-line entry for {{ _CONST }} syntax under the runtime features list
Benefits: - Language constants can be used directly in .html fragment files - Compiled output is cache-safe: defined() checked at render time, not compile time - No change to existing {{ var }} or {{{ raw }}} behavior
Technical notes: - Regex: /(?<!\{)\{\{\s([A-Z][A-Z0-9]{0,10})\s\}\}(?!\})/ - getSafe() HTML-escapes the constant value before output - filterConst() is inserted before filterEcho() in the compile() pipeline
Adds getStatExtPanel() which reads fields 8-16 from the statistic log, aggregates them across all rows of the selected archive or current period, and renders an inline dashboard with ring charts, bar charts, and an hourly hit chart. Panel is appended after the existing statistic table.
Core changes:
- getStatExtPanel() (admin/modules/statistic.php):
- Reads days.log + statistic.log (current) or an archive file
Aggregates counter fields 8-12, 14-16 via getCounterField() and sums the 24-slot hours field (index 13)
Ring charts (SVG): Human Traffic %, Mobile Share %, Return Depth %, Search Share % — 4-up grid, responsive 2-col on narrow viewports
Bar charts (2-col grid): Browsers, OS, Devices, Countries, Refcat, New/Returning, Depth, Duration — sorted by count, preserves order where a canonical key order is specified (Devices, Refcat, etc.)
- Hourly hits bar chart (SVG, 24 bars, x-axis labels every 3 hours)
- Falls back to a plain "not available" notice when field 8 is absent
- statistic() (admin/modules/statistic.php):
- Added echo getStatExtPanel($file) after the existing statistic table
Benefits: - One-screen overview of browser/device/geo/session metrics per period - No extra DB queries; reads the same log files as the existing counter - Inline <style> scoped to sl-statx-* classes; no theme.css modifications needed
Technical notes: - Ring chart: uses SVG stroke-dashoffset on a r=38 circle (circumference 238.76) - Bar chart labels truncated at 120px via CSS text-overflow - getStatExtPanel() uses CSS custom properties from the admin theme (--bg, --line, --shadow, --soft, --muted, --blue2, --green, --purple, --orange)





