From ce6998bd6e484543bc32f45345fd6ccbd7f03fc6 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Mon, 7 Nov 2022 08:08:50 +0200 Subject: [PATCH] make shadowbanned, banning, chudding from the userpage work without refreshing the page --- files/assets/js/core.js | 50 ++++++++++++++++++++++++ files/assets/js/userpage_v.js | 40 ++----------------- files/routes/admin.py | 8 ++-- files/templates/userpage_admintools.html | 11 +++--- 4 files changed, 62 insertions(+), 47 deletions(-) diff --git a/files/assets/js/core.js b/files/assets/js/core.js index 0b4904d75..57d5b470f 100644 --- a/files/assets/js/core.js +++ b/files/assets/js/core.js @@ -369,3 +369,53 @@ function prepare_to_pause(audio) { }); } } + +function sendFormXHR(e, extraActionsOnSuccess) { + const form = e.target; + const xhr = new XMLHttpRequest(); + e.preventDefault(); + + formData = new FormData(form); + + formData.append("formkey", formkey()); + actionPath = form.getAttribute("action"); + + xhr.open("POST", actionPath); + xhr.setRequestHeader('xhr', 'xhr'); + + xhr.onload = function() { + if (xhr.status >= 200 && xhr.status < 300) { + let data = JSON.parse(xhr.response); + showToast(true, getMessageFromJsonData(true, data)); + if (extraActionsOnSuccess) extraActionsOnSuccess(xhr); + return true + } else { + document.getElementById('toast-post-error-text').innerText = "Error, please try again later." + try { + let data=JSON.parse(xhr.response); + var myToast = bootstrap.Toast.getOrCreateInstance(document.getElementById('toast-post-error')); + myToast.show(); + document.getElementById('toast-post-error-text').innerText = data["error"]; + if (data && data["details"]) document.getElementById('toast-post-error-text').innerText = data["details"]; + } catch(e) { + var myToast = bootstrap.Toast.getOrCreateInstance(document.getElementById('toast-post-success')); + myToast.hide(); + var myToast = bootstrap.Toast.getOrCreateInstance(document.getElementById('toast-post-error')); + myToast.show(); + } + } + }; + + xhr.send(formData); + + return false +} + +function sendFormXHRSwitch(t, e) { + sendFormXHR(e, + () => { + t.previousElementSibling.classList.remove('d-none'); + t.classList.add('d-none'); + } + ) +} diff --git a/files/assets/js/userpage_v.js b/files/assets/js/userpage_v.js index 11172db87..532aeab0d 100644 --- a/files/assets/js/userpage_v.js +++ b/files/assets/js/userpage_v.js @@ -80,44 +80,10 @@ function sendMessage(e) { document.getElementById('message-mobile').classList.add('d-none'); document.getElementById('message-preview').classList.add('d-none'); document.getElementById('message-preview-mobile').classList.add('d-none'); - - const form = e.target; - const xhr = new XMLHttpRequest(); - e.preventDefault(); - - formData = new FormData(form); - - formData.append("formkey", formkey()); - actionPath = form.getAttribute("action"); - - xhr.open("POST", actionPath); - xhr.setRequestHeader('xhr', 'xhr'); - - xhr.onload = function() { - if (xhr.status >= 200 && xhr.status < 300) { - let data = JSON.parse(xhr.response); - showToast(true, getMessageFromJsonData(true, data)); + sendFormXHR(e, + () => { document.getElementById('input-message').value = '' document.getElementById('input-message-mobile').value = '' - return true - } else { - document.getElementById('toast-post-error-text').innerText = "Error, please try again later." - try { - let data=JSON.parse(xhr.response); - var myToast = bootstrap.Toast.getOrCreateInstance(document.getElementById('toast-post-error')); - myToast.show(); - document.getElementById('toast-post-error-text').innerText = data["error"]; - if (data && data["details"]) document.getElementById('toast-post-error-text').innerText = data["details"]; - } catch(e) { - var myToast = bootstrap.Toast.getOrCreateInstance(document.getElementById('toast-post-success')); - myToast.hide(); - var myToast = bootstrap.Toast.getOrCreateInstance(document.getElementById('toast-post-error')); - myToast.show(); - } } - }; - - xhr.send(formData); - - return false + ) } diff --git a/files/routes/admin.py b/files/routes/admin.py index 799d29eeb..9a150beae 100644 --- a/files/routes/admin.py +++ b/files/routes/admin.py @@ -863,7 +863,7 @@ def shadowban(user_id, v): cache.delete_memoized(frontlist) - return redirect(user.url) + return {"message": f"@{user.username} has been shadowbanned!"} @app.post("/unshadowban/") @limiter.limit("1/second;30/minute;200/hour;1000/day") @@ -992,8 +992,7 @@ def ban_user(user_id, v): comment.bannedfor = f'{duration} by @{v.username}' g.db.add(comment) - if 'redir' in request.values: return redirect(user.url) - else: return {"message": f"@{user.username} has been banned!"} + return {"message": f"@{user.username} has been banned!"} @app.post("/agendaposter/") @@ -1058,8 +1057,7 @@ def agendaposter(user_id, v): comment.chuddedfor = f'{duration} by @{v.username}' g.db.add(comment) - if 'redir' in request.values: return redirect(user.url) - else: return {"message": f"@{user.username} has been chudded!"} + return {"message": f"@{user.username} has been chudded!"} @app.post("/unban_user/") diff --git a/files/templates/userpage_admintools.html b/files/templates/userpage_admintools.html index ce74cb4ff..6c493b7b4 100644 --- a/files/templates/userpage_admintools.html +++ b/files/templates/userpage_admintools.html @@ -44,7 +44,7 @@ {% if v.admin_level >= PERMS['USER_BAN'] %} -
+ @@ -57,9 +57,9 @@
{% endif %} {% if v.admin_level >= PERMS['USER_SHADOWBAN'] %} - + -
+
@@ -70,13 +70,14 @@ {% endif %} {% if v.admin_level >= PERMS['USER_AGENDAPOSTER'] %} -
+ + +
- {% endif %}