function addFrequencyInput(system){ // Create new input var icon = document.createElement('i'); icon.classList.add('bi'); icon.classList.add('bi-x-circle'); icon.classList.add('text-black'); var remove = document.createElement('a'); remove.classList.add('align-middle'); remove.classList.add('float-left'); remove.href = '#' remove.appendChild(icon); var childColRemoveIcon = document.createElement('div'); childColRemoveIcon.classList.add('col-2'); childColRemoveIcon.appendChild(remove); var input = document.createElement('input'); input.classList.add('form-control'); input.id = 'nodeFreq'; input.type = 'text'; var childColInput = document.createElement('div'); childColInput.classList.add('col-10'); childColInput.appendChild(input); var childRow = document.createElement('div'); childRow.classList.add("row"); childRow.classList.add("px-1"); childRow.appendChild(childColInput); childRow.appendChild(childColRemoveIcon); var colParent = document.createElement('div'); colParent.classList.add("col-md-6"); colParent.classList.add("mb-1"); colParent.appendChild(childRow); document.getElementById(`frequencyRow_${system.replaceAll(" ", "_")}`).appendChild(colParent); } function createToast(notificationMessage){ const toastTitle = document.createElement('strong'); toastTitle.classList.add('me-auto'); toastTitle.appendChild(document.createTextNode("Server Notification")); const toastTime = document.createElement('small'); toastTime.appendChild(document.createTextNode(new Date(Date.now()).toLocaleString())); const toastClose = document.createElement('button'); toastClose.type = 'button'; toastClose.classList.add('btn-close'); toastClose.ariaLabel = 'Close'; toastClose.setAttribute('data-bs-dismiss', 'toast'); const toastHeader = document.createElement('div'); toastHeader.classList.add('toast-header'); toastHeader.appendChild(toastTitle); toastHeader.appendChild(toastTime); toastHeader.appendChild(toastClose); const toastMessage = document.createElement('p'); toastMessage.classList.add("px-2"); toastMessage.appendChild(document.createTextNode(notificationMessage)); const toastBody = document.createElement('div'); toastBody.classList.add('toast-body'); toastBody.appendChild(toastMessage); const wrapperDiv = document.createElement('div'); wrapperDiv.classList.add('toast'); wrapperDiv.role ='alert'; wrapperDiv.ariaLive = 'assertive'; wrapperDiv.ariaAtomic = true; wrapperDiv.appendChild(toastHeader); wrapperDiv.appendChild(toastMessage); document.getElementById("toastZone").appendChild(wrapperDiv); $('.toast').toast('show'); } function sendNodeHeartbeat(nodeId){ const Http = new XMLHttpRequest(); const url='/nodes/'+nodeId; Http.open("GET", url); Http.send(); Http.onloadend = (e) => { console.log(Http.responseText) createToast(Http.responseText); } } function joinServer(){ const preset = document.getElementById("selectRadioPreset").value; const nodeId = document.getElementById("nodeId").value; const clientId = document.getElementById("inputDiscordClientId").value; const channelId = document.getElementById("inputDiscordChannelId").value; const reqBody = { 'preset': preset, 'nodeId': nodeId, 'clientId': clientId, 'channelId': channelId }; console.log(reqBody); const Http = new XMLHttpRequest(); const url='/admin/join'; Http.open("POST", url); Http.setRequestHeader("Content-Type", "application/json"); Http.send(JSON.stringify(reqBody)); Http.onloadend = (e) => { const responseObject = JSON.parse(Http.responseText) console.log(Http.status); console.log(responseObject); createToast(`${responseObject.name} will join shortly`); $("#joinModal").modal('toggle'); } } function leaveServer(){ const nodeId = document.getElementById("nodeId").value; const reqBody = { 'nodeId': nodeId }; const Http = new XMLHttpRequest(); const url='/admin/leave'; Http.open("POST", url); Http.setRequestHeader("Content-Type", "application/json"); Http.send(JSON.stringify(reqBody)); Http.onloadend = (e) => { const responseObject = JSON.parse(Http.responseText) console.log(Http.status); console.log(responseObject); createToast(`${responseObject} is leaving`); } }