59 lines
1.3 KiB
JavaScript
59 lines
1.3 KiB
JavaScript
import {
|
|
renderMachineSessionControlView,
|
|
} from "./control-view-renderer.js";
|
|
|
|
const panelFrameNode = document.getElementById("panel-frame");
|
|
const statusNode = document.getElementById("control-page-status");
|
|
const viewNode = document.getElementById("control-page-view");
|
|
|
|
let refreshTimer = null;
|
|
|
|
function getPanelWindow() {
|
|
return panelFrameNode?.contentWindow ?? null;
|
|
}
|
|
|
|
function getPanelApi() {
|
|
return getPanelWindow()?.linuxCncIniPanelApi ?? null;
|
|
}
|
|
|
|
function getControlView() {
|
|
return getPanelApi()?.getMachineSessionControlView?.() ?? null;
|
|
}
|
|
|
|
function renderControlPage() {
|
|
const view = getControlView();
|
|
if (!view) {
|
|
statusNode.textContent = "waiting for panel";
|
|
viewNode.textContent = "";
|
|
return null;
|
|
}
|
|
|
|
statusNode.textContent = [
|
|
view.status.lastAction ?? "-",
|
|
view.status.runStatus ?? "-",
|
|
view.status.error ?? "-",
|
|
].join(" | ");
|
|
return renderMachineSessionControlView(viewNode, view);
|
|
}
|
|
|
|
function startPolling() {
|
|
if (!refreshTimer) {
|
|
refreshTimer = setInterval(renderControlPage, 200);
|
|
}
|
|
}
|
|
|
|
panelFrameNode.addEventListener("load", () => {
|
|
renderControlPage();
|
|
startPolling();
|
|
});
|
|
|
|
panelFrameNode.src = "./index.html";
|
|
renderControlPage();
|
|
startPolling();
|
|
|
|
window.linuxCncIniPanelControlPageApi = {
|
|
getControlView,
|
|
getPanelApi,
|
|
renderControlPage,
|
|
};
|