feat(exam-prep F2): порт браузера вариантов + API /variants + POST /attempts + редирект /exam9

This commit is contained in:
Maxim Dolgolyov
2026-05-29 10:43:10 +03:00
parent 1b6865a491
commit 7c33d4ce11
6 changed files with 555 additions and 9 deletions
+25 -6
View File
@@ -8,6 +8,9 @@
<link href="https://fonts.googleapis.com/css2?family=Unbounded:wght@400;700;800&family=Manrope:wght@400;500;600;700&display=swap" rel="stylesheet" />
<link rel="stylesheet" href="/css/ls.css" />
<link rel="stylesheet" href="/css/exam-prep.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css" />
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/contrib/auto-render.min.js" onload="onKatexLoad()"></script>
</head>
<body>
<div class="app-layout">
@@ -24,19 +27,22 @@
<path d="m9 14 2 2 4-4"/>
</svg>
</div>
<div>
<div style="flex:1">
<div class="ep-title" id="ep-title"><span class="ep-skel" style="width:280px;height:1.2em">&nbsp;</span></div>
<div class="ep-sub" id="ep-sub"><span class="ep-skel" style="width:200px;height:.8em">&nbsp;</span></div>
<div class="ep-sub" id="ep-sub"><span class="ep-skel" style="width:200px;height:.8em">&nbsp;</span></div>
</div>
<button class="vp-picker-btn" id="vp-btn" title="Выбрать вариант">
<span id="vp-label">Выбрать вариант</span>
<svg class="vp-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>
</button>
</header>
<nav class="ep-tabs" id="ep-tabs"></nav>
<main id="ep-main">
<div class="ep-empty">
<i data-lucide="layout-grid"></i>
<h4>Браузер вариантов</h4>
<p>В F2 сюда переедет просмотр 80 вариантов с условиями и решениями. До этого пользуйтесь старой страницей: <a href="/exam9" style="color:var(--violet)">/exam9</a></p>
<i data-lucide="loader-circle"></i>
<h4>Загрузка вариантов</h4>
</div>
</main>
@@ -44,6 +50,18 @@
</div>
</div>
<div class="vp-overlay" id="vp-overlay">
<div class="vp-panel" onclick="event.stopPropagation()">
<div class="vp-panel-head">
<h2>Выберите вариант</h2>
<button class="vp-panel-close" id="vp-close" title="Закрыть">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
</button>
</div>
<div class="vp-grid" id="vp-grid"></div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/lucide@0.469.0/dist/umd/lucide.min.js"></script>
<script src="/js/api.js"></script>
<script src="/js/sidebar.js"></script>
@@ -52,6 +70,7 @@
<script src="/js/mobile.js"></script>
<script src="/js/exam-prep/common.js"></script>
<script src="/js/exam-prep/api.js"></script>
<script>(async () => { await EP.boot(); if (window.lucide) lucide.createIcons(); })();</script>
<script src="/js/exam-prep/katex.js"></script>
<script src="/js/exam-prep/variants.js"></script>
</body>
</html>