more possible fixes for uploading
This commit is contained in:
@@ -161,17 +161,30 @@ export default (router, tpl) => {
|
|||||||
}).end();
|
}).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`
|
const _posts = await db`
|
||||||
select id, mime, username, dest
|
select id, mime, username, dest
|
||||||
from "items"
|
from "items"
|
||||||
where
|
where
|
||||||
active = 'false'
|
active = 'false'
|
||||||
order by id desc
|
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) {
|
if (_posts.length === 0) {
|
||||||
return res.reply({
|
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({
|
res.reply({
|
||||||
body: tpl.render('admin/approve', {
|
body: tpl.render('admin/approve', {
|
||||||
posts,
|
posts,
|
||||||
|
page,
|
||||||
|
pages,
|
||||||
tmp: null
|
tmp: null
|
||||||
}, req)
|
}, req)
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -26,7 +26,8 @@
|
|||||||
<td>{{ post.mime }}</td>
|
<td>{{ post.mime }}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="/admin/approve/?id={{ post.id }}" class="badge badge-success">Approve</a>
|
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endeach
|
@endeach
|
||||||
@@ -38,7 +39,46 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<br>
|
<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">« Prev</a>
|
||||||
|
@endif
|
||||||
|
<span>Page {{ page }} of {{ pages }}</span>
|
||||||
|
@if(page < pages) <a href="/admin/approve?page={{ page + 1 }}" class="badge badge-secondary">Next
|
||||||
|
»</a>
|
||||||
|
@endif
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
@endif
|
||||||
<a href="/admin">Back to Admin</a>
|
<a href="/admin">Back to Admin</a>
|
||||||
</div>
|
</div>
|
||||||
</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)
|
@include(snippets/footer)
|
||||||
Reference in New Issue
Block a user