48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
function getWsStatus() {
|
|
const ws = window.__ignisWs;
|
|
|
|
if (!ws) {
|
|
return "disconnected";
|
|
}
|
|
|
|
switch (ws.readyState) {
|
|
case WebSocket.CONNECTING:
|
|
return "connecting";
|
|
case WebSocket.OPEN:
|
|
return "connected";
|
|
default:
|
|
return "disconnected";
|
|
}
|
|
}
|
|
|
|
const STATUS_LABELS = {
|
|
connected: "Ignis server: Connected",
|
|
connecting: "Ignis server: Connecting...",
|
|
disconnected: "Ignis server: Disconnected",
|
|
};
|
|
|
|
function initStatusBar(plugin) {
|
|
const item = plugin.addStatusBarItem();
|
|
item.addClass("ignis-statusbar-item");
|
|
|
|
const dot = item.createEl("span", {
|
|
cls: "ignis-statusbar-dot",
|
|
});
|
|
|
|
item.setAttribute("aria-label", "Ignis: Checking...");
|
|
item.setAttribute("data-tooltip-position", "top");
|
|
|
|
const update = () => {
|
|
const status = getWsStatus();
|
|
dot.className = `ignis-statusbar-dot ignis-statusbar-${status}`;
|
|
item.setAttribute("aria-label", STATUS_LABELS[status] || "Ignis: Unknown");
|
|
};
|
|
|
|
update();
|
|
|
|
const interval = setInterval(update, 3000);
|
|
|
|
return interval;
|
|
}
|
|
|
|
module.exports = { initStatusBar };
|