162 lines
3.0 KiB
JavaScript
162 lines
3.0 KiB
JavaScript
|
|
/**
|
|
* Time in seconds between every request.
|
|
*/
|
|
var INTERVAL = 15;
|
|
|
|
var requestInterval = INTERVAL;
|
|
var failedRequests = 0;
|
|
var timeoutId = null;
|
|
var request = null;
|
|
var myText;
|
|
var myStatus;
|
|
var myError;
|
|
|
|
function onBodyLoad ()
|
|
{
|
|
setTimeout (setText, 1000);
|
|
}
|
|
|
|
function onSettingsClick ()
|
|
{
|
|
var deviceId = localStorage.getItem ('hederaDeviceId');
|
|
|
|
if (deviceId == null)
|
|
deviceId = '';
|
|
|
|
deviceId = prompt ('Enter the device identifier', deviceId);
|
|
|
|
if (deviceId == null)
|
|
return;
|
|
|
|
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;
|
|
}
|
|
|
|
setText ();
|
|
}
|
|
|
|
function setText ()
|
|
{
|
|
display (null, null, null);
|
|
updateText ();
|
|
}
|
|
|
|
function updateText ()
|
|
{
|
|
var deviceId = localStorage.getItem ('hederaDeviceId');
|
|
|
|
if (!deviceId)
|
|
{
|
|
display (null, null, 'Device id not set');
|
|
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 data = JSON.parse (request.responseText).data;
|
|
display (data.displayText, data.status, null);
|
|
requestInterval = INTERVAL;
|
|
failedRequests = 0;
|
|
break;
|
|
case 400:
|
|
var json = JSON.parse (request.responseText);
|
|
throw new Error (json.data.message);
|
|
case 0:
|
|
throw new Error ('Connection lost');
|
|
default:
|
|
throw new Error ('HTTP '+ request.status +': '+ request.statusText);
|
|
}
|
|
}
|
|
catch (e)
|
|
{
|
|
display (myText, myStatus, e.message);
|
|
console.error (e.message);
|
|
failedRequests++;
|
|
|
|
if (failedRequests > 10 && requestInterval < 60)
|
|
{
|
|
requestInterval += parseInt (Math.random() * INTERVAL) + 1;
|
|
console.warn ('Request interval increased to %d seconds.', requestInterval);
|
|
}
|
|
}
|
|
|
|
timeoutId = setTimeout (updateText, requestInterval * 1000);
|
|
request = null;
|
|
}
|
|
|
|
function display (text, status, error)
|
|
{
|
|
if (text === myText && status === myStatus && error === myError)
|
|
return;
|
|
|
|
var bgColor;
|
|
var body = document.body;
|
|
|
|
if (error)
|
|
{
|
|
text = text ? text : 'Er';
|
|
$('error').textContent = error;
|
|
$('error').style.display = 'block';
|
|
bgColor = 'red';
|
|
}
|
|
else
|
|
{
|
|
$('error').textContent = '';
|
|
$('error').style.display = 'none';
|
|
bgColor = 'green';
|
|
}
|
|
|
|
$('text').textContent = text;
|
|
body.className = status ? status : '';
|
|
|
|
body.addEventListener ('transitionend', onTransitionEnd);
|
|
body.style.backgroundColor = bgColor;
|
|
|
|
myText = text;
|
|
myStatus = status;
|
|
myError = error;
|
|
}
|
|
|
|
function onTransitionEnd ()
|
|
{
|
|
var body = document.body;
|
|
body.removeEventListener ('transitionend', onTransitionEnd);
|
|
body.style.backgroundColor = '';
|
|
}
|
|
|
|
function $ (elementId)
|
|
{
|
|
return document.getElementById (elementId);
|
|
}
|