Bans: unban requires inline confirmation row with yes/cancel
This commit is contained in:
@@ -49,6 +49,36 @@ function renderPage() {
|
|||||||
renderPager(document.getElementById('pager'), page, Math.max(1, Math.ceil(allBans.length / PAGE_SIZE)), p => { page = p; renderPage(); });
|
renderPager(document.getElementById('pager'), page, Math.max(1, Math.ceil(allBans.length / PAGE_SIZE)), p => { page = p; renderPage(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function askUnban(ip) {
|
||||||
|
const old = document.getElementById('unbanConfirmRow');
|
||||||
|
if (old) old.remove();
|
||||||
|
const tr = document.createElement('tr');
|
||||||
|
tr.id = 'unbanConfirmRow';
|
||||||
|
tr.innerHTML = `
|
||||||
|
<td colspan="5" style="text-align:center;padding:14px;background:rgba(239,68,68,.06)">
|
||||||
|
Разблокировать <b>${esc(ip)}</b>?
|
||||||
|
<button class="btn-primary" id="unbanYes" type="button" style="padding:8px 18px;margin-left:12px">Да, разблокировать</button>
|
||||||
|
<button type="button" class="btn-primary ghost" id="unbanNo" style="padding:8px 18px;margin-left:8px">Отмена</button>
|
||||||
|
</td>`;
|
||||||
|
tr.querySelector('#unbanYes').addEventListener('click', () => doUnban(ip));
|
||||||
|
tr.querySelector('#unbanNo').addEventListener('click', () => tr.remove());
|
||||||
|
document.getElementById('bansBody').appendChild(tr);
|
||||||
|
tr.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
|
||||||
|
}
|
||||||
|
|
||||||
|
async function doUnban(ip) {
|
||||||
|
const res = await fetch(`${API}/api/bans/${encodeURIComponent(ip)}`, { method: 'DELETE', headers: hdr() });
|
||||||
|
if (res.ok) showToast('IP разблокирован: ' + ip);
|
||||||
|
else showToast('Ошибка разблокировки');
|
||||||
|
document.getElementById('unbanConfirmRow')?.remove();
|
||||||
|
loadBans();
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('bansBody').addEventListener('click', e => {
|
||||||
|
const ip = e.target.closest('[data-unban]')?.dataset.unban;
|
||||||
|
if (ip) askUnban(ip);
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById('bansBody').addEventListener('click', async e => {
|
document.getElementById('bansBody').addEventListener('click', async e => {
|
||||||
const ip = e.target.closest('[data-unban]')?.dataset.unban;
|
const ip = e.target.closest('[data-unban]')?.dataset.unban;
|
||||||
if (!ip) return;
|
if (!ip) return;
|
||||||
|
|||||||
Reference in New Issue
Block a user