Improve writeToConole logic for the console.log difference between stdout and stderr

This commit is contained in:
gingerBill
2022-05-21 17:03:44 +01:00
parent 2895830ce6
commit c902615192
+54 -18
View File
@@ -1,3 +1,5 @@
"use strict";
(function() { (function() {
class WasmMemoryInterface { class WasmMemoryInterface {
constructor() { constructor() {
@@ -1172,32 +1174,33 @@ class WebGLInterface {
}; };
function newlineCount(str, substr) {
return (str.match(/\n/g) || []).length;
};
function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) { function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
const MAX_INFO_CONSOLE_LINES = 512; const MAX_INFO_CONSOLE_LINES = 512;
let infoConsoleLines = new Array(); let infoConsoleLines = new Array();
let currentLine = {}; let currentLine = {};
currentLine[false] = ""; currentLine[false] = "";
currentLine[true] = ""; currentLine[true] = "";
let prevIsError = false;
const writeToConsole = (line, isError) => { const writeToConsole = (line, isError) => {
if (!line) { if (!line) {
return; return;
} }
const println = (text) => { const println = (text, forceIsError) => {
let style = [ let style = [
"color: #eee", "color: #eee",
"background-color: #d20", "background-color: #d20",
"padding: 2px 4px", "padding: 2px 4px",
"border-radius: 2px", "border-radius: 2px",
]; ].join(";");
let doIsError = isError;
if (forceIsError !== undefined) {
doIsError = forceIsError;
}
if (isError) { if (doIsError) {
console.log("%c"+text, style.join(";")); console.log("%c"+text, style);
} else { } else {
console.log(text); console.log(text);
} }
@@ -1226,28 +1229,61 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement) {
} }
} }
if (prevIsError != isError) {
if (prevIsError) {
println(currentLine[prevIsError], prevIsError);
currentLine[prevIsError] = "";
}
}
prevIsError = isError;
// HTML based console // HTML based console
if (!consoleElement) { if (!consoleElement) {
return; return;
} }
if (line.endsWith("\n")) { const wrap = (x) => {
line = line.substring(0, line.length-1); if (isError) {
} else if (infoConsoleLines.length > 0) { return '<span style="color:#f21">'+x+'</span>';
let prev_line = infoConsoleLines.pop(); }
line = prev_line.concat(line); return x;
};
if (line == "\n") {
infoConsoleLines.push(line);
} else if (!line.includes("\n")) {
let prevLine = "";
if (infoConsoleLines.length > 0) {
prevLine = infoConsoleLines.pop();
}
infoConsoleLines.push(prevLine.concat(wrap(line)));
} else {
let lines = line.split("\n");
let lastHasNewline = lines.length > 1 && line.endsWith("\n");
let prevLine = "";
if (infoConsoleLines.length > 0) {
prevLine = infoConsoleLines.pop();
}
infoConsoleLines.push(prevLine.concat(wrap(lines[0]).concat("\n")));
for (let i = 1; i < lines.length-1; i++) {
infoConsoleLines.push(wrap(lines[i]).concat("\n"));
}
let last = lines[lines.length-1];
if (lastHasNewline) {
infoConsoleLines.push(last.concat("\n"));
} else {
infoConsoleLines.push(last);
}
} }
infoConsoleLines.push(line);
if (infoConsoleLines.length > MAX_INFO_CONSOLE_LINES) { if (infoConsoleLines.length > MAX_INFO_CONSOLE_LINES) {
infoConsoleLines.shift(); infoConsoleLines.shift(MAX_INFO_CONSOLE_LINES);
} }
let data = ""; let data = "";
for (let i = 0; i < infoConsoleLines.length; i++) { for (let i = 0; i < infoConsoleLines.length; i++) {
if (i != 0) {
data = data.concat("\n");
}
data = data.concat(infoConsoleLines[i]); data = data.concat(infoConsoleLines[i]);
} }