Commit Graph

119 Commits

Author SHA1 Message Date
51d1b84297 Redesign B3 bordeaux + finish lab-page rework
- 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.
2026-10-02 15:41:16 +03:00
c0cf11a5a3 Admin: users page with search and full cascade delete (identity + progress + files) 2026-10-02 11:53:01 +03:00
b94538cb7e Defense: sync admin/student timers from server every 10s; toasts with ready reason; live eye counter 2026-10-02 01:21:32 +03:00
fba4e013e5 Publication per student: checkbox in lab column, partial state in eye, cursor on Variant 2026-10-02 00:33:16 +03:00
d5fbb804c3 Modals: preserve page scroll position while locking background 2026-09-29 20:58:41 +03:00
881bb6797a Defense modal: move Save to bottom-right next to issue-code action 2026-09-29 18:34:41 +03:00
b97a0096ff Solutions zip: use real file/submission timestamps instead of epoch (fixes bogus years) 2026-09-29 18:31:19 +03:00
fca585921d Grade comments: mark suggestion tone with colored icon and left border 2026-09-29 17:55:34 +03:00
112df9281c Grade comments: select tone sized by content so input keeps width (fix row overflow) 2026-09-29 17:31:47 +03:00
22b33e6629 Modals: lock background scroll; comment dropdown keeps row on one line, full tone labels, flip up near bottom 2026-09-29 16:19:15 +03:00
81133684e9 Grade comments: dropdown matches input width, compact tone select, responsive wrap 2026-09-29 16:09:39 +03:00
e35b0621db Grade comments: show live usage count and allow deleting unused templates 2026-09-29 15:56:00 +03:00
3870bcab8f Modals: action buttons bottom-right, no empty space under content 2026-09-28 17:39:10 +03:00
15fe94c32d Admin group: large variant modal with the assigned variant task text 2026-09-28 17:37:18 +03:00
daaacb1d5f Admin group: counter = number of group students who submitted a solution 2026-09-28 17:35:10 +03:00
4e1e0d1488 Admin group: fix script loading (extra div), total submissions counter, label cleanup 2026-09-28 17:22:09 +03:00
684567a839 Admin group: variant modal, cell badges/counters, header cleanup, bigger modal 2026-09-28 17:09:55 +03:00
f2f1f7dd41 Admin group: rework lab cells/columns, fix sort toggle and card rounding 2026-09-28 16:39:18 +03:00
6890967ce5 Admin grades: comment autocomplete by substring, larger grade dialog 2026-09-28 16:32:01 +03:00
c28fd373d6 Admin group: single table, defense actions in cells; flash messages as toasts 2026-09-28 16:23:29 +03:00
d3f70b0a25 Refactor: bind admin forms via @ModelAttribute DTOs; detekt fully default 2026-09-27 23:13:29 +03:00
42664297de Refactor: extract helpers from groupDetail/editLab; detekt thresholds to defaults 2026-09-27 22:58:35 +03:00
af480a87f9 Refactor: split content order API; near-default detekt thresholds 2026-09-27 22:38:48 +03:00
1b3eeb2f40 Refactor: split AdminController into AdminSupport and domain controllers 2026-09-27 22:36:41 +03:00
36368f543e Refactor: move defense API methods into separate extension file 2026-09-27 22:31:06 +03:00
ab382ed178 Refactor: split ApiClient into domain extension files 2026-09-27 22:29:57 +03:00
2e99fd926c Add ContentImporter tests; drop redundant elvis; document lint/test commands 2026-09-27 22:17:59 +03:00
a021bdb904 Lint: strict mode on; tune detekt thresholds; more decompositions 2026-09-27 22:15:00 +03:00
5fbd9cb6cb Refactor: bind content admin forms via @ModelAttribute DTOs 2026-09-27 22:06:09 +03:00
82b912ba46 Refactor: split loop/throws helpers; drop deprecated JSON accessors 2026-09-27 22:02:56 +03:00
577a2c8f41 Refactor: extract helpers to satisfy detekt (throws, returns, loops) 2026-09-27 22:00:15 +03:00
a821d97ef7 Refactor: reduce detekt findings (unused params, throws, long methods, config) 2026-09-27 21:54:00 +03:00
c6e0b0d7c8 Build: enable ktlint+detekt, format sources, add core unit tests 2026-09-27 21:46:05 +03:00
d35d345059 Admin: name submission archives as group-studentNo-name-attempt 2026-09-27 20:46:17 +03:00
a91cd34e30 Submissions: reject XML project files, show submitted file names to admin 2026-09-24 11:32:19 +03:00
0301aeafe3 Fix mobile layout; scroll tables themselves, not cards 2026-09-17 22:13:56 +03:00
00f3692b10 Bump LMS version to 0.2.0 2026-09-17 21:19:52 +03:00
ac7f1d7168 Learn: remember expanded sections, open only in the last chapter by default 2026-09-17 20:41:54 +03:00
3730c1f173 Learn: remove link underlines 2026-09-17 20:35:29 +03:00
6b1213f4cf Learn: section actions on the title row, scrollable tables, copy code 2026-09-17 20:16:35 +03:00
65b94f11cb Learn: drag handles on the left, chapters always expanded 2026-09-17 19:56:35 +03:00
a4ea358d27 Learn: drag & drop sections and articles on chapter and section pages 2026-09-17 19:15:56 +03:00
aa2b1638b2 Learn: fix navigate buttons 2026-09-17 19:01:52 +03:00
0ee191f907 Learn: fix alert notification 2026-09-17 18:55:57 +03:00
c4dceacc9f Learn: icon formatting toolbar; fix editor shown when hidden 2026-09-17 18:38:19 +03:00
7a341fb871 Learn: inline markdown editor with formatting toolbar; drop edit modals 2026-09-17 18:31:43 +03:00
114a031e36 Learn: outline panel moved to the left of the article
- 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
2026-09-17 17:36:54 +03:00
09721747d1 Learn UI: prev/next navigation, sidebar outline, editing on every page; merge import; defense date
- 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)
2026-09-17 17:14:16 +03:00
396221047c Materials: images with captions and video support
- markdown: new directives `:::figure assets/x.png | Подпись` and
  `:::video assets/x.mp4 | Подпись` rendered as figure/figcaption and a
  video player (works with HTML escaping on); sanitizer allows video/source/
  track/figure with safe attributes only
- assets: video extensions (mp4/webm/ogg) allowed, separate limits — images
  up to 10 MB, video up to 100 MB; correct content types
- upload limits raised: web/academic multipart 120 MB per file / 200 MB per
  request, nginx client_max_body_size 200m (covers media inside ZIP imports)
- docs: new docs/06-authoring.md (markdown, images, video, assets, limits,
  import semantics); import message now says "медиафайлов"
2026-09-17 15:44:16 +03:00
1238265c8e Content import: sync sections and articles (archive is the source of truth)
- importZip now updates titles/positions of existing chapters and sections and
  removes sections/articles of archived chapters that are missing in the archive
  (so restructured material no longer leaves stale sections behind); removed
  count is reported in ContentImportResult and in the admin flash message
- docs: note about import semantics in the class diagram and sequences
2026-09-16 22:00:22 +03:00