summaryrefslogtreecommitdiff
path: root/platformio/relayctl/static/app.js
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2023-05-11 04:18:08 +0300
committerEvgeny Zinoviev <me@ch1p.io>2023-05-11 04:18:12 +0300
commit0aba139aeff8ff80757c5d36502413299a0b449e (patch)
tree2b8e760ff14d4691783eb7c7d341f093199aab82 /platformio/relayctl/static/app.js
parent586d84b0c0a8b4dc1b5057733892b754397234ec (diff)
mqtt, esp: add new esp8266-based device
Diffstat (limited to 'platformio/relayctl/static/app.js')
-rw-r--r--platformio/relayctl/static/app.js246
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