Drop the dropdown feedback form from the footer and link straight to the contact module, removing the per-request captcha and token work behind it.
Core changes:
- Footer block (templates/lite/partials/contact-block.html):
- Replace the dropdown form with a plain link to index.php?name=contact
- Theme hook (templates/lite/index.php):
Stop building the feedback fields, captcha and token in getThemeFootVars(); pass only the label
Benefits:
- Less work per page render (no captcha/token for the footer)
- Smaller markup surface
Technical notes:
The contact page keeps its own form, captcha and token, reachable via the link
- The matching form-only styles are removed in the lite style commit
Bring the frontend theme onto the shared .sl-float / .sl-float-panel contract, give the side tabs a modern vertical-text layout pinned to the left edge, and make the id badge a circle-or-pill.
Core changes:
- Floating popovers (templates/lite/assets/css/theme.css):
Map tip/menu/dropdown panels onto .sl-float-panel with the sl-is-open state and viewport-fixed placement
- Drive click dropdowns through opacity/visibility so they fade in place
- Transition opacity only (not position) so panels no longer slide in or up
- Side tabs (#block-idea / #block-feedback):
Pin both tabs to the left edge, stacked symmetrically around the vertical centre with writing-mode vertical text
On hover slide out to the right with the label; a same-colour left shadow keeps the screen edge covered
- Id badge (.sl-card-id):
Size to the 24px token; min-width plus a pill radius render a circle for a single digit and widen for more
- Footer feedback styles:
Remove the now-unused .sl-block-feedback-form / .sl-bff-* and #block-feedback dropdown rules
Benefits:
- One floating mechanism shared with the admin theme
- Side tabs no longer clipped by the right-hand scrollbar
- Cleaner, token-driven badges and tabs
Technical notes:
- Frontend (lite) theme only
Adopt the .sl-float / .sl-float-panel contract in the admin theme and polish the monitor page: fix the gauge percentage colours, drop the unwanted info-block scroll, align the chart tooltip surface and add jump links from the Software panel.
Core changes:
- Admin theme (templates/admin/assets/css/theme.css):
Collapse the paired .sl-tip / .sl-menu rules onto .sl-float-panel and the sl-is-open state
Server Status: let the % text inherit the gauge colour by dropping the static colour override
- Remove the info-grid overflow-x that forced a vertical scrollbar
- Match the chart tooltip surface to the popover tokens
- Turn the Software items into smooth-scrolling jump links
- Monitor markup (templates/admin/partials/basic-monitor.html):
- Add anchor ids to the Server/PHP/MySQL blocks and link the Software rows
- Monitor module (admin/modules/monitor.php):
- Render the diagnostic cells through the unified popover (icon + value)
- Bump the chart tip corner radius to match the panel
Benefits:
- Consistent floating UI and monitor styling
- Clearer at-a-glance Server Status colours
- Quicker navigation inside the monitor page
Technical notes:
- Admin-only; no behaviour change outside the monitor
Collapse the separate info-tooltip, row-actions and editor-action-menu templates into a single popover fragment per theme and migrate every call site, so all floating popovers share one markup contract built on the .sl-float / .sl-float-panel primitive.
Core changes:
- Unified fragment (templates/{admin,lite}/fragments/popover.html):
Add one popover that renders either a tip (icon + text/dl) or an action menu, selected from the passed keys
- Delete info-tooltip.html, row-actions.html and editor-action-menu.html
- Call sites (core/.php, admin/modules/.php, modules/*/.php):
- Point ~100 getHtmlFrag() calls at the new popover fragment
- Repoint the edit-actions.html and view.html includes
- Frontend markup (templates/lite/fragments + partials):
Tag tip/menu/dropdown hosts with .sl-float and panels with .sl-float-panel; mark click dropdowns with data-sl-float-event="click"
- Drop the now-inert data-sl-toggle-effect attributes from float dropdowns
Benefits:
- One popover contract instead of three near-duplicate fragments
- Behaviour and output-escaping boundaries preserved
- Smaller, easier to reason about template surface
Technical notes:
Tip vs menu is inferred from menu-only keys; raw vs escaped output is unchanged
- No backend or database changes
Move the admin-only floating.js positioning engine into the shared slaed.js bundle so tooltips, action menus and dropdowns are driven by a single mechanism on both the admin and the lite (frontend) themes.
Core changes:
- Floating engine (plugins/system/slaed.js):
Port the positioning engine into slaed.js as setFloating()/placeFloat()
- Bind hover popovers on DOMContentLoaded and htmx:afterSwap
- Register resize/scroll refit listeners exactly once
Write the panel position inline for hover and click alike and keep it on close, so panels fade out in place with no positioning jump
- Drive click dropdowns through the existing toggle path
- Removed module (templates/admin/assets/js/floating.js):
- Delete the standalone admin-only engine, now redundant
Benefits:
- One positioning engine shared by admin and frontend
- No duplicate resize/scroll listeners
- Consistent open/close behaviour for every popover
Technical notes:
slaed.js already ships on every theme via the script_f bundle, so admin keeps its tooltips and menus without the deleted file
- No template or API contract changes
Reworks GitHub-mode changelog search to filter the cached window in memory instead of re-fetching GitHub per query, adds search-term highlighting, canonical filter URLs, and the system-standard word query parameter.
Core changes:
- In-memory search/filter (modules/changelog/common.php):
- Add chlogFilterCommits() applying search (subject+body), author (name+email) and date-range filters in PHP over the cached window
- chlogLoadCommits() now fetches the unfiltered GitHub window once and filters locally — no per-term GitHub requests or per-term cache files
- Report the window size as total so "Всего/Отфильтровано" show distinct counts
- Search highlighting (modules/changelog/common.php, templates):
- Highlight the search term in commit subject and body via filterTextHighlight()
- Switch the subject slot to raw output ({{{ }}}) so highlight markup renders; this also fixes prior double-escaping of subjects
- Clean filter URLs (modules/changelog/common.php, index.php, admin/index.php):
- Add chlogCanonicalRedirect() that strips empty GET params (author=&datefrom=…) only when present, leaving clean links untouched
- Rename the search parameter from
searchto the system-canonicalwordacross form, pagination and redirect - Hide file filter in GitHub mode (templates, controllers):
- The GitHub commits list API returns no per-commit files, so the file filter is hidden when source=github
- Docs (modules/changelog/admin/info/ru.md):
- Document the caching/window model, search scope, filters and edge cases
Benefits:
- Search costs zero extra GitHub requests and is instant over the window
- Shareable, bookmarkable filter URLs without empty parameters
- Correct counters and properly escaped, highlighted output
Technical notes:
- Internal filter key stays
search; only the public query parameter isword - Filtering is window-scoped in GitHub mode; git mode keeps server-side git log filtering
- No CSRF token on the read-only GET search form, matching the search module
Reworks the GitHub changelog cache to fetch only new commits via ETag revalidation instead of re-downloading the full window on every cache expiry, and raises the commit limit ceiling from 500 to 2000.
Core changes:
- Incremental GitHub fetch (modules/changelog/common.php):
- Add chlogReadCache() returning cached data ignoring TTL, so a stale cache can be revalidated instead of discarded
chlogGhFetch() now revalidates with If-None-Match and walks pages only until a known commit SHA, prepending new commits
- 304 Not Modified returns the cache and refreshes TTL at zero cost
- full rebuild only on empty cache or filtered queries
- Split HTTP into chlogGhUrl/chlogGhRequest/chlogGhResult; store page-1 ETag in cache meta
- Derive page count from the requested limit (ceil(limit/100)) so the configured value is actually reachable
- Commit limit ceiling (modules/changelog/common.php, admin/index.php):
- Introduce CHLOG_MAX_LIMIT = 2000 and replace the hardcoded 500 clamps
- Apply the constant to the config form max attribute and save clamp
- Docs (modules/changelog/admin/info/ru.md):
- Update pagination range to 10-2000
Benefits:
- Hourly refresh costs one conditional request (often 304) instead of a full multi-page re-download
- Repositories with up to 2000 commits load fully; the 500-commit cap is removed
- Shared HTTP layer is reusable and easier to maintain
Technical notes:
- Cache meta gains a page-1 ETag; old caches upgrade on first revalidation (no etag -> 200 -> etag stored)
- Sliding-window semantics preserved: newest kept, oldest trimmed at limit
- Incremental path applies to the unfiltered GitHub view; filtered/search and git mode are unchanged
Removes the explicit horizontal overflow behavior from the admin table shell. The table minimum width rule remains in place while the surrounding layout can control overflow naturally.
Core changes:
- Admin theme stylesheet (templates/admin/assets/css/theme.css):
Removed the .sl-table-shell overflow rule
- Drops forced horizontal scrolling on the shell
- Keeps table min-width behavior unchanged
Benefits:
- Reduces redundant admin table styling
- Lets parent layouts control scrolling behavior
- Keeps the stylesheet slightly simpler
Technical notes:
- No template or JavaScript changes
- No runtime behavior changes outside CSS layout
- Backward compatibility depends on existing parent layout overflow handling
Moves changelog JSON cache files into a dedicated cache subdirectory. This keeps module data separate from page and asset cache files.
Core changes:
- Changelog cache storage (modules/changelog/common.php):
Reads cache entries from storage/cache/changelog
- Keeps the existing sha1 key format
- Preserves TTL and payload validation behavior
Writes cache entries into the changelog namespace
- Creates the module cache directory when needed
- Keeps atomic temp-file writes unchanged
Benefits:
- Reduces cache root clutter
- Aligns module cache data with the namespaced cache layout
- Makes admin cache reporting easier to understand
Technical notes:
- Existing root-level changelog JSON files are not migrated
- Cache keys and response metadata format are unchanged
- No database schema changes