feat(journal): настраиваемые поля карточки отчёта по ученику
Добавлен плавающий виджет «Поля карточки» в журнале: набор видимых полей карточки отчёта по ученику (фото, фамилия, имя, группа, модуль, тема, дата, файлы) задаётся пользователем и сохраняется в localStorage. Имя теперь рендерится двумя спанами, чтобы скрывать частично; добавлен блок мета-информации с датой и чипами файлов — картинки открываются в лайтбоксе, играбельное видео воспроизводится в #videoModal через ?play=1, остальное скачивается. Каталог полей вынесен в REPORT_CARD_FIELDS как единственный источник правды, без дублирования в HTML. Также добавлена документация HTTP API (API.md, 45 разделов): адреса и транспорт, аутентификация сессиями и API-ключами, лимиты частоты, дата/время/часовой пояс, матрица соответствия и полный индекс эндпоинтов с ссылками на строки server.js.
This commit is contained in:
+93
-1
@@ -769,6 +769,31 @@ body[data-page=settings] .page-head{align-items:flex-end}
|
||||
}
|
||||
.student-card__sparks{position:absolute;top:15px;right:16px;width:104px;color:#E1ECFB;pointer-events:none}
|
||||
.student-card__name{margin:0 0 8px;font-size:20px;font-weight:750;line-height:1.25;letter-spacing:-.1px;color:var(--sc-text);overflow-wrap:break-word}
|
||||
.student-card__name[hidden]{display:none}
|
||||
.student-card__media[hidden]{display:none}
|
||||
.student-card__lastname,.student-card__firstname{display:inline;overflow-wrap:break-word}
|
||||
.student-card__lastname:empty,.student-card__firstname:empty{display:none}
|
||||
.student-card__text[hidden]{display:none}
|
||||
.student-card__meta{display:flex;flex-direction:column;gap:10px;margin-top:14px}
|
||||
.student-card__meta:empty{display:none}
|
||||
.student-card__meta-val{font-size:14px;line-height:1.5;color:var(--sc-text-secondary);overflow-wrap:break-word;white-space:pre-wrap}
|
||||
.student-card__meta-files{display:flex;flex-wrap:wrap;gap:6px}
|
||||
.student-card__meta-files a{
|
||||
display:inline-flex;
|
||||
align-items:center;
|
||||
max-width:100%;
|
||||
padding:5px 11px;
|
||||
border-radius:999px;
|
||||
background:var(--sc-primary-soft);
|
||||
color:#245FB4;
|
||||
font-size:13px;
|
||||
font-weight:600;
|
||||
text-decoration:none;
|
||||
overflow:hidden;
|
||||
text-overflow:ellipsis;
|
||||
white-space:nowrap;
|
||||
}
|
||||
.student-card__meta-files a:hover{background:#D7E8FF}
|
||||
.student-card__text{margin:0;font-size:15px;line-height:1.6;color:var(--sc-text-secondary);white-space:pre-wrap;overflow-wrap:break-word}
|
||||
.student-card__text:empty{display:none}
|
||||
.student-card__smiley{position:absolute;right:24px;bottom:var(--sc-smiley-bottom);width:var(--sc-smiley-size);height:var(--sc-smiley-size);pointer-events:none}
|
||||
@@ -797,12 +822,79 @@ body[data-page=settings] .page-head{align-items:flex-end}
|
||||
}
|
||||
.student-card__badge--time{background:rgba(23,59,120,.94)}
|
||||
.student-card__badge--tool{background:var(--sc-primary);box-shadow:0 4px 12px rgba(52,120,246,.28)}
|
||||
.student-card__badge--tool[hidden]{display:none}
|
||||
.student-card__badge[hidden]{display:none}
|
||||
.student-card__badge > span{overflow:hidden;text-overflow:ellipsis}
|
||||
.student-card__icon{display:block;flex:none}
|
||||
.student-card__icon--badge{width:17px;height:17px}
|
||||
.student-card__icon--ps{width:19px;height:19px}
|
||||
.student-card :focus-visible{outline:2px solid var(--sc-primary);outline-offset:2px;border-radius:6px}
|
||||
|
||||
/* --- Настройка полей карточки отчёта (журнал) --- */
|
||||
.report-fields{
|
||||
position:fixed;
|
||||
right:24px;
|
||||
bottom:24px;
|
||||
z-index:120;
|
||||
display:none;
|
||||
flex-direction:column;
|
||||
align-items:flex-end;
|
||||
gap:10px;
|
||||
}
|
||||
body.report-card-open .report-fields{display:flex}
|
||||
.report-fields__btn{
|
||||
display:inline-flex;
|
||||
align-items:center;
|
||||
gap:9px;
|
||||
background:var(--card);
|
||||
color:var(--text);
|
||||
border:1px solid var(--border);
|
||||
border-radius:999px;
|
||||
padding:11px 18px;
|
||||
font-size:.85rem;
|
||||
font-weight:600;
|
||||
font-family:inherit;
|
||||
cursor:pointer;
|
||||
box-shadow:0 8px 24px rgba(0,0,0,.16);
|
||||
white-space:nowrap;
|
||||
-webkit-tap-highlight-color:transparent;
|
||||
}
|
||||
.report-fields__btn:hover{border-color:var(--accent);color:var(--accent)}
|
||||
.report-fields__btn svg{width:17px;height:17px;display:block;flex:none}
|
||||
.report-fields__panel{
|
||||
display:none;
|
||||
width:min(280px,calc(100vw - 32px));
|
||||
background:var(--card);
|
||||
border:1px solid var(--border);
|
||||
border-radius:14px;
|
||||
box-shadow:0 18px 40px rgba(0,0,0,.2);
|
||||
padding:14px 16px;
|
||||
overflow:hidden;
|
||||
}
|
||||
.report-fields:hover .report-fields__panel,
|
||||
.report-fields.open .report-fields__panel{display:block}
|
||||
.report-fields__head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
|
||||
.report-fields__title{font-size:.82rem;font-weight:700}
|
||||
.report-fields__actions{display:flex;gap:10px}
|
||||
.report-fields__link{background:none;border:none;color:var(--accent);cursor:pointer;font-size:.78rem;font-weight:600;padding:0;font-family:inherit}
|
||||
.report-fields__link:hover{text-decoration:underline}
|
||||
.report-fields__list{display:flex;flex-direction:column;gap:2px;max-height:min(56vh,420px);overflow:auto}
|
||||
.report-fields__item{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
gap:10px;
|
||||
padding:7px 8px;
|
||||
border-radius:8px;
|
||||
cursor:pointer;
|
||||
font-size:.85rem;
|
||||
user-select:none;
|
||||
}
|
||||
.report-fields__item:hover{background:var(--bg)}
|
||||
.report-fields__item input{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;flex:none;margin:0}
|
||||
.report-fields__item span{overflow:hidden;text-overflow:ellipsis}
|
||||
@media(max-width:640px){
|
||||
.report-fields{right:16px;bottom:16px}
|
||||
.report-fields__btn{padding:10px 14px}
|
||||
}
|
||||
.journal-card .foot .edit svg,.journal-card .foot .del svg,.card .edit svg,.card .del svg{width:16px;height:16px;display:block}
|
||||
@media(max-width:420px){
|
||||
.report-overlay{padding:16px 12px}
|
||||
|
||||
Reference in New Issue
Block a user