diff options
author | Evgeny Zinoviev <me@ch1p.io> | 2023-05-11 04:18:08 +0300 |
---|---|---|
committer | Evgeny Zinoviev <me@ch1p.io> | 2023-05-11 04:18:12 +0300 |
commit | 0aba139aeff8ff80757c5d36502413299a0b449e (patch) | |
tree | 2b8e760ff14d4691783eb7c7d341f093199aab82 /platformio/relayctl/static/app.js | |
parent | 586d84b0c0a8b4dc1b5057733892b754397234ec (diff) |
mqtt, esp: add new esp8266-based device
Diffstat (limited to 'platformio/relayctl/static/app.js')
-rw-r--r-- | platformio/relayctl/static/app.js | 246 |
1 files changed, 0 insertions, 246 deletions
diff --git a/platformio/relayctl/static/app.js b/platformio/relayctl/static/app.js deleted file mode 100644 index 2446541..0000000 --- a/platformio/relayctl/static/app.js +++ /dev/null @@ -1,246 +0,0 @@ -function isObject(o) { - return Object.prototype.toString.call(o) === '[object Object]'; -} - -function ge(id) { - return document.getElementById(id) -} - -function hide(el) { - el.style.display = 'none' -} - -function cancelEvent(evt) { - if (evt.preventDefault) evt.preventDefault(); - if (evt.stopPropagation) evt.stopPropagation(); - - evt.cancelBubble = true; - evt.returnValue = false; - - return false; -} - -function errorText(e) { - return e instanceof Error ? e.message : e+'' -} - -(function() { - function request(method, url, data, callback) { - data = data || null; - - if (typeof callback != 'function') { - throw new Error('callback must be a function'); - } - - if (!url) - throw new Error('no url specified'); - - switch (method) { - case 'GET': - if (isObject(data)) { - for (var k in data) { - if (data.hasOwnProperty(k)) - url += (url.indexOf('?') === -1 ? '?' : '&')+encodeURIComponent(k)+'='+encodeURIComponent(data[k]) - } - } - break; - - case 'POST': - if (isObject(data)) { - var sdata = []; - for (var k in data) { - if (data.hasOwnProperty(k)) - sdata.push(encodeURIComponent(k)+'='+encodeURIComponent(data[k])); - } - data = sdata.join('&'); - } - break; - } - - var xhr = new XMLHttpRequest(); - xhr.open(method, url); - - if (method === 'POST') - xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - - xhr.onreadystatechange = function() { - if (xhr.readyState === 4) { - if ('status' in xhr && !/^2|1223/.test(xhr.status)) - throw new Error('http code '+xhr.status) - callback(null, JSON.parse(xhr.responseText)); - } - }; - xhr.onerror = function(e) { - callback(e, null); - }; - - xhr.send(method === 'GET' ? null : data); - return xhr; - } - - window.ajax = { - get: request.bind(request, 'GET'), - post: request.bind(request, 'POST') - } -})(); - - -function lock(el) { - el.setAttribute('disabled', 'disabled'); -} - -function unlock(el) { - el.removeAttribute('disabled'); -} - -function initNetworkSettings() { - function setupField(el, value) { - if (value !== null) - el.value = value; - unlock(el); - } - - var doneRequestsCount = 0; - function onRequestDone() { - doneRequestsCount++; - if (doneRequestsCount === 2) { - hide(ge('loading_label')) - } - } - - var form = document.forms.network_settings; - form.addEventListener('submit', function(e) { - if (!form.hid.value.trim()) { - alert('Введите home id'); - return cancelEvent(e); - } - - if (form.psk.value.length < 8) { - alert('Неверный пароль (минимальная длина - 8 символов)'); - return cancelEvent(e); - } - - if (form.ssid.selectedIndex === -1) { - alert('Не выбрана точка доступа'); - return cancelEvent(e); - } - - lock(form.submit) - }) - form.show_psk.addEventListener('change', function(e) { - form.psk.setAttribute('type', e.target.checked ? 'text' : 'password'); - }); - form.ssid.addEventListener('change', function(e) { - var i = e.target.selectedIndex; - if (i !== -1) { - var opt = e.target.options[i]; - if (opt) - form.psk.value = ''; - } - }); - - ajax.get('/status', {}, function(error, response) { - try { - if (error) - throw error; - - setupField(form.hid, response.home_id || null); - setupField(form.psk, null); - setupField(form.submit, null); - - onRequestDone(); - } catch (error) { - alert(errorText(error)); - } - }); - - ajax.get('/scan', {}, function(error, response) { - try { - if (error) - throw error; - - form.ssid.innerHTML = ''; - for (var i = 0; i < response.list.length; i++) { - var ssid = response.list[i][0]; - var rssi = response.list[i][1]; - form.ssid.append(new Option(ssid + ' (' + rssi + ' dBm)', ssid)); - } - unlock(form.ssid); - - onRequestDone(); - } catch (error) { - alert(errorText(error)); - } - }); -} - -function initUpdateForm() { - var form = document.forms.update_settings; - form.addEventListener('submit', function(e) { - cancelEvent(e); - if (!form.file.files.length) { - alert('Файл обновления не выбран'); - return false; - } - - lock(form.submit); - - var xhr = new XMLHttpRequest(); - var fd = new FormData(); - fd.append('file', form.file.files[0]); - - xhr.upload.addEventListener('progress', function (e) { - var total = form.file.files[0].size; - var progress; - if (e.loaded < total) { - progress = Math.round(e.loaded / total * 100).toFixed(2); - } else { - progress = 100; - } - form.submit.innerHTML = progress + '%'; - }); - xhr.onreadystatechange = function() { - var errorMessage = 'Ошибка обновления'; - var successMessage = 'Обновление завершено, устройство перезагружается'; - if (xhr.readyState === 4) { - try { - var response = JSON.parse(xhr.responseText); - if (response.result === 1) { - alert(successMessage); - } else { - alert(errorMessage); - } - } catch (e) { - alert(successMessage); - } - } - }; - xhr.onerror = function(e) { - alert(errorText(e)); - }; - - xhr.open('POST', e.target.action); - xhr.send(fd); - - return false; - }); - form.file.addEventListener('change', function(e) { - if (e.target.files.length) { - var reader = new FileReader(); - reader.onload = function() { - var hash = window.md5(reader.result); - form.setAttribute('action', '/update?md5='+hash); - unlock(form.submit); - }; - reader.onerror = function() { - alert('Ошибка чтения файла'); - }; - reader.readAsBinaryString(e.target.files[0]); - } - }); -} - -window.initApp = function() { - initNetworkSettings(); - initUpdateForm(); -}
\ No newline at end of file |