mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 19:26:48 +00:00
The VM lists lose their inline scripts and handlers: host_groups.js collapses a host's VMs in the grouped list, new_vm_dialog.js reads the new-VM dialog's CPU bars and capacity lines, and console_window.js (loaded by every page) opens a console button's window, on the lists and on the VM page alike. A list row's Start no longer calls the please-wait dialog, which the list pages do not have (the call only raised an error). The VM page's URL placeholders take the __name__ form the other pages use.
50 lines
1.9 KiB
JavaScript
50 lines
1.9 KiB
JavaScript
// The new-VM dialog's CPU bars and capacity lines, read when the
|
|
// dialog opens, two reads at a time: a CPU read holds a worker for
|
|
// a second, a capacity read while it reads the host's VMs. Answers
|
|
// of an earlier opening are ignored.
|
|
const addInstance = document.getElementById("AddInstance");
|
|
let opening = 0, queue = [], reading = 0;
|
|
|
|
function setCpuUsage(cell, percent, text) {
|
|
const meter = cell.querySelector(".progress");
|
|
cell.querySelector(".progress-bar").style.width = (percent || 0) + "%";
|
|
if (percent === null) {
|
|
meter.removeAttribute("aria-valuenow");
|
|
} else {
|
|
meter.setAttribute("aria-valuenow", percent);
|
|
}
|
|
cell.querySelector(".cpu-usage-value").textContent = text;
|
|
}
|
|
|
|
// data: the answer, or null when the read failed
|
|
function show(element, data) {
|
|
if (element.classList.contains("compute-capacity")) {
|
|
element.textContent = data === null ? "" : data.trim();
|
|
return;
|
|
}
|
|
const usage = data !== null && typeof data.cpudata === "number" ? Math.round(data.cpudata) : null;
|
|
setCpuUsage(element, usage, usage === null ? "—" : usage + "%");
|
|
}
|
|
|
|
function readNext() {
|
|
while (reading < 2 && queue.length) {
|
|
const element = queue.shift(), current = opening;
|
|
reading++;
|
|
$.get(element.dataset.url)
|
|
.done((data) => { if (current === opening) show(element, data); })
|
|
.fail(() => { if (current === opening) show(element, null); })
|
|
.always(() => { reading--; readNext(); });
|
|
}
|
|
}
|
|
|
|
addInstance.addEventListener("show.bs.modal", function () {
|
|
opening++;
|
|
addInstance.querySelectorAll(".cpu-usage").forEach((cell) => setCpuUsage(cell, null, "…"));
|
|
// host by host, as the list shows them
|
|
queue = Array.from(addInstance.querySelectorAll(".cpu-usage, .compute-capacity"));
|
|
readNext();
|
|
});
|
|
addInstance.addEventListener("hide.bs.modal", function () {
|
|
opening++;
|
|
queue = [];
|
|
});
|