- Lab page is now read-only with a settings screen for levels/variants;
variant issuance moved to a large modal on the group page (assign-fragment).
- Header: bordeaux logo and 2px accent underline, bordeaux login/logout/theme
buttons; smaller radii across the UI; filled secondary/danger buttons.
- Includes prior agent work (login backoff, no-cache pages, API timeouts,
content tweaks) and fixes (variant usage Map.values, import order).
- Bump static asset version to v=9.
- article layout: content column on the right, sticky outline (chapters, sections,
articles) on the left; on narrow screens the article comes first and the
outline follows it
- article page: ← / → navigation across the whole material tree (including
between sections), sticky sidebar outline with the current article highlighted
- editing on chapter, section and article pages: rename, publish/hide, delete,
create section/article, move articles while deleting a section; forms return
to the page they were opened from (validated internal `back` parameter)
- article page opens the edit dialog directly via ?edit=1 (used by "Править"
links on section/chapter pages)
- import: optional sync flag — with it stale sections/articles of archived
chapters are deleted (previous behaviour), without it import only adds and
updates, so material edited in the UI is not overwritten
- student area: lab page and lab cards now show the defense date next to the
submission deadline
- fix SpEL crash on the student lab page (`and` with nullable strings)
- drag & drop now saves in the background (700 ms debounce) without reloading:
sections stay open, scroll position is kept; on failure it retries every 3 s,
and navigator.sendBeacon flushes unsaved changes on page leave
- removed the explicit save button (autosave only), status indicator shows
«Изменения не сохранены… / Сохранение… / Порядок сохранён»
- new global ui-state.js: restores open <details> and scroll position after any
reload/redirect within the same page (applies to all pages, not just /learn)
- auto-expand a collapsed chapter/section while hovering during drag
- academic: POST /api/v1/content/reorder applies a full tree arrangement in one
request — chapter order, section order and section->chapter moves, article
order and article->section moves (positions and parent ids updated)
- web: POST /admin/content/reorder accepts the tree from JS (CSRF via query
param), calls the gateway with the admin token
- /learn admin view: draggable handles (⠿) for chapters, sections and articles;
drop before/after to reorder, drop into a chapter/section to move; visual
indicators; structure is collected from DOM and saved, then page reloads
- docs: class diagram method + new sequence diagram for drag & drop
- tablekit builds a filter row under the headers for every th with data-filter;
distinct cell values become a select (label from data-filter-label), or a
text substring filter with data-filter="text"
- filters combine with the global table search; placeholder rows (colspan) are
not filtered away; filter row follows the lab-focus column hiding
- enabled on: matrix lab columns (by variant), defense table (ЛР, status with
readable values), students (Основа, Пароль), lab assignment lists (Уровень,
Источник, Сдача), labs list (Статус)