Files
onefinity-firmware/src/js/console.js
2022-12-21 16:26:22 +05:30

78 lines
2.0 KiB
JavaScript

"use strict";
function _msg_equal(a, b) {
return a.level == b.level
&& a.source == b.source
&& a.where == b.where
&& a.msg == b.msg;
}
// Shared among all instances
const messages = [];
module.exports = {
template: "#console-template",
data: function() {
return {
messages
};
},
events: {
log: function(msg) {
// There may be multiple instances of this module so ignore messages
// that have already been processed.
if (msg.logged) {
return;
}
msg.logged = true;
// Make sure we have a message level
msg.level = msg.level || "info";
// Add to message log and count and collapse repeats
const repeat = messages.length && _msg_equal(msg, messages[0]);
if (repeat) {
messages[0].repeat++;
} else {
msg.repeat = msg.repeat || 1;
messages.unshift(msg);
while (256 < messages.length) {
messages.pop();
}
}
if (messages[0].repeat > 1) {
return;
}
msg.ts = Date.now();
// Write message to browser console for debugging
const text = JSON.stringify(msg);
if (msg.level == "error" || msg.level == "critical") {
console.error(text);
} else if (msg.level == "warning") {
console.warn(text);
} else if (msg.level == "debug" && console.debug) {
console.debug(text);
} else {
console.log(text);
}
// Event on errors
if (msg.level == "error" || msg.level == "critical") {
this.$dispatch("error", msg);
}
}
},
methods: {
clear: function() {
messages.splice(0, messages.length);
},
}
};