master #1

Closed
admin wants to merge 19 commits from master into main
3 changed files with 4 additions and 9 deletions
Showing only changes of commit aa6677472a - Show all commits
+1 -6
View File
@@ -45,15 +45,10 @@ body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;b
.card .group{color:var(--accent);font-size:.8rem;margin-top:2px} .card .group{color:var(--accent);font-size:.8rem;margin-top:2px}
.card .desc{color:var(--muted);font-size:.85rem;margin-top:8px;line-height:1.4;white-space:pre-wrap} .card .desc{color:var(--muted);font-size:.85rem;margin-top:8px;line-height:1.4;white-space:pre-wrap}
.card .time{color:var(--muted);font-size:.75rem;margin-top:8px} .card .time{color:var(--muted);font-size:.75rem;margin-top:8px}
.entry-files{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;align-items:center} .entry-files{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.entry-files a{display:inline-flex;align-items:center;gap:4px;background:var(--bg);border:1px solid var(--border);color:var(--text);text-decoration:none;border-radius:6px;padding:4px 8px;font-size:.75rem;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} .entry-files a{display:inline-flex;align-items:center;gap:4px;background:var(--bg);border:1px solid var(--border);color:var(--text);text-decoration:none;border-radius:6px;padding:4px 8px;font-size:.75rem;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.entry-files a:hover{border-color:var(--accent);color:var(--accent)} .entry-files a:hover{border-color:var(--accent);color:var(--accent)}
.entry-files a::before{content:'📎'} .entry-files a::before{content:'📎'}
.entry-files a.f-link{background:var(--bg);border:1px solid var(--border)}
.entry-files a.f-img{padding:2px;background:var(--card);border:1px solid var(--border)}
.entry-files a.f-img::before{content:none}
.entry-files a.f-img img{display:block;width:56px;height:42px;object-fit:cover;border-radius:4px}
.entry-files a.f-img:hover{border-color:var(--accent)}
.card .del{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1.1rem;padding:4px;flex-shrink:0} .card .del{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1.1rem;padding:4px;flex-shrink:0}
.card .del:hover{color:#ef4444} .card .del:hover{color:#ef4444}
.card .edit{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1.05rem;padding:4px;flex-shrink:0} .card .edit{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1.05rem;padding:4px;flex-shrink:0}
+2 -2
View File
@@ -115,8 +115,8 @@ function filesHTML(files) {
if (!files || !files.length) return ''; if (!files || !files.length) return '';
return `<div class="entry-files">${files.map(f => return `<div class="entry-files">${files.map(f =>
isImageFile(f.name) isImageFile(f.name)
? `<a class="f-img" href="${API}/api/files/${f.token}" target="_blank" title="${esc(f.name)}"><img src="${API}/api/files/${f.token}" alt="${esc(f.name)}"></a>` ? `<a class="f-link" href="${API}/api/files/${f.token}" target="_blank" title="Открыть">${esc(f.name)}</a>`
: `<a class="f-link" href="${API}/api/files/${f.token}" download title="${esc(f.name)}"><span>${esc(f.name)}</span></a>` : `<a class="f-link" href="${API}/api/files/${f.token}" download title="Скачать">${esc(f.name)}</a>`
).join('')}</div>`; ).join('')}</div>`;
} }
+1 -1
View File
@@ -505,7 +505,7 @@ function isImageName(name) {
return /\.(jpe?g|png|gif|webp|bmp|avif|svg|ico)$/i.test(name || ''); return /\.(jpe?g|png|gif|webp|bmp|avif|svg|ico)$/i.test(name || '');
} }
app.get('/api/files/:token', requireAdmin, async (req, res) => { app.get('/api/files/:token', async (req, res) => {
const { rows } = await pool.query('SELECT path, name FROM project_files WHERE token = $1', [req.params.token]); const { rows } = await pool.query('SELECT path, name FROM project_files WHERE token = $1', [req.params.token]);
if (!rows.length) return res.status(404).json({ error: 'Not found' }); if (!rows.length) return res.status(404).json({ error: 'Not found' });
const r = rows[0]; const r = rows[0];