diff --git a/scripts/config.js b/scripts/config.js index e643ef5..76bfc28 100644 --- a/scripts/config.js +++ b/scripts/config.js @@ -31,7 +31,6 @@ async function init () { async function getConfig () { config = await requestPVE(`/nodes/${node}/${type}/${vmid}/config`, "GET"); - console.log(config); } function populateResources () { @@ -291,6 +290,8 @@ async function handleDiskMove () { `; + dialog.shadowRoot.querySelector("#storage-select").selectedIndex = -1; + dialog.callback = async (result, form) => { if (result === "confirm") { document.querySelector(`img[data-disk="${this.dataset.disk}"]`).src = "images/actions/loading.svg"; @@ -373,6 +374,8 @@ async function handleDiskAdd () { `; + dialog.shadowRoot.querySelector("#storage-select").selectedIndex = -1; + dialog.callback = async (result, form) => { if (result === "confirm") { let device = form.get("device"); @@ -441,6 +444,7 @@ async function handleCDAdd () { ISOSelect.append(new Option(element.volid.replace(`${storage}:${content}/`, ""), element.volid)); } }); + ISOSelect.selectedIndex = -1; }); dialog.callback = async (result, form) => { diff --git a/scripts/index.js b/scripts/index.js index 4315c41..d8979fe 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -74,56 +74,71 @@ async function handleInstanceAdd () { -
- Container Options -
- - - - - - - - - - -
-
+

Container Options

+ + + + + + + + + + `; let typeSelect = dialog.shadowRoot.querySelector("#type"); typeSelect.selectedIndex = -1; typeSelect.addEventListener("change", () => { if(typeSelect.value === "qemu") { - dialog.shadowRoot.querySelectorAll("#container-specific input").forEach((element) => {element.disabled = true}); - dialog.shadowRoot.querySelectorAll("#container-specific select").forEach((element) => {element.disabled = true}); - dialog.shadowRoot.querySelector("#container-specific").classList.add("none"); + dialog.shadowRoot.querySelectorAll(".container-specific").forEach((element) => { + element.classList.add("none"); + element.disabled = true; + }); } else { - dialog.shadowRoot.querySelectorAll("#container-specific input").forEach((element) => {element.disabled = false}); - dialog.shadowRoot.querySelectorAll("#container-specific select").forEach((element) => {element.disabled = false}); - dialog.shadowRoot.querySelector("#container-specific").classList.remove("none"); + dialog.shadowRoot.querySelectorAll(".container-specific").forEach((element) => { + element.classList.remove("none"); + element.disabled = false; + }); } }); - let nodeSelect = dialog.shadowRoot.querySelector("#node"); - nodeSelect.selectedIndex = -1; - // populate nodeSelect - nodeSelect.addEventListener("change", async () => { // change template and rootfs storage based on node - }); - - let vmidInput = dialog.shadowRoot.querySelector("#vmid"); - //vmidInput.min = 200; - //vmidInput.max = 299; - let templateContent = "iso"; let templateStorage = dialog.shadowRoot.querySelector("#template-storage"); - let templateImage = dialog.shadowRoot.querySelector("#template-image"); + templateStorage.selectedIndex = -1; let rootfsContent = "rootdir"; let rootfsStorage = dialog.shadowRoot.querySelector("#rootfs-storage"); - let rootfsSize = dialog.shadowRoot.querySelector("#rootfs-size"); + rootfsStorage.selectedIndex = -1; + let nodeSelect = dialog.shadowRoot.querySelector("#node"); + let nodes = await requestPVE("/nodes", "GET"); + nodes.data.forEach((element) => { + if (element.status === "online") { + nodeSelect.add(new Option(element.node)); + } + }); + nodeSelect.selectedIndex = -1; + nodeSelect.addEventListener("change", async () => { // change template and rootfs storage based on node + let node = nodeSelect.value; + let storage = await requestPVE(`/nodes/${node}/storage`, "GET"); + storage.data.forEach((element) => { + if (element.content.includes(templateContent)) { + templateStorage.add(new Option(element.storage)); + } + if (element.content.includes(rootfsContent)) { + rootfsStorage.add(new Option(element.storage)); + } + }); + templateStorage.selectedIndex = -1; + rootfsStorage.selectedIndex = -1; + }); + + let vmidInput = dialog.shadowRoot.querySelector("#vmid"); // suggest min and max based on user restrictions + + let templateImage = dialog.shadowRoot.querySelector("#template-image"); // populate templateImage by + dialog.callback = async (result, form) => { if (result === "confirm") {