refactor
This commit is contained in:
343
assets/script.js
343
assets/script.js
@@ -1,67 +1,52 @@
|
||||
async function doAction(url, requestData, successMessage, failureMessage, silent = false) {
|
||||
try {
|
||||
const params = new URLSearchParams();
|
||||
|
||||
function doAccountAction(requestData, successMessage, failureMessage, silent=false) {
|
||||
return fetch('/account', {
|
||||
method: 'POST',
|
||||
body: requestData,
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
if(!silent) {
|
||||
handleResponse(data, successMessage, failureMessage);
|
||||
}
|
||||
return data; // Returning the response data for further processing
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error);
|
||||
for (const key in requestData) {
|
||||
params.append(key, requestData[key]);
|
||||
}
|
||||
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
body: params,
|
||||
});
|
||||
}
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
function handlePageResponse(data){
|
||||
if(data.Navigation){
|
||||
document.getElementById("navbar").innerHTML = data.Navigation;
|
||||
}
|
||||
if(data.Page){
|
||||
document.getElementById("pagearea").innerHTML = data.Page;
|
||||
// if(data.PageLocation){
|
||||
// history.pushState({}, "", data.PageLocation);
|
||||
// }
|
||||
if (!silent) {
|
||||
handleResponse(data, successMessage, failureMessage);
|
||||
}
|
||||
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
}
|
||||
}
|
||||
|
||||
function doPageAction(requestData){
|
||||
return fetch('/page', {
|
||||
method: 'POST',
|
||||
body: requestData,
|
||||
})
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
handlePageResponse(data);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('Error:', error);
|
||||
});
|
||||
function handlePageResponse(data) {
|
||||
const navbar = document.getElementById("navbar");
|
||||
const pageArea = document.getElementById("pagearea");
|
||||
|
||||
if (data.Navigation) {
|
||||
navbar.innerHTML = data.Navigation;
|
||||
}
|
||||
|
||||
if (data.Page) {
|
||||
pageArea.innerHTML = data.Page;
|
||||
}
|
||||
}
|
||||
|
||||
function displayList(data, element_id, delete_function=null) {
|
||||
const tableContainer = document.getElementById(element_id);
|
||||
function displayList(data, elementId, deleteFunction) {
|
||||
const tableContainer = document.getElementById(elementId);
|
||||
tableContainer.innerHTML = ""; // Clear previous content
|
||||
|
||||
const table = document.createElement("table");
|
||||
table.classList.add("list-table");
|
||||
|
||||
// Create header row
|
||||
const headerRow = table.insertRow(0);
|
||||
for (const key in data[0]) {
|
||||
const th = document.createElement("th");
|
||||
@@ -69,13 +54,12 @@ function displayList(data, element_id, delete_function=null) {
|
||||
headerRow.appendChild(th);
|
||||
}
|
||||
|
||||
if(typeof delete_function === "function") {
|
||||
if (typeof deleteFunction === "function") {
|
||||
const th = document.createElement("th");
|
||||
th.appendChild(document.createTextNode("Delete"));
|
||||
headerRow.appendChild(th);
|
||||
}
|
||||
|
||||
// Create data rows
|
||||
for (const line of data) {
|
||||
const dataRow = table.insertRow();
|
||||
for (const key in line) {
|
||||
@@ -83,14 +67,12 @@ function displayList(data, element_id, delete_function=null) {
|
||||
td.appendChild(document.createTextNode(line[key]));
|
||||
dataRow.appendChild(td);
|
||||
}
|
||||
if(typeof delete_function === "function") {
|
||||
if (typeof deleteFunction === "function") {
|
||||
const td = document.createElement("td");
|
||||
let delete_button = document.createElement('button');
|
||||
delete_button.textContent = "Delete"
|
||||
delete_button.onclick = function (){
|
||||
delete_function(line.ID);
|
||||
}
|
||||
td.appendChild(delete_button);
|
||||
const deleteButton = document.createElement('button');
|
||||
deleteButton.textContent = "Delete";
|
||||
deleteButton.onclick = () => deleteFunction(line.ID);
|
||||
td.appendChild(deleteButton);
|
||||
dataRow.appendChild(td);
|
||||
}
|
||||
}
|
||||
@@ -98,85 +80,45 @@ function displayList(data, element_id, delete_function=null) {
|
||||
tableContainer.appendChild(table);
|
||||
}
|
||||
|
||||
function handleResponse(data, SuccessMessage, failureMessage) {
|
||||
const StatusMessageElement = document.getElementById("StatusMessage");
|
||||
async function doPageAction(requestData, wantsReturn = false) {
|
||||
try {
|
||||
const response = await fetch('/page', {
|
||||
method: 'POST',
|
||||
body: new URLSearchParams(requestData),
|
||||
});
|
||||
|
||||
if (data.Status === 'Success') {
|
||||
StatusMessageElement.innerText = SuccessMessage;
|
||||
} else {
|
||||
StatusMessageElement.innerText = failureMessage;
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! Status: ${response.status}`);
|
||||
}
|
||||
|
||||
if (wantsReturn) {
|
||||
return await response.json();
|
||||
} else {
|
||||
const data = await response.json();
|
||||
handlePageResponse(data);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
}
|
||||
|
||||
// Show the status message
|
||||
StatusMessageElement.style.display = "block";
|
||||
setTimeout(() => {
|
||||
// Hide the status message after 3 seconds
|
||||
StatusMessageElement.style.opacity = "0";
|
||||
setTimeout(() => {
|
||||
StatusMessageElement.style.display = "none";
|
||||
// Reset opacity for future messages
|
||||
StatusMessageElement.style.opacity = "1";
|
||||
}, 500);
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
function navigateTo(site, page){
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "getPage");
|
||||
data.append("site", site);
|
||||
data.append("page", page);
|
||||
doPageAction(data).then(() => {
|
||||
localStorage.setItem("currentSite", site);
|
||||
localStorage.setItem("currentPage", page);
|
||||
onPageLoad();
|
||||
// Expected output: "Success!"
|
||||
});
|
||||
}
|
||||
|
||||
function softReload(){
|
||||
navigateTo(localStorage.getItem("currentSite"), localStorage.getItem("currentPage"));
|
||||
}
|
||||
|
||||
function refreshNavbar(){
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "getNavigation");
|
||||
doPageAction(data);
|
||||
}
|
||||
|
||||
function logout() {
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "logout");
|
||||
|
||||
doAccountAction(data, "Logout Successful!", "Logout failed.").then(() => {
|
||||
refreshNavbar();
|
||||
navigateTo("", localStorage.getItem("defaultPage"));
|
||||
// Expected output: "Success!"
|
||||
});
|
||||
}
|
||||
|
||||
function initAjax() {
|
||||
let links = document.querySelectorAll('.navsite_link, .navpage_link');
|
||||
const links = document.querySelectorAll('.navsite_link, .navpage_link');
|
||||
|
||||
// Add click event listener to each link
|
||||
links.forEach(function (link) {
|
||||
link.addEventListener('click', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
// Get page and site information
|
||||
let site = this.dataset.site;
|
||||
let page = this.dataset.page;
|
||||
|
||||
if (site && page) {
|
||||
navigateTo(site, page);
|
||||
}
|
||||
|
||||
// You can use this information to update the URL or perform other actions
|
||||
});
|
||||
});
|
||||
onPageLoad();
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', initAjax);
|
||||
|
||||
document.addEventListener('DOMContentLoaded', initAjax);
|
||||
|
||||
function onPageLoad(){
|
||||
let currentSite = localStorage.getItem("currentSite");
|
||||
@@ -192,7 +134,41 @@ function onPageLoad(){
|
||||
}
|
||||
}
|
||||
|
||||
//Login
|
||||
function navigateTo(site, page){
|
||||
const data = {
|
||||
action: "getPage",
|
||||
site: site,
|
||||
page: page,
|
||||
};
|
||||
let pageActionStatus = doPageAction(data, true);
|
||||
if(pageActionStatus.Status === "Success") {
|
||||
localStorage.setItem("currentSite", site);
|
||||
localStorage.setItem("currentPage", page);
|
||||
onPageLoad();
|
||||
}
|
||||
}
|
||||
|
||||
function softReload(){
|
||||
navigateTo(localStorage.getItem("currentSite"), localStorage.getItem("currentPage"));
|
||||
}
|
||||
|
||||
function refreshNavbar(){
|
||||
const data = {
|
||||
action: "getNavigation",
|
||||
};
|
||||
doPageAction(data);
|
||||
}
|
||||
|
||||
function logout() {
|
||||
const data = {
|
||||
action: "logout",
|
||||
};
|
||||
|
||||
doAction('/account', data, "Logout Successful!", "Logout failed.").then(() => {
|
||||
refreshNavbar();
|
||||
navigateTo("", localStorage.getItem("defaultPage"));
|
||||
});
|
||||
}
|
||||
|
||||
function login() {
|
||||
const email = document.getElementById("login_email").value;
|
||||
@@ -202,13 +178,14 @@ function login() {
|
||||
softReload();
|
||||
}
|
||||
|
||||
function doLogin(email, password) {
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "login");
|
||||
data.append("email", email);
|
||||
data.append("password", password);
|
||||
async function doLogin(email, password) {
|
||||
const data = {
|
||||
action: "login",
|
||||
email: email,
|
||||
password: password,
|
||||
};
|
||||
|
||||
doAccountAction(data, "Login Successful!", "Login failed. Please check your credentials.");
|
||||
await doAction('/account', data, "Login Successful!", "Login failed. Please check your credentials.");
|
||||
}
|
||||
|
||||
function register() {
|
||||
@@ -218,38 +195,39 @@ function register() {
|
||||
const password = document.getElementById("register_password").value;
|
||||
const activationToken = document.getElementById("register_activationToken").value;
|
||||
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "register");
|
||||
data.append("firstname", firstName);
|
||||
data.append("lastname", lastName);
|
||||
data.append("email", email);
|
||||
data.append("password", password);
|
||||
data.append("activation_token", activationToken);
|
||||
const data = {
|
||||
action: "register",
|
||||
firstname: firstName,
|
||||
lastname: lastName,
|
||||
email: email,
|
||||
password: password,
|
||||
activation_token: activationToken,
|
||||
};
|
||||
|
||||
doRegister(data);
|
||||
}
|
||||
|
||||
function doRegister(requestData) {
|
||||
doAccountAction(requestData, "Registration Successful!", "Registration failed.");
|
||||
async function doRegister(requestData) {
|
||||
await doAction('/account', requestData, "Registration Successful!", "Registration failed.");
|
||||
}
|
||||
|
||||
|
||||
//User settings start
|
||||
|
||||
function changePassword() {
|
||||
const oldPassword = document.getElementById("changeOldPassword").value;
|
||||
const newPassword = document.getElementById("changeNewPassword").value;
|
||||
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "change_password");
|
||||
data.append("old_password", oldPassword);
|
||||
data.append("new_password", newPassword);
|
||||
const data = {
|
||||
action: "change_password",
|
||||
old_password: oldPassword,
|
||||
new_password: newPassword,
|
||||
};
|
||||
|
||||
doChangePassword(data, "Password change Successful!", "Password change failed.");
|
||||
}
|
||||
|
||||
function doChangePassword(requestData, successMessage, failureMessage) {
|
||||
doAccountAction(requestData, successMessage, failureMessage);
|
||||
async function doChangePassword(requestData, successMessage, failureMessage) {
|
||||
await doAction('/account', requestData, successMessage, failureMessage);
|
||||
}
|
||||
|
||||
function updateUserProfile() {
|
||||
@@ -258,24 +236,26 @@ function updateUserProfile() {
|
||||
const nickname = document.getElementById("updateNickname").value;
|
||||
const minecraftNick = document.getElementById("updateMinecraftNick").value;
|
||||
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "update_user_profile");
|
||||
data.append("first_name", firstName);
|
||||
data.append("last_name", lastName);
|
||||
data.append("nickname", nickname);
|
||||
data.append("minecraft_nick", minecraftNick);
|
||||
const data = {
|
||||
action: "update_user_profile",
|
||||
first_name: firstName,
|
||||
last_name: lastName,
|
||||
nickname: nickname,
|
||||
minecraft_nick: minecraftNick,
|
||||
};
|
||||
|
||||
doAccountAction(data, "Profile update Successful!", "Profile update failed.");
|
||||
doAction('/account', data, "Profile update Successful!", "Profile update failed.");
|
||||
}
|
||||
|
||||
function updateEmail() {
|
||||
const newEmail = document.getElementById("updateNewEmail").value;
|
||||
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "update_user_email");
|
||||
data.append("email", newEmail);
|
||||
const data = {
|
||||
action: "update_user_email",
|
||||
email: newEmail,
|
||||
};
|
||||
|
||||
doAccountAction(data, "Email update Successful!", "Email update failed.");
|
||||
doAction('/account', data, "Email update Successful!", "Email update failed.");
|
||||
}
|
||||
|
||||
function populateUserInfoFields(userData) {
|
||||
@@ -286,11 +266,12 @@ function populateUserInfoFields(userData) {
|
||||
document.getElementById("updateNewEmail").value = userData.Email || "";
|
||||
}
|
||||
|
||||
async function getUserInfo() {
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "get_user_info");
|
||||
function getUserInfo() {
|
||||
const data = {
|
||||
action: "get_user_info",
|
||||
};
|
||||
|
||||
const result = await doAccountAction(data, "User info retrieved Successfully!", "User info retrieval failed.", true);
|
||||
const result = doAction('/account', data, "User info retrieved Successfully!", "User info retrieval failed.", true);
|
||||
|
||||
if (result && result.Status === "Success") {
|
||||
populateUserInfoFields(result.UserInfo);
|
||||
@@ -301,56 +282,58 @@ async function getUserInfo() {
|
||||
|
||||
//Admin settings start
|
||||
|
||||
async function addActivationCodes() {
|
||||
function addActivationCodes() {
|
||||
const count = document.getElementById("activationCodeCount").value;
|
||||
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "add_activation_codes");
|
||||
data.append("count", count);
|
||||
const data = {
|
||||
action: "add_activation_codes",
|
||||
count: count,
|
||||
};
|
||||
|
||||
const result = await doAccountAction(data, "Activation codes added Successfully!", "Activation codes addition failed.");
|
||||
const result = doAction('/account', data, "Activation codes added Successfully!", "Activation codes addition failed.");
|
||||
|
||||
displayList(result.ActivationCodes, "codeListTable", deleteActivationCode);
|
||||
}
|
||||
|
||||
async function listUsers() {
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "list_users");
|
||||
function listUsers() {
|
||||
const data = {
|
||||
action: "list_users",
|
||||
};
|
||||
|
||||
const result = await doAccountAction(data, "User list retrieved Successfully!", "User list retrieval failed.");
|
||||
const result = doAction('/account', data, "User list retrieved Successfully!", "User list retrieval failed.");
|
||||
|
||||
if (result && result.Status === "Success") {
|
||||
displayList(result.Users, "userListTable", deleteUser);
|
||||
}
|
||||
}
|
||||
|
||||
function listActivationCodes() {
|
||||
const data = {
|
||||
action: "list_activation_codes",
|
||||
};
|
||||
|
||||
async function listActivationCodes() {
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "list_activation_codes");
|
||||
|
||||
const result = await doAccountAction(data, "Activation code list retrieved Successfully!", "Activation code list retrieval failed.");
|
||||
const result = doAction('/account', data, "Activation code list retrieved Successfully!", "Activation code list retrieval failed.");
|
||||
|
||||
displayList(result.ActivationCodes, "codeListTable", deleteActivationCode);
|
||||
}
|
||||
|
||||
function deleteUser(userId) {
|
||||
const data = {
|
||||
action: "delete_user",
|
||||
user_id: userId,
|
||||
};
|
||||
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "delete_user");
|
||||
data.append("user_id", userId);
|
||||
|
||||
doAccountAction(data, "User deleted Successfully!", "User deletion failed.");
|
||||
doAction('/account', data, "User deleted Successfully!", "User deletion failed.");
|
||||
listUsers();
|
||||
}
|
||||
|
||||
function deleteActivationCode(activationCode) {
|
||||
const data = {
|
||||
action: "delete_activation_code",
|
||||
activation_code: activationCode,
|
||||
};
|
||||
|
||||
const data = new URLSearchParams();
|
||||
data.append("action", "delete_activation_code");
|
||||
data.append("activation_code", activationCode);
|
||||
|
||||
doAccountAction(data, "Activation code deleted Successfully!", "Activation code deletion failed.");
|
||||
doAction('/account', data, "Activation code deleted Successfully!", "Activation code deletion failed.");
|
||||
listActivationCodes();
|
||||
}
|
||||
//Admin settings end
|
||||
|
Reference in New Issue
Block a user