UI fixes: learn rows on one line, offcanvas header/brand/user layout, users column, code color, badge padding, sticky footer; class-based selectors
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
<div class="toolbar">
|
||||
<input class="input table-search w-260" data-target="group-table"
|
||||
placeholder="Поиск по студенту…" aria-label="Поиск по студенту">
|
||||
<select class="input" id="lab-focus">
|
||||
<select class="input input-lab-focus" id="lab-focus">
|
||||
<option value="">все лабораторные</option>
|
||||
<option th:each="lab : ${labs}" th:value="${lab.id}" th:text="|ЛР ${lab.number}|">—</option>
|
||||
</select>
|
||||
@@ -344,7 +344,7 @@
|
||||
<div class="dlg-body" id="assign-modal-body"></div>
|
||||
</dialog>
|
||||
|
||||
<script th:src="@{/js/admin-group.js(v='15')}" defer></script>
|
||||
<script th:src="@{/js/admin-group.js(v='19')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
</dialog>
|
||||
</th:block>
|
||||
</div>
|
||||
<script th:src="@{/js/admin-lab.js(v='15')}" defer></script>
|
||||
<script th:src="@{/js/admin-lab.js(v='19')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
<tr>
|
||||
<th class="th-sortable is-asc" title="ФИО — по возрастанию">ФИО</th>
|
||||
<th>Логин</th>
|
||||
<th>Номер</th>
|
||||
<th>Группа</th>
|
||||
<th class="text-right" data-nosort>Действия</th>
|
||||
</tr>
|
||||
@@ -27,7 +26,6 @@
|
||||
<tr th:each="u : ${users}">
|
||||
<td class="font-medium" th:text="${u.fullName}">—</td>
|
||||
<td class="font-mono" th:text="${u.login}">—</td>
|
||||
<td class="font-mono" th:text="${u.studentNo}">—</td>
|
||||
<td><a th:if="${u.groupId}" th:href="@{/admin/groups/{id}(id=${u.groupId})}" th:text="${u.groupName}">—</a><span th:unless="${u.groupId}" class="text-muted">без группы</span></td>
|
||||
<td class="text-right">
|
||||
<form class="inline-form" th:action="@{/admin/users/{id}/delete(id=${u.id})}" method="post" data-confirm="Удалить пользователя безвозвратно? Будут удалены аккаунт, группа, оценки с комментариями, сдачи с файлами и задания защит.">
|
||||
@@ -37,7 +35,7 @@
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<tr th:if="${#lists.isEmpty(users)}"><td colspan="5" class="empty">Никого не нашли.</td></tr>
|
||||
<tr th:if="${#lists.isEmpty(users)}"><td colspan="4" class="empty">Никого не нашли.</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -17,21 +17,21 @@
|
||||
<!-- v=4: сброс кэша стилей после редизайна; при изменении css поднимать версию -->
|
||||
<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}">
|
||||
<link rel="stylesheet" th:href="@{/css/bootstrap-icons.min.css}">
|
||||
<link rel="stylesheet" th:href="@{/css/app.css(v='18')}">
|
||||
<link id="hljs-light" rel="stylesheet" th:href="@{/css/hljs-github.css(v='18')}">
|
||||
<link id="hljs-dark" rel="stylesheet" th:href="@{/css/hljs-github-dark.css(v='18')}" disabled>
|
||||
<script th:src="@{/js/highlight.min.js(v='18')}" defer></script>
|
||||
<script th:src="@{/js/table-scroll.js(v='18')}" defer></script>
|
||||
<script th:src="@{/js/tablekit.js(v='18')}" defer></script>
|
||||
<link rel="stylesheet" th:href="@{/css/app.css(v='19')}">
|
||||
<link id="hljs-light" rel="stylesheet" th:href="@{/css/hljs-github.css(v='19')}">
|
||||
<link id="hljs-dark" rel="stylesheet" th:href="@{/css/hljs-github-dark.css(v='19')}" disabled>
|
||||
<script th:src="@{/js/highlight.min.js(v='19')}" defer></script>
|
||||
<script th:src="@{/js/table-scroll.js(v='19')}" defer></script>
|
||||
<script th:src="@{/js/tablekit.js(v='19')}" defer></script>
|
||||
<script th:src="@{/js/bootstrap.bundle.min.js}" defer></script>
|
||||
<script th:src="@{/js/theme-init.js(v='18')}"></script>
|
||||
<script th:src="@{/js/app.js(v='18')}" defer></script>
|
||||
<script th:src="@{/js/ui-state.js(v='18')}" defer></script>
|
||||
<script th:src="@{/js/md-content.js(v='18')}" defer></script>
|
||||
<script th:src="@{/js/submit-guard.js(v='18')}" defer></script>
|
||||
<script th:src="@{/js/theme-init.js(v='19')}"></script>
|
||||
<script th:src="@{/js/app.js(v='19')}" defer></script>
|
||||
<script th:src="@{/js/ui-state.js(v='19')}" defer></script>
|
||||
<script th:src="@{/js/md-content.js(v='19')}" defer></script>
|
||||
<script th:src="@{/js/submit-guard.js(v='19')}" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<div class="page d-flex flex-column min-vh-100">
|
||||
<nav class="navbar b3-navbar navbar-expand-md sticky-top">
|
||||
<div class="container">
|
||||
<a th:href="@{/}" class="navbar-brand">LMS<b>.</b></a>
|
||||
@@ -39,9 +39,9 @@
|
||||
aria-controls="mobileNav" aria-label="Меню">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
<div class="offcanvas offcanvas-end" tabindex="-1" id="mobileNav" aria-labelledby="mobileNavLabel">
|
||||
<div class="offcanvas offcanvas-end app-offcanvas" tabindex="-1" id="mobileNav" aria-labelledby="mobileNavLabel">
|
||||
<div class="offcanvas-header">
|
||||
<span class="navbar-brand" id="mobileNavLabel">LMS<b>.</b></span>
|
||||
<a th:href="@{/learn}" class="navbar-brand" id="mobileNavLabel">LMS<b>.</b></a>
|
||||
<button type="button" class="navbar-close" data-bs-dismiss="offcanvas" aria-label="Закрыть">✕</button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
@@ -52,26 +52,28 @@
|
||||
<li class="nav-item" th:if="${currentUser != null and !currentUser.admin}"><a class="nav-link" th:href="@{/student/labs}">Лабораторные</a></li>
|
||||
<li class="nav-item" th:if="${currentUser != null}"><a class="nav-link" th:href="@{/change-password}">Смена пароля</a></li>
|
||||
</ul>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<div class="navbar-user d-flex flex-column flex-md-row align-items-start align-items-md-center gap-2">
|
||||
<a th:href="@{/admin}" th:if="${currentUser != null and currentUser.admin}" class="nav-user" th:text="${currentUser.name}" title="Личный кабинет">—</a>
|
||||
<a th:href="@{/student}" th:if="${currentUser != null and !currentUser.admin}" class="nav-user" th:text="${currentUser.name}" title="Личный кабинет">—</a>
|
||||
<button type="button" class="btn btn-secondary btn-sm theme-btn" aria-label="Сменить тему" title="Сменить тему">
|
||||
<i class="bi bi-circle-half"></i>
|
||||
</button>
|
||||
<a th:if="${currentUser == null}" th:href="@{/login}" class="btn btn-sm">Войти</a>
|
||||
<form th:if="${currentUser != null}" th:action="@{/logout}" method="post" class="m-0">
|
||||
<button class="btn btn-sm" type="submit">Выйти</button>
|
||||
<input type="hidden" name="_csrf" th:value="${csrfToken}">
|
||||
</form>
|
||||
<div class="d-flex align-items-center gap-2">
|
||||
<button type="button" class="btn btn-secondary btn-sm theme-btn" aria-label="Сменить тему" title="Сменить тему">
|
||||
<i class="bi bi-circle-half"></i>
|
||||
</button>
|
||||
<a th:if="${currentUser == null}" th:href="@{/login}" class="btn btn-sm">Войти</a>
|
||||
<form th:if="${currentUser != null}" th:action="@{/logout}" method="post" class="m-0">
|
||||
<button class="btn btn-sm" type="submit">Выйти</button>
|
||||
<input type="hidden" name="_csrf" th:value="${csrfToken}">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<main class="container page-main">
|
||||
<main class="container page-main flex-grow-1">
|
||||
<th:block th:replace="${content}" />
|
||||
</main>
|
||||
<footer class="page-footer">
|
||||
<footer class="page-footer mt-auto">
|
||||
LMS v1.1.0
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
</div>
|
||||
|
||||
|
||||
<script th:src="@{/js/mdeditor.js(v='15')}" defer></script>
|
||||
<script th:src="@{/js/mdeditor.js(v='19')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<script th:src="@{/js/content-sort.js(v='15')}" defer></script>
|
||||
<script th:src="@{/js/content-sort.js(v='19')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -232,8 +232,8 @@
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<script th:src="@{/js/mdeditor.js(v='15')}" defer></script>
|
||||
<script th:src="@{/js/content-sort.js(v='15')}" defer></script>
|
||||
<script th:src="@{/js/mdeditor.js(v='19')}" defer></script>
|
||||
<script th:src="@{/js/content-sort.js(v='19')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<script th:src="@{/js/content-sort.js(v='15')}" defer></script>
|
||||
<script th:src="@{/js/content-sort.js(v='19')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
<p class="text-sm text-muted">Ожидайте преподавателя с проверкой.</p>
|
||||
</div>
|
||||
</div>
|
||||
<script th:src="@{/js/defense-timer.js(v='15')}" defer></script>
|
||||
<script th:src="@{/js/defense-timer.js(v='19')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user