Журнал изменений

Официальный сайт SLAED CMS

Журнал изменений

Фильтр и поиск

Всего: 1176 Доступных коммитов | Отфильтровано: 1176 Коммиты | Страница: 1 из 118
Сегодня (21.09.2026)
Feature: extra fields run on the Field class - named definitions, JSON values, a structured manager, and the 6.3 update carries every stored row over
Автор: Eduard Laas | Дата: 17:29 21.09.2026

Stage S06 of the Node plan. The positional extra fields of account, forum and order give way to one shared, stateless Field class: a closed registry of ten types, an atomic check of definitions, one normalization behind the check and the filter, and values stored as one canonical JSON object per row. The 6.3 data update converts the old definitions and every stored value without guessing, and the running system knows the new format only.

Core changes:

  1. Shared class (core/classes/field.php, core/system.php):
  2. final class Field with six public methods, no constructor and no state

    • getFieldTypeList, filterFieldList, checkFieldValues, filterFieldValues, getFieldForm, getFieldView
    • a refused definition set throws InvalidArgumentException with the path of its first error
    • six machine codes for a refused value: required, type, format, choice, min, max
    • hard ceilings no option raises: 256 definitions, 256 options, 64 choices, 1 MiB of JSON
  3. getFieldView() calls the parser in its safe mode, because values are stored as raw text
  4. one global instance $fld
  5. Owners and helpers (core/helpers.php, modules/account, modules/forum, modules/order, core/security.php):
  6. getFieldRules() reads the definitions and getFieldsPost() writes the values, both behind the update.fields mark

    • without the mark no form shows a field and a save hands the stored text back untouched
    • a set that fails the shared check keeps the stored values as well
    • posted texts lose [usehtml] and [usephp] at storage, the tag being the capability itself
    • a switched off field keeps its value through a save, a stored name without a definition is dropped
  7. getFieldsInRows, getTplFieldsIn, getTplAddFieldRows and getTplViewFieldRows rebuilt on the class
  8. the hand-made form builder of the account administration and the field filter of getVar() are gone
  9. the forum prints the rendered field rows as they are and no longer hands them to a trusted parse
  10. Field manager (admin/modules/fields.php, admin/lang, lang):
  11. structured definitions per area, select options as a table, stored names, option keys and types locked
  12. a refused set comes back with the path of its first error and the posted text, the file stays untouched
  13. six FIELDS messages in six site locales, twelve FIELDS captions and a new _FIELDINFO in six admin locales
  14. Data update (setup/index.php, setup/sql/table.sql, setup/sql/table_update6_3.sql):
  15. setUpdateFields() with getUpdateRules() and getUpdateValue() runs after the ratings unit

    • a preflight of every definition and every row before the first write, reported by table, id and reason
    • keys field1..N and option1..N by original position, the full and the short layout, one confirmed result
    • a 0 in a select, date or datetime position is the placeholder of an empty choice and becomes absence
    • batches of 500 by cursor, each row equal to its source or its target, resumable from its manifest
  16. users.field, forum.field and order.info are MEDIUMTEXT in the fresh schema and in the reconciling MODIFY statements, which used to set them back to TEXT on every run

  17. the installer writer keeps native types on request, as the definitions need bool, int and null
  18. Tests (tests/Unit, tests/Support):
  19. FieldTest, FieldViewTest and UpdateFieldsTest; update_probe.php gets the fields unit, contract_probe.php the fieldpost scenario; EditorRoomTest drops order.info

Benefits:

  • one path for form, normalization, validation and view, shared by every present and future owner of fields
  • stored values survive a disabled field, a refused set and a missing update mark
  • the update never guesses: ambiguous data stops it with a report instead of a wrong meaning

Technical notes:

  • BREAKING: config/fields.php holds named definition arrays, and users.field, forum.field and order.info hold JSON; a 6.2 site reaches this format only through the update6_3 branch of setup

  • form controls are named field[<name>] instead of the positional field[]
  • config/fields.php ships the former demo definitions in the new format
  • no runtime reader of the positional format remains
Feature: the shared rating runs on the Rating class - POST votes with delivery keys, a journal with annulment, and the 6.3 update carries every aggregate over
Автор: Eduard Laas | Дата: 14:10 21.09.2026

Stage S05 of docs/node connects the Rating class to the three remaining targets - accounts, forum topics and products - and closes the acceptance of stage S04. A vote is now a POST body checked field by field, stored with its voter and a delivery key, never rewarded with points, and only the main administrator can annul it; the old shared _rating table is left to the polls. The 6.3 data update keeps every existing sum and count as a starting balance, restores the real last participation of every voter and publishes the rules in their four-key form.

Core changes:

  1. Rating service and vote handler (core/system.php, index.php, core/helpers.php):
  2. getRatingService() builds the class once per request: rules behind the update.ratings mark, the trusted actor of both sessions, and a closed map of targets with read and write adapters

    • the read adapter repeats the visitor rights, locks the owner row first and throws on a failed statement
    • the write adapter refuses a value an INT UNSIGNED column cannot hold
  3. getRatingView() accepts POST only, the token from the body and five fields checked by regular expressions

    • 405 with Allow, 403, 422, 404, 409, 429 with Retry-After and 500; nothing is read from the address
    • the handler guards itself in index.php, so the method is refused before the token is asked
  4. getRatingAsync() reads the four-key rule, is live only behind the mark and answers a stored vote with the inner block alone

  5. Widget and refusal toast (templates/lite/fragments/rating-*.html, plugins/system/slaed.js, theme.css):
  6. the fragments send mod, id, typ and token through hx-vals and carry no voting address with parameters
  7. slaed.js mints a 32-hex delivery key per intended click and keeps it on the control while the outcome is unknown, so a repeat after a lost connection or a 5xx never stores a second vote

  8. a refusal keeps the widget and is told by the warning variant of the toast (.sl-toast-warn)
  9. Administration (admin/modules/ratings.php, modules/account/admin/index.php):
  10. the settings form saves four keys per scope, zero days meaning no waiting, and refuses a fraction of a day
  11. op=votes pages the journal by cursor with filters by scope and target, op=annul annuls one vote with a reason
  12. the mass reset of account votes is removed: it bypassed the class and broke the aggregate invariant
  13. Ratings unit of the 6.3 data update (setup/index.php, setup/sql/table_update6_3.sql, config/ratings.php):
  14. setUpdateRatings() runs a preflight that writes nothing and names broken aggregates, times, guest addresses and rules by table and id, then takes hashed snapshots and a manifest, applies batches of 500 by cursor, compares targets, terms, owner aggregates and poll rows, publishes the rules and leaves the update.ratings mark

  15. a repeat never takes a current aggregate for a starting one; polls and other events in _rating are left alone
  16. the three rating tables are created by the update file, the InnoDB preflight covers them and _products
  17. the installer invalidates OPcache after writing a configuration file, so the second unit of one request reads the mark the first one just wrote

  18. Stage S04 acceptance fixes (core/classes/point.php, modules/auto_links, modules/forum, modules/shop/admin):
  19. an empty points scope is not journalled; the auto_links scope is auto-links, which the class grammar accepts
  20. a forum reply removed through the recycle bin is compensated; the shop client form no longer overwrites uid
  21. the update6_3 branch closes the site itself after the preflight
  22. Languages, tests and plan (lang/.php, admin/lang/.php, tests/, docs/node/, tools/ui-audit-baseline.json):
  23. six RATINGS* refusal texts and nine admin constants in all six locales
  24. UpdateRatingsTest and UpdatePointsTest drive the lifted installer units on a one-off schema and a scratch site through tests/Support/update_probe.php; RatingOwnersTest and PointOwnersTest guard the wiring; PointTest covers the general reset

  25. docs/node records the decisions, the implementation notes of S04 and S05 and the handoff to stage S06

Benefits:

  • every vote has a voter, a value and a history, and an annulment removes exactly what was stored
  • a retried request cannot vote twice, and guests and accounts keep independent intervals
  • the data update is resumable and refuses to guess: broken data stops it before the first write

Technical notes:

  • BREAKING: index.php?go=1&op=getRatingView no longer accepts GET or query parameters; config/ratings.php rules are arrays of active, period, detail and guests instead of "period|active|detail" strings

  • ratings stay closed for writing until the 6.3 data update leaves update.ratings in config/update.php
  • a 6.2 Pro rules file in the $confra variable format is not parsed; the preflight stops on it without writing
  • config/security.php is left out of the commit: its only change is the secret generated on the stand
Feature: the Node plan lands its first four stages - Point and Rating arrive, nine legacy modules leave, and points run on a journal
Автор: Eduard Laas | Дата: 10:11 21.09.2026

The implementation of docs/node starts: the Point and Rating classes, the shared configuration pipeline with file locks, the early removal of the nine modules Node replaces, and the connection of Point to every remaining owner of a rewarded event. Points are now named actions written to a journal next to the fast balance, the positional list and its numeric helpers are gone together with their callers, and the 6.3 data update keeps the starting balances. Stage S04 is connected and the stand is updated, but its acceptance is not finished; docs/node/PROGRESS.md lists the exact remainder. The admin dashboard demos travel in the same commit.

Core changes:

  1. Point class and its connection (core/classes/point.php, config/points.php, core/system.php, core/classes/comment.php):
  2. Point writes the _points journal and _users.points in one unit, with fifteen closed actions, a strict string configuration, per-action period and limit, compensation by rid and administrator adjust

  3. The core builds $pnt before Comment and keeps it closed until config/update.php carries the points mark
  4. Comment awards the first visible state, moves no points on hide and compensates the award on removal
  5. updatePoints() and addPointsAction() are removed; the page view award and the rating award are removed without a replacement

  6. Owners of rewarded events (core/user.php, modules/forum, contact, recommend, auto_links, order, shop, account):
  7. forum topics and posts, private messages, favorites, feedback, recommendations, link visits, polls, logins and registrations call Point with a server-made source

  8. an order is rewarded when the administrator confirms it and compensated when the confirmation is taken back or the order is removed; _order gains the uid column, shop rewards the activation of a _clients row

  9. Administration (admin/modules/groups.php, modules/account/admin/index.php, modules/users/index.php):
  10. the rules screen edits points, period and limit of fourteen actions and the one points.active switch, and shows the journal with independent filters by user, action and day, fifty rows a page

  11. the user form shows the balance read-only and changes it by a signed difference with a mandatory reason
  12. the general reset debits balances through adjust events in batches of 500 with a resumable operation id
  13. the public rules page and the points column follow points.active; refusals of the user form are shown again
  14. Rating class and the page cache protocol (core/classes/rating.php, core/classes/cache.php, core/system.php):
  15. Rating with three tables, a trusted target adapter, nonce, cooldown and annulment; not connected yet
  16. write guards, generation and markers in checkPageCache(), getPageHash() and setFoot()
  17. Configuration and file locks (core/system.php, core/classes/filemanager.php, admin/modules/config.php):
  18. setConfigFile() takes a string or a Closure, answers bool, journals every save and can be restored from admin.php?name=config&op=restore; getPathLock() and deletePathLock() are re-entrant within a request

  19. Removal of nine legacy modules (modules/, blocks/, config/, setup/sql/):
  20. news, pages, faq, help, jokes, content, links, files and media leave the tree with their configs, ten blocks, seed rows, nine tables and their update statements; the start page is presentation

  21. shared helpers keep only the remaining modules, setContentActive() is removed
  22. Setup and schema (setup/index.php, setup/sql/table.sql, setup/sql/table_update6_3.sql, .gitignore):
  23. the update6_3 branch gains a preflight (closed site, server version, InnoDB), the points unit with a hashed snapshot of balances, a manifest and the config/update.php mark; a fresh install writes all three marks

  24. _points with its named constraints and _order.uid are declared for a fresh install and for the upgrade
  25. config/update.php is ignored: a shipped mark would open a subsystem that was never updated
  26. Languages, help and tests (lang/.php, admin/lang/.php, admin/info, tests/):
  27. seventeen POINTS* labels replace ninety positional _POINTSnn and _DESCnn constants, nine admin constants and eight CONFIG* constants are added in all six locales; the points help pages describe the current screens

  28. PointTest, RatingTest and ConfigFileTest run in isolated processes on one-off schemas and scratch directories; comment, schema and structure tests follow the new contracts

  29. Plan and demos (docs/node/, docs/, demo/):
  30. docs/node carries the audited plan, decisions NOD-224 to NOD-235, the implementation notes of every stage and the hand-over block the next window starts from

  31. demo/ gains the admin dashboard studies adm-01 to adm-07 with their own stylesheet and script

Benefits:

  • every change of a balance is a journal row with its action, scope, source, administrator and reason
  • one event is rewarded once for the life of its target, and removals take back exactly what was awarded
  • a configuration save is one journaled, restorable unit instead of an unchecked file write

Technical notes:

  • BREAKING: modules news, pages, faq, help, jokes, content, links, files and media are removed; their tables leave table.sql, site data and uploads of an existing installation are not touched

  • BREAKING: users.point and users.points leave config/users.php, points.active replaces them; constants _POINTS01-_POINTS45 and _DESC01-_DESC45 are removed; Comment::__construct() takes Point as its third argument

  • BREAKING: points stay closed for writing until setup has run the update6_3 branch on a closed site
  • Not verified yet: the general reset, auto_links over HTTP, the remaining owners over HTTP and the resume branches of the points unit; one test outside these stages still fails on a demo SQL string in modules/presentation

Эта неделя (17.09.2026)
Feature: the presentation page reaches the etalon block by block, every scene plays, and the figures stay the system's own
Автор: Eduard Laas | Дата: 17:44 17.09.2026

The twelve sections of the presentation page were compared against demo/22-dashboard-layout-etalon.html one at a time and brought to it: the cockpit stands in five equal columns with a softer neon, the pointer light covers the whole page, and the scenes the etalon animates - the request guard, the PDO stage, the request path, the module build presets, the commit board, the event strip - now run in the module's plugin on the install's real figures, with a staged mix only where no request keeps such a history.

Core changes:

  1. Hero and rhythm (partials/presentation-hero.html, presentation-rhythm.html, fragments/presentation-ring.html):
  2. The gauge row stands in five equal columns one gap apart, the plate steps in by its orbit, the arc glow is one soft drop-shadow at half tone, and every core of the page paints an opaque centre (--sl-pres-core-bg)

  3. The control window traces a route per menu button, keeps live metrics, and stamps its log
  4. The rhythm chart carries three bands - visits, the share the page cache answered, the rest that reached the database - the day blended with a diurnal profile at its real total, a short month padded around the real mean

  5. The vitals orb carries three arcs in the tones of the bands; the guard row wears the success tone
  6. Module map and block router (partials/presentation-modules.html, fragments/presentation-module.html):
  7. The well-known modules come first on the map; a build preset bar lights the set of a build as a demo
  8. Every block node is wired to the slot it fills, the wire lit while the block is on
  9. Request guard (partials/presentation-guard.html, plugins/presentation/presentation.js):
  10. Travellers cloned from a template pool ride the lanes to a patrolling gate; attacks drop into quarantine and count, good requests light their window of the house, the log grows by clones of its own rows

  11. Runtime, request path, commit board, statistics, pulse (partials/presentation-runtime.html, -pipeline.html, -dev.html, -stats.html, -dna.html, fragments/presentation-commit.html, -brand.html, -site.html):

  12. Four PDO cases play over the real table prefix with a packet walking the nodes, counters, an epoch flash on a write and a direct-query listing; the event strip turns with the time of now

  13. Three cache scenarios (hit, miss, bypass) drive the flow, the decision tree and the state grid
  14. Commit rows show chips read off the subject, the focus panel carries the commit body and walks the rows
  15. The hour bars read the same blended day as the chart; the statistics board carries a poll heartbeat
  16. The monitor row falls back to the figures a public page can afford when the sampler has not run
  17. Principles and gallery tiles carry aria labels; the voice avatar bounces on hover
  18. Module and plugin (modules/presentation/index.php, plugins/presentation/presentation.js, lang/*.php):
  19. Every scene's data is written by the module into the template - hidden pools of attributes, positions as --sl-d-* - and the plugin writes text, attributes and clones; it never builds markup

  20. New constants in six locales: _PRES_MONITOR, _PRES_CO_*, _PRES_MD_BUILD/ALL/PORTAL/MEDIA/KNOW/DEMO, _PRES_SP_WRITE/DIRECT/NOPARAM, _PRES_DV_RECENT, _PRES_ST_SYNC, _PRES_AR_NOSTORE; _PRES_UNIT_YEAR takes plurals

  21. Theme and tooling (templates/lite/assets/css/base.css, presentation.css, tools/ui-contract.php, tools/ui-audit-baseline.json, tools/ui-contrast.json, tools/ui-shots.mjs, core/system.php):

  22. Tokens --sl-gauge-mix and --sl-pres-core-bg; the contract declares pres-core and the --sl-d-gate-y, --sl-d-x, --sl-d-y, --sl-d-pointer-x, --sl-d-pointer-y names the plugin writes

  23. The screenshot rig opens every context with reduced motion so self-drawing scripts hold still
  24. The sampler comment in the core describes the fallback the module now takes

Benefits:

  • The page reads as one live system rather than a set of stills, on the install's own figures
  • Every animation runs on one beat (STEP in the plugin, --sl-pres-dur in the theme) and stops for reduced motion
  • The theme audit, the markup scan and the unit tests stay at zero with the baseline re-stored

Technical notes:

  • Scenes start only on screen and pause when the tab is hidden; nothing is saved on the server
  • The monitor row shows cores and uptime only from a stored sample, since they spawn a shell on Windows
  • No schema, URL or API change; the module's op names are untouched
Эта неделя (15.09.2026)
Feature: the presentation page wears its own palette in both schemes, the devtools tabs switch, and the plan leaves the tree
Автор: Eduard Laas | Дата: 17:00 15.09.2026

The closing pass of docs/PRESENTATION-INTEGRATION-2026.md, section 9. The page reads its colours through ten --sl-pres-* tokens that resolve to the theme surfaces in light and to a deep-blue set in dark, so the etalon look survives the scheme switch; the devtools panel gets a working tab strip, the cockpit menu links to the real modules, and the gauges of the hero draw as dial arcs. The plan file is deleted, its durable knowledge sits in VERSIONS.md, ARCHITECTURE.md and TEMPLATES.md.

Core changes:

  1. Presentation tokens (templates/lite/assets/css/base.css, templates/lite/assets/css/presentation.css, tools/ui-contract.php):
  2. --sl-pres-panel-bg, -ground-bg, -inset-bg, -border, -frame-border, -text, -muted-text, -link-text, -good-text and -warn-text, each a light-dark() pair

    • the stylesheet reads only these for surface, border and text colour; the tone attributes map onto them
    • the grid of --sl-pres-bg and the caption gradient --sl-grad-caption are rebuilt on the same tokens
  3. The contract lists the eight new token names; ui-audit stores 430 tokens and one single-use token fewer
  4. Selectors that lose to the #content image and path rules of theme.css carry the #content prefix themselves
  5. The hero facts stack value over label, the vitals rings gain a halo, the block stage shows the grid ground
  6. Plugin (plugins/presentation/presentation.js):
  7. .sl-pres-tabs becomes a tablist: role, aria-selected, aria-controls, roving tabIndex, arrow, Home and End keys, hidden panes
  8. setChart() draws data-sl-pres="pulse" and "spark" as mini charts: no axes, no labels, no tooltip, 4 px margins

    • a mini chart needs no output element; pointer handlers return without one
  9. Module and templates (modules/presentation/index.php, templates/lite/partials/presentation-.html, templates/lite/fragments/presentation-.html):
  10. The cockpit passes a trace of route, PHP version, storage driver and theme; the core menu prints links to the modules
  11. The ring fragment draws a dial arc with tick marks for the large gauges; is_round keeps the circle for the generation ring
  12. The statistics section prints the _PRES_RH_NOTE line under its rings; the brand tile shows the file it links to
  13. The wires of the block router meet in the centre of the page mock, where the router card now sits; nodes and cards carry a title
  14. The cache pipeline core shows the wordmark logo at 96 x 32 instead of the configured square one
  15. Documentation (docs/VERSIONS.md, docs/ARCHITECTURE.md, docs/TEMPLATES.md, docs/PRESENTATION-INTEGRATION-2026.md):
  16. VERSIONS.md gets the 2026-09-11 entry of the whole integration, the breaking start-page change included
  17. ARCHITECTURE.md describes the home route block positions, has_own_title, and the monitor sampler with its store contract
  18. TEMPLATES.md names presentation.css in the theme package, the per-page script hand-over, and the pixel mode of data-sl-spy
  19. The plan file is removed; tools/ui-contrast.json is regenerated for the new token pairs

Benefits:

  • The page keeps one look in both schemes without touching the theme-wide tokens
  • Keyboard and screen reader users can operate the devtools tabs
  • The tree carries no finished plan; the durable facts live in the permanent references

Technical notes:

  • Breaking change: none; the start-page change of batch E is documented, not altered
  • No schema, URL or API change
  • ui-audit counters of lite: classes 0, dead 0, contrast 0; baseline re-stored 2026-09-15
11.09.2026
Feature: the start page listens to the block positions of its module, the hero keeps the only h1, and the rig learns the presentation page
Автор: Eduard Laas | Дата: 19:48 11.09.2026

Batch E of docs/PRESENTATION-INTEGRATION-2026.md, the last one. The presentation module now works both as the start page and by address: the home branch of index.php reads the side and top positions of the module the way the named route does, the module tells the home layout that its hero carries the h1, and the screenshot rig captures the page on its own. The plan closes with the status line "A-E closed, nothing next".

Core changes:

  1. Start page (index.php, modules/presentation/index.php, templates/lite/layouts/home.html):
  2. The $home branch sets $blocks and $blocks_c from $conf['modules'][$name]['side'|'top'], so admin.php?name=modules governs the start page too
  3. presentation() sets $sitevars['has_own_title'] after setHead() rebuilt the array; the layout prints the site name h1 only without the flag

    • the hero stays the one h1 of the page, verified over HTTP with module = presentation and with module = news
  4. The dead data-sl-pres-tab hook of the devtools scheme is gone: nothing read it
  5. Screenshot rig (tools/ui-shots.json, tools/ui-shots.mjs):
  6. The manifest gains the presentation page; the shuffled site strip is masked as a box of fixed height
  7. setScrolled() bounds its wait for lazy images to three seconds: a tile a script hid or a card past the edge of a strip never fires load or error, and the presentation page holds ninety of them, so the run stood still for good
  8. setMasks() pauses SMIL animations, because animation: none does not stop the dot walking the pipeline path
  9. Tests and plan (tests/Unit/CommentIsolationTest.php, tests/Unit/UploadFormatTest.php, tools/ui-audit-baseline.json, docs/PRESENTATION-INTEGRATION-2026.md):
  10. core/admin.php left the list of files assembling a table name in batch A; the lightbox test follows the a[data-sl-shot-open] hook of batch D and asserts the dead a.site-link is gone
  11. The audit baseline is re-stored with equal counts; the plan status reads "closed A-E, nothing next"

Benefits:

  • One rule for block positions on every route, set in one admin screen
  • No second h1 when the presentation opens as the start page
  • The rig cannot hang on a page with lazy or SMIL content, and it guards the presentation page from now on

Technical notes:

  • Breaking change (plan decision 10): the start page used to treat the empty $blocks as "both columns"; it now honours the module's side setting, so news with side = 2 loses its left column on the start page. The news setting is untouched; side = 0 in admin.php?name=modules restores both columns
  • The rig compared the site cabinet pages for the first time since batch B and reports their 3-4 px growth: the --sl-font-micro 10 -> 11 step of decision 6, not this batch
  • No schema, URL or API change
Feature: the presentation page gets its plugin, the section rail learns the pixel mode, and the viewer opens from a data hook
Автор: Eduard Laas | Дата: 13:55 11.09.2026

Batch D of docs/PRESENTATION-INTEGRATION-2026.md. The behaviour of the etalon moves into plugins/presentation/presentation.js, the sticky rail of the page is driven by the one scroll spy of slaed.js, and the image viewer opens from a[data-sl-shot-open] instead of the dead class of the old main module. Every figure the plugin draws comes from the series the module wrote into the page.

Core changes:

  1. Plugin (plugins/presentation/presentation.js):
  2. One ES5 IIFE in the style of slaed.js, initialised on data-sl-pres="sites|brand|chart" with a data-sl-pres-ready flag
  3. Site strip: a step every 4 s only while on screen, no tick under document.hidden or prefers-reduced-motion, paused under the pointer and under focus; the range and scrollLeft follow each other, arrows wrap, keys walk the track

    • the order of the cards is the module's, the script shuffles nothing
  4. Brand archive: the feature and its four neighbours in slot order, the rest hidden, the open button clicks the cover link
  5. Rhythm chart: rows from data-sl-pres-series, period and view switches, tooltip, ResizeObserver, redraw on scheme change

    • the headline follows the period and the change shows only where a like period precedes it
    • figures are written the way the module writes them, thousands parted by a space
    • tokens are resolved through a probe element, because the raw light-dark() value is not a canvas colour
  6. Scroll spy (plugins/system/slaed.js):
  7. setSpyRail() reads data-sl-spy="px": --sl-d-spy in pixels to the middle of the current pill, the pill pulled into the visible band, the dock height published as --sl-d-rail on the document so the sections clear it

  8. The settings rail without a value keeps the percent branch unchanged
  9. The lightbox opens on a.sl-attach and a[data-sl-shot-open]; a.site-link is gone
  10. Wiring (modules/presentation/index.php, templates/lite/partials/presentation.html):
  11. The module passes script => {src, attr}, the root partial prints it through fragments/head-script-src.html
  12. Nothing is added to the global script_f, so only this page loads the plugin
  13. Contract and plan (tools/ui-contract.php, docs/PRESENTATION-INTEGRATION-2026.md):
  14. --sl-primary, --sl-accent, --sl-text-muted, --sl-border and --sl-font-micro are listed as read by the plugin
  15. Decision 14: the arrows of the site viewer stay inert, the reveal of the sections stays in CSS
  16. Plan status: batches A-D closed, next batch E

Benefits:

  • The page behaves as the etalon did, without a shell, a store or a fake figure
  • One scroll spy serves both rails; the presentation gets pixels, the settings keep percent
  • The ui-audit counters of lite equal the baseline; ThemeContract and TemplateValidation pass

Technical notes:

  • Playwright acceptance of batch D passed: strip step, pointer and focus hold, reduced motion, range and scroll in both directions, rail fill and pill visibility, viewer open and close, chart, console and error_site.log

  • No schema, URL or API change
Feature: the presentation page renders its twelve sections from partials and fragments, and the module reads every figure from the system
Автор: Eduard Laas | Дата: 13:25 11.09.2026

Batch C of docs/PRESENTATION-INTEGRATION-2026.md. The module collects the live request figures, the counters, the tables, the changelog, the monitor store and the galleries into one array, and partials/presentation.html owns every tag and class through fourteen partials and eight fragments written against the class contract of presentation.css. Two defects of that contract found by the browser walk are fixed in the same batch.

Core changes:

  1. Module data (modules/presentation/index.php):
  2. getPresentationData() builds the page: hero gauges, rail, rhythm series, module topology, block router, guard counters, runtime telemetry, commits, statistics, cache pipeline, principles, brand, sites, voices and pulse

    • load stats are read after the SQL of the sections, so the query count is the real one
    • topology and counts cover front modules only (type 1); the DB version keeps its numeric part
    • texts are constants, numbers have a named source; PHP passes words, urls, attribute values and flags
  3. presentation() renders one getHtmlPart('presentation', ...) between setHead() and setFoot()
  4. Theme markup (templates/lite/partials/presentation.html, templates/lite/fragments/presentation-.html):
  5. One root partial, hero, sticky rail and twelve sections; fragments for head, stat, ring, module, commit, brand tile, site tile and voice

    • rings reuse .sl-knob with tone flags, shares travel as --sl-d-part, tones as data-sl-tone
    • SVG wiring of the module map, the block router and the cache ring lives in the html
    • brand tiles carry data-sl-shot-open, a download link and hidden past the fifth until the plugin
    • galleries expose data-sl-pres, data-sl-pres-step, data-sl-pres-range and data-sl-pres-of
  6. Language constants (modules/presentation/lang/*.php):
  7. _PRES_BL_ORDER, _PRES_SQL_TIME and _PRES_DT_MEMORY added; _PRES_MD_BUILD, _PRES_GD_ALLOWED, _PRES_GD_CAUGHT and _PRES_ST_HUMAN_T removed as unused; _PRES_AR_TTL reads minutes, as cache_t does

  8. Stylesheet corrections (templates/lite/assets/css/presentation.css, tools/ui-contract.php):
  9. The devtools panes become .sl-pres-tab-pane: .sl-pres-pane was declared twice and the house windows inherited the tab pane height and padding

  10. The guard counters fold by --sl-gauge-width instead of three fixed columns
  11. Two selectors of removed <time> elements dropped; --sl-d-part names the runtime partial too

Benefits:

  • The page shows real figures of this request, this day and this server, nothing invented in the browser
  • Markup and classes stay in the theme; the PHP markup scanner reads zero
  • The lite class counter returns to zero and the baseline is stored again

Technical notes:

  • Plan status: batches A-C closed, next batch D (plugin, scroll spy, viewer hook)
  • No schema, URL or API change; the page is not cached and stays outside the page cache allowlist
  • The monitor section hides itself while the sampler has not run for five minutes
Feature: the lite theme dresses the presentation page from one stylesheet, the micro step reads 11 in both themes, and the contract learns the page's tokens
Автор: Eduard Laas | Дата: 12:19 11.09.2026

Batch B of docs/PRESENTATION-INTEGRATION-2026.md. The etalon's twentytwo.css and its inline style become templates/lite/assets/css/presentation.css under one root, every visual decision reading a token of base.css; both themes take the micro step at 11 px; the contract, the theme creation test and the baseline follow. The markup arrives in batch C and reads the class contract written above every block of the new file.

Core changes:

  1. Presentation stylesheet (templates/lite/assets/css/presentation.css):
  2. Hero, sticky section rail and twelve sections under .sl-pres, bundled by name between base and theme

    • no custom property declared: templates and scripts write --sl-d-*, tones travel as data-sl-tone
    • every scene figure is arithmetic over one token, every animation a multiple of --sl-pres-dur
    • rings reuse .sl-knob at three gauge sizes; galleries, voices and pulse share one picture treatment
  3. The guard court, the PDO bus, the block router and the cache ring stay static CSS scenes with reduced-motion off
  4. Twenty-eight repeated bodies merged by role; the vendor range track pair is the one duplicate allowlisted
  5. Tokens (templates/lite/assets/css/base.css, templates/admin/assets/css/base.css):
  6. --sl-font-micro 11px in both themes
  7. --sl-face-quote, --sl-track-tight, --sl-z-sticky, --sl-grad-caption, --sl-quote-mix
  8. Components pres, gauge, guard, plot, site and brand: fifteen geometry, motion and ground tokens
  9. Contract and gates (tools/ui-contract.php, tests/Unit/ThemeCreationTest.php, tools/ui-audit-baseline.json):
  10. presentation.css in the lite file list and in both lists of the theme copy test
  11. font-size ladder 10 -> 11, grad role caption, allowlist filter and 80px with their reasons
  12. --sl-d-part and --sl-d-rail registered as data, the four writing templates listed under places
  13. Baseline re-stored; lite.classes carries 222 as the transient of plan decision 13 until batch C
  14. tools/ui-contrast.json regenerated by the rig after the base.css change
  15. Plan (docs/PRESENTATION-INTEGRATION-2026.md):
  16. Decision 13: classes without markup between B and C, and the store guard that has no force mode
  17. Batch C acceptance names the class contract and the return of classes to zero

Benefits:

  • One file to read for the whole page, one token to retune each scene
  • The audit holds count, bare, dead, unmet, dup and scoped at their stored values across both themes
  • The C session has a written skeleton for every partial and fragment

Technical notes:

  • --sl-d-spy takes pixels on the presentation rail, which batch D adds to setSpyRail()
  • The ordinal selectors use :nth-child(n of .class), inside the theme's browser floor
  • The screenshot pair shows no page past its floor apart from admin-statistic, whose live figures moved
  • Backward compatible: no template, route or PHP behaviour changes; the micro step moved no layout
Refactor: the server metrics move into the core, the scheduler samples them once a minute, and the presentation module reads its data from config and constants
Автор: Eduard Laas | Дата: 01:40 11.09.2026

Batch A of docs/PRESENTATION-INTEGRATION-2026.md. The admin monitor keeps only its page; everything that measures the server lives in core/monitor.php, a scheduler job writes one sample per minute into monitor.json, and the presentation module gets its sites, brand archive, principles and voices from config/presentation.php with every visible word as a PRES* constant in six locales.

Core changes:

  1. Shared metrics layer (core/monitor.php, admin/modules/monitor.php, core/system.php):
  2. Thirty functions moved from the admin monitor, not copied; the admin file keeps the page only

    • getServerSoftware() splits SERVER_SOFTWARE once for the admin monitor and the module
    • getSecurityEventCount() counts warn.log and hack.log without returning a line of them
    • getMemorySafeLimit() dropped for a direct getMemoryLimitBytes(true) at its one call site
  3. One require_once next to core/security.php, guarded by FUNC_FILE like its neighbours
  4. Scheduler sampler (config/scheduler.php, core/system.php):
  5. Job monitor: system type, every minute, priority 9 so it never outranks mail or newsletter
  6. addMonitorSample() runs the two history writers, then stores disk, uptime, cores, soft and sampled_at

    • the presentation module hides its monitor section when sampled_at is older than five minutes
  7. Five core readers (core/system.php, core/admin.php, core/user.php):
  8. getTableCount(), getSessionCounts(), getStatsToday(), getStatsDays(), getLoadLimits()
  9. getAdminCountRow(), getUserSessionInfo(), getDebugSystemInfo() and the PNG counter read through them
  10. Module data (config/presentation.php, modules/presentation/):
  11. 71 sites, 34 brand items, 4 principles and 3 sample voices extracted from the etalon by script
  12. 399 PRES* constants in de, en, fr, pl, ru, uk; dictionary fields name constants, proper names stay raw
  13. getPresentationSites/Brand/Dna/Voices() return data and flags only, no markup
  14. 34 brand thumbnails at 440 px under brand/thumb, under two megabytes in total

Benefits:

  • The public page never runs exec() itself: it reads a sample the scheduler wrote
  • One parser for the web server name, one COUNT helper, one statistic.log reader
  • Every text of the future home page is translatable before a single template exists

Technical notes:

  • monitor.json gains disk_*, uptime, cores, soft and sampled_at beside the existing rows
  • getUserSessionAdminInfo() and getStatistic() keep their own loops: neither ran a COUNT to consolidate
  • config/presentation.php is a new tracked config file; the plan status line moves to batch B
  • Backward compatible: admin monitor pages, session summary and the PNG counter render as before

Страница 1 из 118. Всего: 1176

1 2 3 4 5 6 7 8 9 10 118
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код

Предварительный просмотр