GMTROM/REST/script.js

240 lines
9.0 KiB
JavaScript

// Initialisieren der Eingabefelder
var quantityInput = document.getElementById('quantity');
var bitsInput = document.getElementById('bits');
// Deaktivieren der Eingabefelder
quantityInput.disabled = true;
bitsInput.disabled = true;
/*------------------------------------------Init Button-----------------------------------------------*/
document.getElementById('initButton').addEventListener('click', function() {
//zurücksetzen von status und description
document.getElementById('description').innerText = '';
document.getElementById('status').innerText = '';
document.getElementById('result').innerText = '';
showLoadingSpinner('Start-up tests and system initialization in progress.');
fetch('https://172.16.78.57:5000/trng/randomNum/init')
.then(response => {
document.getElementById('status').innerText = 'Status: ' + response.status;
return response.json();
})
.then(data => {
document.getElementById('description').innerText = data.description;
console.log('Initialisierung erfolgreich');
// Deaktiviere Generate und Shutdown Buttons
//document.getElementById('generateButton').disabled = false;
document.getElementById('shutdownButton').disabled = false;
// Aktiviere Initialize Button
document.getElementById('initButton').disabled = true;
// Aktivieren der Eingabefelder
quantityInput.disabled = false;
bitsInput.disabled = false;
})
.catch(error => {
console.error('Fehler beim Initialisieren:', error);
})
.finally(() => {
hideLoadingSpinner();
});
});
/*------------------------------------------Generate Button-----------------------------------------------*/
document.getElementById('generateButton').addEventListener('click', function(event) {
// Zurücksetzen von status und description
document.getElementById('description').innerText = '';
document.getElementById('status').innerText = '';
document.getElementById('result').innerText = '';
showLoadingSpinner('Generating and testing random numbers.');
var quantity = document.getElementById('quantity').value;
var bits = document.getElementById('bits').value;
var url = 'https://172.16.78.57:5000/trng/randomNum/getRandom';
if (quantity && bits) {
url += '?quantity=' + quantity + '&numBits=' + bits;
}
fetch(url)
.then(response => {
document.getElementById('status').innerText = 'Status: ' + response.status;
return response.json();
})
.then(data => {
document.getElementById('status').innerText = 'Status: ' + data.status;
document.getElementById('description').innerText = data.description;
var resultDiv = document.getElementById('result');
resultDiv.innerHTML = ''; // Clear previous results
if (data.status !== 200) {
return;
}
if (data.status === 200) {
var table = document.createElement('table');
table.classList.add('table');
var thead = document.createElement('thead');
var tbody = document.createElement('tbody');
var trHead = document.createElement('tr');
var thNr = document.createElement('th');
var thCopy = document.createElement('th');
var thRandom = document.createElement('th');
var copyAllButton = document.createElement('button');
thNr.textContent = 'ID';
thCopy.textContent = ' ';
thRandom.textContent = 'Random Number';
trHead.appendChild(thNr);
trHead.appendChild(thCopy);
trHead.appendChild(thRandom);
thead.appendChild(trHead);
table.appendChild(thead);
var hexNumbers = JSON.parse(data.randomNumbers); // JSON-Array parsen
for (var i = 0; i < hexNumbers.length; i++) {
var tr = document.createElement('tr');
var tdNr = document.createElement('td');
var tdCopy = document.createElement('td');
var tdRandom = document.createElement('td');
var copyButton = document.createElement('button');
tdNr.textContent = (i + 1).toString();
tdRandom.textContent = hexNumbers[i];
copyButton.textContent = 'Copy';
copyButton.classList.add('copy-button');
copyButton.addEventListener('click', function() {
copyToClipboard(this.parentElement.nextElementSibling.textContent);
});
tdCopy.appendChild(copyButton);
tr.appendChild(tdNr);
tr.appendChild(tdCopy);
tr.appendChild(tdRandom);
tbody.appendChild(tr);
}
table.appendChild(tbody);
resultDiv.appendChild(table);
copyAllButton.textContent = 'Copy all';
copyAllButton.classList.add('copy-button');
copyAllButton.style.marginBottom = '5px'; // Setze den Abstand nach unten
copyAllButton.addEventListener('click', function() {
copyToClipboard(hexNumbers.join('\n'));
});
resultDiv.insertBefore(copyAllButton, table); // Füge den "Copy all" Button vor der Tabelle ein
} else {
var errorParagraph = document.createElement('p');
errorParagraph.textContent = 'Error: ' + data.message;
resultDiv.appendChild(errorParagraph);
}
console.log('Generierung erfolgreich');
})
.catch(error => {
console.error('Fehler beim Generieren:', error);
})
.finally(() => {
hideLoadingSpinner();
});
});
/*------------------------------------------Copy to Clipboard-----------------------------------------------*/
function copyToClipboard(text) {
var textArea = document.createElement('textarea');
textArea.value = text;
document.body.appendChild(textArea);
textArea.select();
document.execCommand('copy');
document.body.removeChild(textArea);
// Anzeigen eines Popups zur Bestätigung der Kopie
window.alert('The text has been copied to the clipboard!');
}
/*------------------------------------------Shutdown Button-----------------------------------------------*/
document.getElementById('shutdownButton').addEventListener('click', function() {
//zurücksetzen von status und description
document.getElementById('description').innerText = '';
document.getElementById('status').innerText = '';
//textfelder zurücksetzen
document.getElementById('quantity').value = '';
document.getElementById('bits').value = '';
//result div zurücksetzen
document.getElementById('result').innerText = '';
showLoadingSpinner('Shutting down the system.'); // Zeigt den Lade-Spinner
fetch('https://172.16.78.57:5000/trng/randomNum/shutdown')
.then(response => {
document.getElementById('status').innerText = 'Status: ' + response.status;
return response.json();
})
.then(data => {
document.getElementById('description').innerText = data.description;
console.log('Herunterfahren erfolgreich');
// Deaktiviere Generate und Shutdown Buttons
document.getElementById('generateButton').disabled = true;
document.getElementById('shutdownButton').disabled = true;
// Aktiviere Initialize Button
document.getElementById('initButton').disabled = false;
// Deaktivieren der Eingabefelder
quantityInput.disabled = true;
bitsInput.disabled = true;
})
.catch(error => {
console.error('Fehler beim Herunterfahren:', error);
})
.finally(() => {
hideLoadingSpinner(); // Blende den Lade-Spinner aus
});
});
// Überprüfungsfunktion für die Eingabefelder
function checkInputFields() {
var quantity = document.getElementById('quantity').value;
var bits = document.getElementById('bits').value;
var generateButton = document.getElementById('generateButton');
if (quantity && bits) {
generateButton.disabled = false; // Aktiviere den Button, wenn beide Eingabefelder einen Wert enthalten
} else {
generateButton.disabled = true; // Deaktiviere den Button, wenn mindestens eines der Eingabefelder leer ist
}
}
// Eventlistener für die Eingabefelder, der die Überprüfungsfunktion aufruft
document.getElementById('quantity').addEventListener('input', checkInputFields);
document.getElementById('bits').addEventListener('input', checkInputFields);
/*-----------------------------Initiale Deaktivierung von Generate und Shutdown Buttons-----------------------------*/
document.getElementById('generateButton').disabled = true;
document.getElementById('shutdownButton').disabled = true;
/*------------------------------------------Loading Spinner-----------------------------------------------*/
// Zeige den Lade-Spinner an und blockiere den Inhalt
function showLoadingSpinner(loadingText) {
document.getElementById('overlay').classList.remove('hidden');
document.getElementById('loadingSpinner').classList.remove('hidden');
document.getElementById('loadingText').innerText = loadingText;
}
// Blende den Lade-Spinner aus und entsperre den Inhalt
function hideLoadingSpinner() {
document.getElementById('overlay').classList.add('hidden');
document.getElementById('loadingSpinner').classList.add('hidden');
document.getElementById('loadingText').innerText = '';
}