Javascript cleanup
This commit is contained in:
295
web/index.js
295
web/index.js
@@ -95,35 +95,11 @@
|
||||
let even = true; //first counter
|
||||
if (statusPage){
|
||||
for (let k in jsonData) {
|
||||
if (typeof (jsonData[k]) === 'object') {
|
||||
if (k.indexOf('count') == 0) {
|
||||
createCounterDisplay(statusPage, k.replace("count", "").replace(/in$/, " in").replace(/out$/, " out"), k, even);
|
||||
even = !even;
|
||||
for (let sk in jsonData[k]) {
|
||||
let key = k + "." + sk;
|
||||
if (typeof (jsonData[k][sk]) === 'object') {
|
||||
//msg details
|
||||
updateMsgDetails(key, jsonData[k][sk]);
|
||||
}
|
||||
else {
|
||||
let el = document.getElementById(key);
|
||||
if (el) el.textContent = jsonData[k][sk];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (k.indexOf("ch") == 0) {
|
||||
//channel def
|
||||
let name = k.substring(2);
|
||||
channelList[name] = jsonData[k];
|
||||
}
|
||||
}
|
||||
else {
|
||||
let el = document.getElementById(k);
|
||||
if (el) el.textContent = jsonData[k];
|
||||
forEl('.status-' + k, function (el) {
|
||||
el.textContent = jsonData[k];
|
||||
});
|
||||
}
|
||||
let el = document.getElementById(k);
|
||||
if (el) el.textContent = jsonData[k];
|
||||
forEl('.status-' + k, function (el) {
|
||||
el.textContent = jsonData[k];
|
||||
});
|
||||
}
|
||||
}
|
||||
lastUpdate = (new Date()).getTime();
|
||||
@@ -341,33 +317,6 @@
|
||||
})
|
||||
.catch(function (e) { });
|
||||
}
|
||||
function createCounterDisplay(parent, label, key, isEven) {
|
||||
if (parent.querySelector("#" + key)) {
|
||||
return;
|
||||
}
|
||||
let clazz = "row icon-row counter-row";
|
||||
if (isEven) clazz += " even";
|
||||
let row = addEl('div', clazz, parent);
|
||||
row.setAttribute("id", key);
|
||||
let icon = addEl('span', 'icon icon-more', row);
|
||||
addEl('span', 'label', row, label);
|
||||
let value = addEl('span', 'value', row, '---');
|
||||
value.setAttribute('id', key + ".sumOk");
|
||||
let display = addEl('div', clazz + " msgDetails hidden", parent);
|
||||
display.setAttribute('id', key + ".ok");
|
||||
row.addEventListener('click', function (ev) {
|
||||
let rs = display.classList.toggle('hidden');
|
||||
if (rs) {
|
||||
icon.classList.add('icon-more');
|
||||
icon.classList.remove('icon-less');
|
||||
}
|
||||
else {
|
||||
icon.classList.remove('icon-more');
|
||||
icon.classList.add('icon-less');
|
||||
}
|
||||
});
|
||||
callListeners(api.EVENTS.counterDisplayCreated,row);
|
||||
}
|
||||
function validKey(key) {
|
||||
if (!key) return;
|
||||
return key.replace(/[^a-z_:A-Z0-9-]/g, '');
|
||||
@@ -470,7 +419,6 @@
|
||||
if (!(condition instanceof Array)) condition = [condition];
|
||||
return condition;
|
||||
}
|
||||
|
||||
function conditionOk(name){
|
||||
let condition = getConditions(name);
|
||||
if (!condition) return true;
|
||||
@@ -504,97 +452,6 @@
|
||||
else row.classList.add('hidden');
|
||||
}
|
||||
let caliv = 0;
|
||||
function createCalSetInput(configItem, frame, clazz) {
|
||||
let el = addEl('input', clazz, frame);
|
||||
let cb = addEl('button', '', frame, 'C');
|
||||
//el.disabled=true;
|
||||
cb.addEventListener('click', (ev) => {
|
||||
let cs = document.getElementById("calset").cloneNode(true);
|
||||
cs.classList.remove("hidden");
|
||||
cs.querySelector(".heading").textContent = configItem.label || configItem.name;
|
||||
let vel = cs.querySelector(".val");
|
||||
if (caliv != 0) window.clearInterval(caliv);
|
||||
caliv = window.setInterval(() => {
|
||||
if (document.body.contains(cs)) {
|
||||
fetch(apiPrefix + "/api/calibrate?name=" + encodeURIComponent(configItem.name))
|
||||
.then((r) => r.text())
|
||||
.then((txt) => {
|
||||
if (txt != vel.textContent) {
|
||||
vel.textContent = txt;
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
alert(e);
|
||||
hideOverlay();
|
||||
window.clearInterval(caliv);
|
||||
})
|
||||
}
|
||||
else {
|
||||
window.clearInterval(caliv);
|
||||
}
|
||||
}, 200);
|
||||
showOverlay(cs, false, [{
|
||||
label: 'Set', click: () => {
|
||||
el.value = vel.textContent;
|
||||
let cev = new Event('change');
|
||||
el.dispatchEvent(cev);
|
||||
}
|
||||
}]);
|
||||
})
|
||||
el.setAttribute('name', configItem.name)
|
||||
return el;
|
||||
}
|
||||
function createCalValInput(configItem, frame, clazz) {
|
||||
let el = addEl('input', clazz, frame);
|
||||
let cb = addEl('button', '', frame, 'C');
|
||||
//el.disabled=true;
|
||||
cb.addEventListener('click', (ev) => {
|
||||
const sv = function (val, cfg) {
|
||||
if (configItem.eval) {
|
||||
let v = parseFloat(val);
|
||||
let c = parseFloat(cfg);
|
||||
return (eval(configItem.eval));
|
||||
}
|
||||
return v;
|
||||
};
|
||||
let cs = document.getElementById("calval").cloneNode(true);
|
||||
cs.classList.remove("hidden");
|
||||
cs.querySelector(".heading").textContent = configItem.label || configItem.name;
|
||||
let vel = cs.querySelector(".val");
|
||||
let vinp = cs.querySelector("input");
|
||||
vinp.value = el.value;
|
||||
if (caliv != 0) window.clearInterval(caliv);
|
||||
caliv = window.setInterval(() => {
|
||||
if (document.body.contains(cs)) {
|
||||
fetch(apiPrefix + "/api/calibrate?name=" + encodeURIComponent(configItem.name))
|
||||
.then((r) => r.text())
|
||||
.then((txt) => {
|
||||
txt = sv(txt, vinp.value);
|
||||
if (txt != vel.textContent) {
|
||||
vel.textContent = txt;
|
||||
}
|
||||
})
|
||||
.catch((e) => {
|
||||
alert(e);
|
||||
hideOverlay();
|
||||
window.clearInterval(caliv);
|
||||
})
|
||||
}
|
||||
else {
|
||||
window.clearInterval(caliv);
|
||||
}
|
||||
}, 200);
|
||||
showOverlay(cs, false, [{
|
||||
label: 'Set', click: () => {
|
||||
el.value = vinp.value;
|
||||
let cev = new Event('change');
|
||||
el.dispatchEvent(cev);
|
||||
}
|
||||
}]);
|
||||
})
|
||||
el.setAttribute('name', configItem.name)
|
||||
return el;
|
||||
}
|
||||
function createInput(configItem, frame, clazz) {
|
||||
let el;
|
||||
if (configItem.type === 'boolean' || configItem.type === 'list') {
|
||||
@@ -628,9 +485,6 @@
|
||||
el.setAttribute('name', configItem.name);
|
||||
return el;
|
||||
}
|
||||
if (configItem.type === 'filter') {
|
||||
return createFilterInput(configItem, frame, clazz);
|
||||
}
|
||||
el = addEl('input', clazz, frame);
|
||||
if (configItem.readOnly) el.setAttribute('disabled', true);
|
||||
el.setAttribute('name', configItem.name)
|
||||
@@ -684,54 +538,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
function createFilterInput(configItem, frame) {
|
||||
let el = addEl('div', 'filter', frame);
|
||||
let ais = createInput({
|
||||
type: 'list',
|
||||
name: configItem.name + "_ais",
|
||||
list: ['aison', 'aisoff'],
|
||||
readOnly: configItem.readOnly
|
||||
}, el);
|
||||
let mode = createInput({
|
||||
type: 'list',
|
||||
name: configItem.name + "_mode",
|
||||
list: ['whitelist', 'blacklist'],
|
||||
readOnly: configItem.readOnly
|
||||
}, el);
|
||||
let sentences = createInput({
|
||||
type: 'text',
|
||||
name: configItem.name + "_sentences",
|
||||
readOnly: configItem.readOnly
|
||||
}, el);
|
||||
let data = addEl('input', undefined, el);
|
||||
data.setAttribute('type', 'hidden');
|
||||
let changeFunction = function () {
|
||||
let cv = data.value || "";
|
||||
let parts = cv.split(":");
|
||||
ais.value = (parts[0] == '0') ? "aisoff" : "aison";
|
||||
mode.value = (parts[1] == '0') ? "whitelist" : "blacklist";
|
||||
sentences.value = parts[2] || "";
|
||||
}
|
||||
let updateFunction = function () {
|
||||
let nv = (ais.value == 'aison') ? "1" : "0";
|
||||
nv += ":";
|
||||
nv += (mode.value == 'blacklist') ? "1" : "0";
|
||||
nv += ":";
|
||||
nv += sentences.value;
|
||||
data.value = nv;
|
||||
let chev = new Event('change');
|
||||
data.dispatchEvent(chev);
|
||||
}
|
||||
mode.addEventListener('change', updateFunction);
|
||||
ais.addEventListener("change", updateFunction);
|
||||
sentences.addEventListener("change", updateFunction);
|
||||
data.addEventListener('change', function (ev) {
|
||||
changeFunction();
|
||||
});
|
||||
data.setAttribute('name', configItem.name);
|
||||
if (configItem.readOnly) data.setAttribute('disabled', true);
|
||||
return data;
|
||||
}
|
||||
let moreicons = ['icon-more', 'icon-less'];
|
||||
|
||||
function collapseCategories(parent, expand) {
|
||||
@@ -1270,41 +1076,6 @@
|
||||
return s + parts[0].substr(parts[0].length - dig);
|
||||
}
|
||||
let valueFormatters = {
|
||||
formatCourse: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
let rt = x * 180.0 / Math.PI;
|
||||
if (rt > 360) rt -= 360;
|
||||
if (rt < 0) rt += 360;
|
||||
return rt.toFixed(0);
|
||||
},
|
||||
u: '°'
|
||||
},
|
||||
formatKnots: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
x = x * 3600.0 / 1852.0;
|
||||
return x.toFixed(2);
|
||||
},
|
||||
u: 'kn'
|
||||
},
|
||||
formatWind: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
x = x * 180.0 / Math.PI;
|
||||
if (x > 180) x = -1 * (360 - x);
|
||||
return x.toFixed(0);
|
||||
},
|
||||
u: '°'
|
||||
},
|
||||
mtr2nm: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
x = x / 1852.0;
|
||||
return x.toFixed(2);
|
||||
},
|
||||
u: 'nm'
|
||||
},
|
||||
kelvinToC: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
@@ -1320,46 +1091,6 @@
|
||||
},
|
||||
u: ''
|
||||
},
|
||||
formatDepth: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
return x.toFixed(1);
|
||||
},
|
||||
u: 'm'
|
||||
},
|
||||
formatLatitude: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
if (isNaN(x)) return '-----';
|
||||
return formatLonLatsDecimal(x, 'lat');
|
||||
},
|
||||
u: ''
|
||||
},
|
||||
formatLongitude: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
if (isNaN(x)) return '-----';
|
||||
return formatLonLatsDecimal(x, 'lon');
|
||||
},
|
||||
u: ''
|
||||
},
|
||||
formatRot: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
if (isNaN(x)) return '---';
|
||||
x = x * 180.0 / Math.PI;
|
||||
return x.toFixed(2);
|
||||
},
|
||||
u: '°/s'
|
||||
},
|
||||
formatXte: {
|
||||
f: function (v) {
|
||||
let x = parseFloat(v);
|
||||
if (isNaN(x)) return '---';
|
||||
return x.toFixed(0);
|
||||
},
|
||||
u: 'm'
|
||||
},
|
||||
formatDate: {
|
||||
f: function (v) {
|
||||
v = parseFloat(v);
|
||||
@@ -1388,8 +1119,6 @@
|
||||
},
|
||||
u: ''
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Object.freeze(valueFormatters);
|
||||
for (let k in valueFormatters){
|
||||
@@ -1412,17 +1141,6 @@
|
||||
}
|
||||
return u;
|
||||
}
|
||||
function sourceName(v) {
|
||||
if (v == 0) return "N2K";
|
||||
for (let n in channelList) {
|
||||
if (v == channelList[n].id) return n;
|
||||
if (v >= channelList[n].id && v <= channelList[n].max) {
|
||||
return n;
|
||||
}
|
||||
}
|
||||
if (v < minUser) return "---";
|
||||
return "USER[" + v + "]";
|
||||
}
|
||||
let lastSelectList = [];
|
||||
buttonHandlers.uploadBin=function(ev) {
|
||||
let el = document.getElementById("uploadFile");
|
||||
@@ -1686,8 +1404,7 @@
|
||||
config: 2, //called when the config data is loaded,data is the config object
|
||||
dataItemCreated: 4, //data is an object with
|
||||
// name: the item name, element: the frame item of the boat data display
|
||||
status: 5, //status received, data is the status object
|
||||
counterDisplayCreated: 6 //data is the row for the display
|
||||
status: 5 //status received, data is the status object
|
||||
}
|
||||
};
|
||||
function callListeners(event,data){
|
||||
|
||||
Reference in New Issue
Block a user