0
1
Fork 0
hedera-web-mindshore/pages/production/main.js

147 lines
2.7 KiB
JavaScript

/**
* Time in seconds between every request.
*/
var INTERVAL = 10;
var requestInterval = INTERVAL;
var failedRequests = 0;
var timeoutId = null;
var request = null;
var lastText = null;
var lastError = null;
function onBodyLoad ()
{
updateText ();
}
function onSettingsClick ()
{
var deviceId = localStorage.getItem ('hederaDeviceId');
if (deviceId == null)
deviceId = '';
deviceId = prompt ('Enter the device identifier', deviceId);
if (deviceId)
localStorage.setItem ('hederaDeviceId', deviceId);
else if (deviceId === '')
localStorage.removeItem ('hederaDeviceId');
if (timeoutId != null)
{
clearTimeout (timeoutId);
timeoutId = null;
}
if (request)
{
request.abort ();
request = null;
}
updateText ();
}
function updateText ()
{
var deviceId = localStorage.getItem ('hederaDeviceId');
if (!deviceId)
{
display ('Device id not set', true);
return;
}
var formData = new FormData ();
formData.append ('srv', 'json:misc/production');
formData.append ('deviceId', deviceId);
request = new XMLHttpRequest();
request.open ('POST', '', true);
request.onreadystatechange =
onRequestChange.bind (null, request);
request.send (formData);
}
function onRequestChange (request)
{
if (request.readyState !== 4)
return;
try {
switch (request.status)
{
case 200:
var json = JSON.parse (request.responseText);
display (json.data);
requestInterval = INTERVAL;
failedRequests = 0;
break;
case 400:
var json = JSON.parse (request.responseText);
throw new Error (json.data.message);
default:
throw new Error ('HTTP '+ request.status +': '+ request.statusText);
}
}
catch (e)
{
display (e.message, true);
console.error (e.message);
failedRequests++;
if (failedRequests > 10 && requestInterval < 60)
{
requestInterval += parseInt (Math.random() * 10) + 1;
console.warn ('Request interval increased to %d seconds.', requestInterval);
}
}
timeoutId = setTimeout (updateText, requestInterval * 1000);
request = null;
}
function display (text, error)
{
var bgColor;
if (!error)
{
$('text').textContent = text;
$('error').textContent = '';
$('error').style.display = 'none';
bgColor = 'green';
}
else
{
$('text').textContent = 'Er';
$('error').textContent = text;
$('error').style.display = 'block';
bgColor = 'red';
}
if (text != lastText || lastError != error)
{
var body = document.body;
body.addEventListener ('transitionend', onTransitionEnd);
body.style.backgroundColor = bgColor;
}
lastText = text;
lastError = error;
}
function onTransitionEnd ()
{
var body = document.body;
body.removeEventListener ('transitionend', onTransitionEnd);
body.style.backgroundColor = '';
}
function $ (elementId)
{
return document.getElementById (elementId);
}