add listeners for status handling

This commit is contained in:
andreas 2024-11-14 16:16:40 +01:00
parent f73390c9ae
commit 048a16d939
1 changed files with 59 additions and 47 deletions

View File

@ -76,47 +76,49 @@
} }
getJson('/api/status') getJson('/api/status')
.then(function (jsonData) { .then(function (jsonData) {
if (jsonData.salt !== undefined) {
lastSalt=jsonData.salt;
delete jsonData.salt;
}
if (jsonData.minUser !== undefined){
minUser=jsonData.minUser;
delete jsonData.minUser;
}
callListeners(api.EVENTS.status,jsonData);
let statusPage = document.getElementById('statusPageContent'); let statusPage = document.getElementById('statusPageContent');
let even = true; //first counter let even = true; //first counter
for (let k in jsonData) { if (statusPage){
if (k == "salt") { for (let k in jsonData) {
lastSalt = jsonData[k]; if (typeof (jsonData[k]) === 'object') {
continue; if (k.indexOf('count') == 0) {
} createCounterDisplay(statusPage, k.replace("count", "").replace(/in$/, " in").replace(/out$/, " out"), k, even);
if (k == "minUser") { even = !even;
minUser = parseInt(jsonData[k]); for (let sk in jsonData[k]) {
continue; let key = k + "." + sk;
} if (typeof (jsonData[k][sk]) === 'object') {
if (!statusPage) continue; //msg details
if (typeof (jsonData[k]) === 'object') { updateMsgDetails(key, jsonData[k][sk]);
if (k.indexOf('count') == 0) { }
createCounterDisplay(statusPage, k.replace("count", "").replace(/in$/, " in").replace(/out$/, " out"), k, even); else {
even = !even; let el = document.getElementById(key);
for (let sk in jsonData[k]) { if (el) el.textContent = jsonData[k][sk];
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];
}
} }
if (k.indexOf("ch") == 0) { else {
//channel def let el = document.getElementById(k);
let name = k.substring(2); if (el) el.textContent = jsonData[k];
channelList[name] = jsonData[k]; forEl('.status-' + k, function (el) {
el.textContent = jsonData[k];
});
} }
} }
else {
let el = document.getElementById(k);
if (el) el.textContent = jsonData[k];
forEl('.status-' + k, function (el) {
el.textContent = jsonData[k];
});
}
} }
lastUpdate = (new Date()).getTime(); lastUpdate = (new Date()).getTime();
if (reloadConfig) { if (reloadConfig) {
@ -382,6 +384,7 @@
icon.classList.add('icon-less'); icon.classList.add('icon-less');
} }
}); });
callListeners(api.EVENTS.counterDisplayCreated,row);
} }
function validKey(key) { function validKey(key) {
if (!key) return; if (!key) return;
@ -1996,8 +1999,16 @@
hideDashboardItem(name); //will recreate it on next data receive hideDashboardItem(name); //will recreate it on next data receive
} }
const api= { const api= {
registerListener: function (callback) { registerListener: function (callback,opt_event) {
listeners.push(callback); if (opt_event === undefined){
listeners.push(callback);
}
else{
listeners.push({
event:opt_event,
callback:callback
})
}
}, },
/** /**
* helper for creating dom elements * helper for creating dom elements
@ -2058,11 +2069,13 @@
parseBoatDataLine: parseBoatDataLine, parseBoatDataLine: parseBoatDataLine,
EVENTS: { EVENTS: {
init: 0, //called when capabilities are loaded, data is capabilities init: 0, //called when capabilities are loaded, data is capabilities
tab: 1, //tab page activated data is the id of the tab page tab: 1, //tab page activated, data is the id of the tab page
config: 2, //data is the config object config: 2, //called when the config data is loaded,data is the config object
boatData: 3, //data is the list of boat Data items boatData: 3, //called when boatData is received, data is the list of boat Data items
dataItemCreated: 4, //data is an object with dataItemCreated: 4, //data is an object with
// name: the item name, element: the frame item of the boat data display // 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
} }
}; };
function callListeners(event,data){ function callListeners(event,data){
@ -2070,6 +2083,13 @@
if (typeof(listener) === 'function'){ if (typeof(listener) === 'function'){
listener(event,data); listener(event,data);
} }
else if (typeof(listener) === 'object'){
if (listener.event === event){
if (typeof(listener.callback) === 'function'){
listener.callback(event,data);
}
}
}
}) })
} }
window.esp32nmea2k = api; window.esp32nmea2k = api;
@ -2120,14 +2140,6 @@
}); });
} }
} catch (e) { } } catch (e) { }
let statusPage = document.getElementById('statusPageContent');
/*if (statusPage){
let even=true;
for (let c in counters){
createCounterDisplay(statusPage,counters[c],c,even);
even=!even;
}
}*/
forEl('#uploadFile', function (el) { forEl('#uploadFile', function (el) {
el.addEventListener('change', function (ev) { el.addEventListener('change', function (ev) {
if (ev.target.files.length < 1) return; if (ev.target.files.length < 1) return;