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)
This commit is contained in:
@@ -85,12 +85,29 @@ printf("Ответ: 42\n");
|
||||
Поддерживаются `mp4` (рекомендуется, кодек H.264), `webm`, `ogg` — до **100 МБ** на файл.
|
||||
Плеер поддерживает перемотку (сервер отдаёт файл частями).
|
||||
|
||||
## Правка прямо на страницах материалов
|
||||
|
||||
Администратору доступны действия не только на главной `/learn`, но и на каждой странице:
|
||||
|
||||
* **статья** — «Править» (модальное окно с markdown), «Скрыть/Опубликовать», «Удалить»,
|
||||
а также навигация **← предыдущая / следующая →** (работает и между разделами) и
|
||||
**боковое содержание** со всеми главами, разделами и статьями;
|
||||
* **раздел** — «+ Статья», «Переименовать раздел», «Скрыть/Опубликовать»,
|
||||
«Перенести статьи и удалить», «Удалить раздел»; у каждой статьи в списке — «Править»
|
||||
(открывает статью с готовым окном правки), скрытие и удаление;
|
||||
* **глава** — «+ Раздел», «Переименовать главу», «Скрыть/Опубликовать», «Удалить главу»;
|
||||
у каждого раздела — переименование, скрытие, перенос статей и удаление, у каждой статьи — «Править».
|
||||
|
||||
## Импорт: что происходит с материалами
|
||||
|
||||
* Главы, разделы и статьи из архива **обновляются** (совпадение по главе + разделу + slug статьи).
|
||||
* Разделы и статьи, которых в архиве нет, но они есть в **главах из архива**, удаляются —
|
||||
архив считается источником истины (в уведомлении пишется «удалено устаревших: N»).
|
||||
* Режим **синхронизации** (галка в форме импорта) дополнительно **удаляет** разделы и статьи
|
||||
главы, которых нет в архиве — архив считается источником истины («удалено устаревших: N»).
|
||||
* Без галки импорт работает в режиме **merge**: только добавляет и обновляет то, что есть
|
||||
в архиве. Так можно догрузить отдельные статьи, **не затрагивая правки, сделанные в приложении**.
|
||||
* Главы, которых нет в архиве совсем, не затрагиваются — их нужно удалить вручную.
|
||||
* Минимальный архив (например, только один раздел + `assets/`) безопасно импортировать
|
||||
в режиме merge: остальные материалы останутся как есть.
|
||||
* Ссылки вида `assets/имя` автоматически заменяются на публичный адрес
|
||||
`/api/v1/content/assets/...`; сами файлы складываются в хранилище.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user