show project files in share page cards with image preview and file download
This commit is contained in:
@@ -26,6 +26,10 @@ body{font-family:'Segoe UI',system-ui,-apple-system,Roboto,sans-serif;background
|
||||
.card .name{font-size:1.02rem;font-weight:700;color:var(--dark);letter-spacing:-.01em}
|
||||
.card .group{display:inline-block;background:var(--yellow);color:var(--dark);font-size:.72rem;font-weight:700;padding:4px 11px;border-radius:999px;align-self:flex-start}
|
||||
.card .desc{font-size:.9rem;line-height:1.45;color:#4a4f5a;white-space:pre-wrap;word-break:break-word}
|
||||
.card .files{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
|
||||
.card .files a{display:inline-flex;align-items:center;gap:4px;background:#F2F2F2;border:1px solid #E6E6E6;color:#3a3f4a;text-decoration:none;border-radius:999px;padding:5px 12px;font-size:.75rem;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:border .15s,color .15s}
|
||||
.card .files a:hover{border-color:var(--yellow);color:var(--dark)}
|
||||
.card .files a::before{content:'📎'}
|
||||
.card .foot{margin-top:auto;padding:8px 6px 2px;font-size:.78rem;color:var(--gray)}
|
||||
.empty{grid-column:1/-1;background:#fff;border-radius:var(--radius);padding:48px 24px;text-align:center;color:var(--gray);box-shadow:0 1px 3px rgba(20,30,40,.06)}
|
||||
.empty .big{font-size:2rem;margin-bottom:10px}
|
||||
@@ -52,6 +56,14 @@ body{font-family:'Segoe UI',system-ui,-apple-system,Roboto,sans-serif;background
|
||||
function esc(s){return String(s==null?'':s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"')}
|
||||
function fmt(d){return d?d.split('-').reverse().join('.'):'весь период'}
|
||||
function showImg(src){document.getElementById('lightboxImg').src=src;document.getElementById('lightbox').classList.add('open')}
|
||||
function isImageFile(name){return /\.(jpe?g|png|gif|webp|bmp|avif|svg|ico)$/i.test(name||'')}
|
||||
function filesHTML(files){
|
||||
if(!files||!files.length)return '';
|
||||
return `<div class="files">${files.map(f=>isImageFile(f.name)
|
||||
?`<a href="/api/files/${f.token}" target="_blank" title="Открыть">${esc(f.name)}</a>`
|
||||
:`<a href="/api/files/${f.token}" download title="Скачать">${esc(f.name)}</a>`
|
||||
).join('')}</div>`;
|
||||
}
|
||||
|
||||
(async()=>{
|
||||
const token = location.pathname.split('/').filter(Boolean).pop() || '';
|
||||
@@ -83,6 +95,7 @@ function showImg(src){document.getElementById('lightboxImg').src=src;document.ge
|
||||
<div class="name">${esc(e.student_name)}</div>
|
||||
<div>${e.group_name ? `<span class="group">${esc(e.group_name)}</span>` : ''}</div>
|
||||
<div class="desc">${esc(e.description)}</div>
|
||||
${filesHTML(e.files)}
|
||||
</div>
|
||||
<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>
|
||||
|
||||
Reference in New Issue
Block a user