29 lines
660 B
JavaScript
29 lines
660 B
JavaScript
function streamTextToElement(element) {
|
|
const url = element.dataset.sseUrl;
|
|
if (!url) {
|
|
return;
|
|
}
|
|
|
|
const source = new EventSource(url);
|
|
|
|
const appendLine = (line) => {
|
|
element.textContent += `${line}\n`;
|
|
element.scrollTop = element.scrollHeight;
|
|
};
|
|
|
|
source.onmessage = (event) => {
|
|
appendLine(event.data);
|
|
};
|
|
|
|
source.addEventListener("stdout", (event) => {
|
|
appendLine(event.data);
|
|
});
|
|
|
|
source.addEventListener("stderr", (event) => {
|
|
appendLine(`[stderr] ${event.data}`);
|
|
});
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
document.querySelectorAll("[data-sse-url]").forEach(streamTextToElement);
|
|
});
|