/** * 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); }