51 lines
2 KiB
TypeScript
51 lines
2 KiB
TypeScript
import { initializeAddInstanceFlow } from "./add_instance_flow.mjs";
|
|
import { findDialogOrFail, findFormOrFail } from "./dom.mjs";
|
|
import knownSoftware from "./known_software.mjs";
|
|
import storageManager from "./storage_manager.mjs";
|
|
|
|
export function getMainDialog(): HTMLDialogElement {
|
|
return document.getElementById('mainDialog') as HTMLDialogElement;
|
|
}
|
|
|
|
const detailsDialog = findDialogOrFail(document.body, "#instanceDetails");
|
|
const addDialog = findDialogOrFail(document.body, "#addInstance");
|
|
const instanceSelectForm = findFormOrFail(document.body, "#instanceSelectForm");
|
|
|
|
export const {
|
|
showAddInstanceDialog,
|
|
hideAddInstanceDialog
|
|
} = initializeAddInstanceFlow(detailsDialog, addDialog);
|
|
|
|
function createInstanceSelectOptions() {
|
|
instanceSelectForm.replaceChildren(); // Erase all child nodes
|
|
for (const instance of storageManager.storage.instances) {
|
|
const div = document.createElement("div");
|
|
div.setAttribute("x-option", instance.origin);
|
|
const radio = document.createElement("input");
|
|
radio.id = instance.origin;
|
|
radio.type = "radio";
|
|
radio.name = "instanceSelect";
|
|
const label = document.createElement("label");
|
|
label.htmlFor = instance.origin;
|
|
label.innerText = instance.name + " ";
|
|
if (instance.iconURL) {
|
|
const img = new Image();
|
|
img.src = instance.iconURL;
|
|
img.alt = `${instance.name} icon`;
|
|
img.className = "inlineIcon";
|
|
label.append(img, " ");
|
|
}
|
|
const small = document.createElement("small");
|
|
const softwareName = knownSoftware.software[instance.software].name;
|
|
small.innerText = `(${softwareName})`;
|
|
label.appendChild(small);
|
|
div.appendChild(radio);
|
|
div.appendChild(label);
|
|
instanceSelectForm.appendChild(div);
|
|
}
|
|
const firstInput = instanceSelectForm.querySelector("input");
|
|
if (firstInput) firstInput.checked = true;
|
|
}
|
|
|
|
createInstanceSelectOptions();
|
|
storageManager.addSaveCallback(createInstanceSelectOptions);
|