From 99b8671650bfac2b1e5f7f52f888d042745d0fe8 Mon Sep 17 00:00:00 2001 From: Vladislav Kopnin Date: Wed, 7 Oct 2026 23:47:46 +0300 Subject: [PATCH] Lab variants: redirect back anchors to the saved variant with highlight --- .../ysu/lms/web/admin/AdminLabController.kt | 24 +++++++++++++------ web/src/main/resources/static/css/app.css | 1 + .../main/resources/templates/admin/lab.html | 2 +- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/web/src/main/kotlin/ru/ysu/lms/web/admin/AdminLabController.kt b/web/src/main/kotlin/ru/ysu/lms/web/admin/AdminLabController.kt index 91df8cc..aaeb2ff 100644 --- a/web/src/main/kotlin/ru/ysu/lms/web/admin/AdminLabController.kt +++ b/web/src/main/kotlin/ru/ysu/lms/web/admin/AdminLabController.kt @@ -403,14 +403,24 @@ class AdminLabController( redirect: RedirectAttributes, ): String = try { - api.saveVariant( - token(session), - labId, - form.variantId, - VariantSavePayload(form.labLevelId, form.number, form.title, form.statementMd), - ) + val detail = + api.saveVariant( + token(session), + labId, + form.variantId, + VariantSavePayload(form.labLevelId, form.number, form.title, form.statementMd), + ) redirect.addFlashAttribute("notice", "Вариант сохранён") - "redirect:/admin/labs/$labId" + // вернуться к отредактированному/созданному варианту на странице лабы + val anchor = + form.variantId + ?.takeIf { it.isNotBlank() } + ?: detail.levels + .firstOrNull { it.id == form.labLevelId } + ?.variants + ?.firstOrNull { it.number == form.number.trim() } + ?.id + if (anchor.isNullOrBlank()) "redirect:/admin/labs/$labId" else "redirect:/admin/labs/$labId#variant-$anchor" } catch (ex: ApiException) { redirect.addFlashAttribute("error", ex.message) "redirect:/admin/labs/$labId" diff --git a/web/src/main/resources/static/css/app.css b/web/src/main/resources/static/css/app.css index 6d33ed5..7a48e6f 100644 --- a/web/src/main/resources/static/css/app.css +++ b/web/src/main/resources/static/css/app.css @@ -89,6 +89,7 @@ a:not(.btn):hover { color: var(--c-accent-hover); } .user { display: flex; align-items: center; gap: 0.75rem; font-size: 0.84375rem; margin-left: auto; } .nav-user { font-weight: 500; color: var(--c-text); } .score-big { display: inline-block; margin-left: 0.5rem; font-size: 1.75rem; font-weight: 700; line-height: 1; color: var(--c-tone-pos); font-variant-numeric: tabular-nums; vertical-align: middle; } +.variant-block:target { outline: 2px solid var(--c-accent); outline-offset: 4px; border-radius: var(--radius); } .variant-name { font-weight: 600; } .variant-name b { font-variant-numeric: tabular-nums; } p { margin-top: 0; } diff --git a/web/src/main/resources/templates/admin/lab.html b/web/src/main/resources/templates/admin/lab.html index f40c813..c69a00a 100644 --- a/web/src/main/resources/templates/admin/lab.html +++ b/web/src/main/resources/templates/admin/lab.html @@ -99,7 +99,7 @@ -
+
Вариант —