more possible fixes for uploading

This commit is contained in:
x
2026-01-23 23:44:50 +01:00
parent a439683caf
commit 1a3514effa
2 changed files with 57 additions and 2 deletions

View File

@@ -161,17 +161,30 @@ export default (router, tpl) => {
}).end();
}
const page = +req.url.qs.page || 1;
const limit = 50;
const offset = (page - 1) * limit;
const total = (await db`select count(*) as c from "items" where active = 'false'`)[0].c;
const pages = Math.ceil(total / limit);
const _posts = await db`
select id, mime, username, dest
from "items"
where
active = 'false'
order by id desc
limit ${limit} offset ${offset}
`;
if (_posts.length === 0 && page > 1) {
// if page empty, maybe redirect to last page or page 1?
// Just render empty for now
}
if (_posts.length === 0) {
return res.reply({
body: tpl.render('admin/approve', { posts: [], tmp: null }, req)
body: tpl.render('admin/approve', { posts: [], pages: 0, page: 1, tmp: null }, req)
});
}
@@ -197,6 +210,8 @@ export default (router, tpl) => {
res.reply({
body: tpl.render('admin/approve', {
posts,
page,
pages,
tmp: null
}, req)
});

View File

@@ -26,7 +26,8 @@
<td>{{ post.mime }}</td>
<td>
<a href="/admin/approve/?id={{ post.id }}" class="badge badge-success">Approve</a>
<a href="/admin/deny/?id={{ post.id }}" class="badge badge-danger">Deny / Delete</a>
<a href="/admin/deny/?id={{ post.id }}" class="badge badge-danger btn-deny-async">Deny /
Delete</a>
</td>
</tr>
@endeach
@@ -38,7 +39,46 @@
</tbody>
</table>
<br>
@if(typeof pages !== 'undefined' && pages > 1)
<div class="pagination" style="display: flex; gap: 10px; align-items: center; justify-content: center;">
@if(page > 1)
<a href="/admin/approve?page={{ page - 1 }}" class="badge badge-secondary">&laquo; Prev</a>
@endif
<span>Page {{ page }} of {{ pages }}</span>
@if(page < pages) <a href="/admin/approve?page={{ page + 1 }}" class="badge badge-secondary">Next
&raquo;</a>
@endif
</div>
<br>
@endif
<a href="/admin">Back to Admin</a>
</div>
</div>
<script>
document.querySelectorAll('.btn-deny-async').forEach(btn => {
btn.addEventListener('click', async e => {
e.preventDefault();
if (!confirm('Permanently delete this item?')) return;
const url = btn.href;
const row = btn.closest('tr');
const originalText = btn.innerText;
btn.innerText = 'Deleting...';
try {
const res = await fetch(url);
if (res.ok) {
row.style.opacity = '0';
setTimeout(() => row.remove(), 500);
} else {
alert('Delete request failed');
btn.innerText = originalText;
}
} catch (err) {
alert('Error: ' + err);
btn.innerText = originalText;
}
});
});
</script>
@include(snippets/footer)