mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-11 12:46:49 +00:00
refactor(instances): the VM lists' scripts load from static files
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.
This commit is contained in:
parent
e143fe353a
commit
946629b035
11 changed files with 98 additions and 91 deletions
|
|
@ -120,58 +120,10 @@
|
|||
{% include "instances/vm_states_poll.html" %}
|
||||
<script src="{% static 'js/table_filter.js' %}"></script>
|
||||
<script src="{% static 'js/find_address.js' %}"></script>
|
||||
{% if app_settings.VIEW_INSTANCES_LIST_STYLE == 'grouped' and request.user.is_superuser %}
|
||||
<script src="{% static 'js/host_groups.js' %}"></script>
|
||||
{% endif %}
|
||||
{% if request.user.is_superuser %}
|
||||
<script>
|
||||
// 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 = [];
|
||||
});
|
||||
</script>
|
||||
<script src="{% static 'js/new_vm_dialog.js' %}"></script>
|
||||
{% endif %}
|
||||
{% endblock script %}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue