Files
LMS/web/src/main/resources/templates/teacher/content-article.html
Vladislav Kopnin 65ed08f5c2 feat(web): перевести браузерные URL курсов на courseNo
- teacher/admin course pages, content, gradebook, profile, downloads
- courseNo -> UUID только на границе REST API
- обновлены e2e, шаблоны, тесты и docs
- LDD-UI-002; baseline 59 claims / 385 тестов
2026-10-29 19:51:03 +03:00

87 lines
4.5 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru" xmlns:th="http://www.thymeleaf.org" th:replace="~{fragments/base :: layout(~{::title}, ~{::#content})}">
<head><title th:text="${article.title} + ' — LMS'">Статья</title></head>
<body>
<div id="content">
<nav class="text-sm mb-4 breadcrumb">
<a th:href="@{/teacher/courses/{no}(no=${course.courseNo})}" class="nav-link" th:text="${course.title}">Курс</a>
<span class="nav-sep">/</span>
<a th:href="@{/teacher/courses/{no}/content(no=${course.courseNo})}"
class="nav-link">Материалы</a>
<span class="nav-sep">/</span>
<span th:text="${article.chapterTitle}">Глава</span>
<span class="nav-sep">/</span>
<span th:text="${article.sectionTitle}">Раздел</span>
<span class="nav-sep">/</span>
<span th:text="${article.title}">Статья</span>
</nav>
<div class="page-head mb-2">
<div>
<h1 class="page-title m-0">
<span th:text="${article.title}">Статья</span>
<span class="badge"
th:classappend="${article.published ? 'badge-ok' : 'badge-warn'}"
th:text="${article.published ? 'опубликовано' : 'скрыто от студентов'}">—</span>
</h1>
<div class="meta mt-2">
<span th:text="|${course.title} / ${article.chapterTitle} / ${article.sectionTitle}|">Курс</span>
</div>
</div>
</div>
<div class="flex flex-wrap gap-2 mb-4">
<a class="btn btn-sm btn-secondary" th:href="${back}">← К материалам курса</a>
<a class="btn btn-sm btn-secondary"
th:if="${course.courseNo != null and course.courseNo > 0}"
th:href="@{/learn/course/{no}/{chapter}/{section}/{article}(no=${course.courseNo}, chapter=${article.chapterSlug}, section=${article.sectionSlug}, article=${article.slug})}">
Студенческий вид
</a>
<form class="inline-form"
th:action="@{/teacher/courses/{no}/content/articles/{id}/published(no=${course.courseNo}, id=${article.id})}"
method="post">
<input type="hidden" name="_csrf" th:value="${csrfToken}">
<input type="hidden" name="published" th:value="${!article.published}">
<input type="hidden" name="back" th:value="${back}">
<button class="btn btn-sm btn-secondary" type="submit"
th:text="${article.published ? 'Скрыть от студентов' : 'Опубликовать'}">Опубликовать</button>
</form>
<form class="inline-form"
th:action="@{/teacher/courses/{no}/content/articles/{id}/delete(no=${course.courseNo}, id=${article.id})}"
method="post" data-confirm="Удалить статью?">
<input type="hidden" name="_csrf" th:value="${csrfToken}">
<input type="hidden" name="back" th:value="${back}">
<button class="btn btn-sm btn-danger" type="submit">Удалить</button>
</form>
</div>
<div class="row g-4">
<div class="col-12 col-lg-7">
<form class="card card-body form-stack"
th:action="@{/teacher/courses/{no}/content/articles/{id}/save(no=${course.courseNo}, id=${article.id})}"
method="post">
<input type="hidden" name="_csrf" th:value="${csrfToken}">
<input type="hidden" name="back" th:value="${back}">
<div>
<label class="label" for="articleTitle">Заголовок</label>
<input class="input" id="articleTitle" name="title" th:value="${article.title}" required>
</div>
<div>
<label class="label" for="articleBodyMd">Текст (markdown)</label>
<textarea class="input md-editor-body" id="articleBodyMd" name="bodyMd"
rows="18" th:text="${article.bodyMd}"></textarea>
</div>
<button class="btn btn-primary" type="submit">Сохранить</button>
</form>
</div>
<div class="col-12 col-lg-5">
<div class="card card-body">
<h2 class="section-title m-0">Предпросмотр</h2>
<div class="md-body mt-2" th:utext="${bodyHtml}">Предпросмотр статьи</div>
</div>
</div>
</div>
</div>
</body>
</html>