feat(share): group entries by date on public /s/<token> page
This commit is contained in:
+21
-2
@@ -239,7 +239,15 @@ function renderShare(data, password) {
|
||||
const isAnonymized = !data.show_student_names;
|
||||
const showStudentMessage = !!data.show_student_message;
|
||||
const showEntryDate = !!data.show_entry_date;
|
||||
grid.innerHTML = data.entries.map(e => {
|
||||
const dayKey = e => {
|
||||
const d = new Date(e.created_at);
|
||||
return `${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,'0')}-${String(d.getDate()).padStart(2,'0')}`;
|
||||
};
|
||||
const dayLabel = k => {
|
||||
const [y,m,d] = k.split('-').map(Number);
|
||||
return new Date(y, m-1, d).toLocaleDateString('ru-RU', { day:'numeric', month:'long', year:'numeric' });
|
||||
};
|
||||
const cardHTML = e => {
|
||||
const body = [
|
||||
!isAnonymized ? `<div class="name">${esc(e.student_name)}</div>` : '',
|
||||
!isAnonymized && e.group_name ? `<div><span class="group">${esc(e.group_name)}</span></div>` : '',
|
||||
@@ -257,7 +265,18 @@ function renderShare(data, password) {
|
||||
${showEntryDate ? `<div class="foot">${new Date(e.created_at).toLocaleString('ru',{day:'2-digit',month:'2-digit',year:'numeric',hour:'2-digit',minute:'2-digit'})}</div>` : ''}
|
||||
</div>
|
||||
`;
|
||||
}).join('');
|
||||
};
|
||||
const groups = [];
|
||||
let lastKey = null;
|
||||
data.entries.forEach(e => {
|
||||
const k = dayKey(e);
|
||||
if (k !== lastKey) { groups.push({ key: k, entries: [] }); lastKey = k; }
|
||||
groups[groups.length-1].entries.push(e);
|
||||
});
|
||||
grid.innerHTML = groups.map(g =>
|
||||
`<div class="date-sep"><span class="date-chip">${esc(dayLabel(g.key))}</span><span class="date-line"></span></div>` +
|
||||
g.entries.map(cardHTML).join('')
|
||||
).join('');
|
||||
}
|
||||
|
||||
document.getElementById('lightbox').addEventListener('click', () => document.getElementById('lightbox').classList.remove('open'));
|
||||
|
||||
Reference in New Issue
Block a user