fix: toggle now works — JSON response + immediate CSS flip
- /toggle-admin returns JSON {ok, adminMode} instead of redirect
- onclick: toggle CSS instantly, then fetch, then reload on ok
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ipwhitelist",
|
||||
"version": "0.5.47",
|
||||
"version": "0.5.48",
|
||||
"description": "IP WhiteList microservice for cloud provider",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
|
||||
+1
-2
@@ -176,8 +176,7 @@ function createRouter({ auth, MOCK_USERS, authLimiter }) {
|
||||
if (!canAdmin) return res.status(403).send('Forbidden');
|
||||
|
||||
req.session.adminMode = !req.session.adminMode;
|
||||
// Редирект туда же откуда пришли
|
||||
res.redirect(req.get('Referer') || '/');
|
||||
res.json({ ok: true, adminMode: req.session.adminMode });
|
||||
});
|
||||
|
||||
// GET /logout
|
||||
|
||||
+4
-5
@@ -160,12 +160,11 @@
|
||||
<!-- Кнопки правой части header: admin-ссылки + чекбокс + выход -->
|
||||
<span style="margin-left:auto;display:flex;gap:.5rem;align-items:center;">
|
||||
<% if (typeof canAdminMode !== 'undefined' && canAdminMode) { %>
|
||||
<span style="font-size:.8rem;color:var(--muted);display:flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border:1px solid var(--border);border-radius:5px;background:#fff;cursor:pointer;"
|
||||
onclick="const t=this.querySelector('input');t.checked=!t.checked;fetch('/toggle-admin',{method:'POST'}).then(()=>location.reload())">
|
||||
<span id="admin-toggle" style="font-size:.8rem;color:var(--muted);display:flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border:1px solid var(--border);border-radius:5px;background:#fff;cursor:pointer;user-select:none;"
|
||||
onclick="var bg=this.querySelector('.tg-bg'),kn=this.querySelector('.tg-knob');if(bg.style.background==='var(--blue)'||getComputedStyle(bg).background.includes('37,99,235')){bg.style.background='var(--border)';kn.style.left='2px';kn.style.right='auto'}else{bg.style.background='var(--blue)';kn.style.right='2px';kn.style.left='auto'};fetch('/toggle-admin',{method:'POST'}).then(r=>r.json()).then(d=>{if(d.ok)location.reload()})">
|
||||
<label style="cursor:pointer;">Администратор</label>
|
||||
<input type="checkbox" <%= adminMode ? 'checked' : '' %> style="display:none;">
|
||||
<span style="position:relative;width:36px;height:20px;background:<%= adminMode ? 'var(--blue)' : 'var(--border)' %>;border-radius:10px;transition:background .2s;">
|
||||
<span style="position:absolute;top:2px;<%= adminMode ? 'right:2px;' : 'left:2px;' %>width:16px;height:16px;background:#fff;border-radius:50%;transition:all .2s;"></span>
|
||||
<span class="tg-bg" style="position:relative;width:36px;height:20px;background:<%= adminMode ? 'var(--blue)' : 'var(--border)' %>;border-radius:10px;transition:background .2s;">
|
||||
<span class="tg-knob" style="position:absolute;top:2px;<%= adminMode ? 'right:2px;' : 'left:2px;' %>width:16px;height:16px;background:#fff;border-radius:50%;transition:all .2s;"></span>
|
||||
</span>
|
||||
</span>
|
||||
<% } %>
|
||||
|
||||
Reference in New Issue
Block a user