Should work apart from CORS issues

This commit is contained in:
CenTdemeern1 2025-01-14 13:24:45 +01:00
parent e68a498cb3
commit 4e9f97abfb
2 changed files with 37 additions and 5 deletions

View file

@ -1,10 +1,20 @@
// This file handles the "Confirm instance details" dialog // This file handles the "Confirm instance details" dialog
import { resize } from "./image.mjs";
import knownSoftware from "./known_software.mjs"; import knownSoftware from "./known_software.mjs";
const blankImage = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; const blankImage = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
export function initializeInstanceDetailsDialog(dialog: HTMLDialogElement): { export function initializeInstanceDetailsDialog(
dialog: HTMLDialogElement,
callback: (
instanceName: string,
instanceHost: string,
instanceHostSecure: boolean,
instanceSoftware: string,
instanceIcon: string | null
) => void
): {
showInstanceDetailsDialog: () => void, showInstanceDetailsDialog: () => void,
hideInstanceDetailsDialog: () => void, hideInstanceDetailsDialog: () => void,
populateInstanceDetailsDialog: ( populateInstanceDetailsDialog: (
@ -13,7 +23,7 @@ export function initializeInstanceDetailsDialog(dialog: HTMLDialogElement): {
instanceHostSecureValue: boolean, instanceHostSecureValue: boolean,
instanceSoftwareValue: string, instanceSoftwareValue: string,
instanceIconValue: string | null instanceIconValue: string | null
) => void, ) => void
} { } {
const showInstanceDetailsDialog = () => dialog.showModal(); const showInstanceDetailsDialog = () => dialog.showModal();
const hideInstanceDetailsDialog = () => dialog.close(); const hideInstanceDetailsDialog = () => dialog.close();
@ -61,10 +71,16 @@ export function initializeInstanceDetailsDialog(dialog: HTMLDialogElement): {
instanceHostSecure.checked = instanceHostSecureValue; instanceHostSecure.checked = instanceHostSecureValue;
instanceSoftware.value = instanceSoftwareValue; instanceSoftware.value = instanceSoftwareValue;
instanceIcon.src = instanceIconValue ?? blankImage; instanceIcon.src = instanceIconValue ?? blankImage;
}; };
form.addEventListener("submit", e => { form.addEventListener("submit", e => {
callback(
instanceName.value,
instanceHost.value,
instanceHostSecure.checked,
instanceSoftware.value,
instanceIcon.src == blankImage ? null : resize(instanceIcon)
);
form.reset(); form.reset();
}); });

View file

@ -10,6 +10,21 @@ export function getMainDialog(): HTMLDialogElement {
return document.getElementById('mainDialog') as HTMLDialogElement; return document.getElementById('mainDialog') as HTMLDialogElement;
} }
const instanceDetailsDialogCallback = (
name: string,
host: string,
hostSecure: boolean,
software: string,
icon: string | null
) => {
storageManager.storage.instances.push({
name,
origin: `http${hostSecure ? "s" : ""}://${host}`,
software,
iconURL: icon ?? undefined
});
};
const detailsDialog = document.querySelector("#instanceDetails"); const detailsDialog = document.querySelector("#instanceDetails");
if (!(detailsDialog instanceof HTMLDialogElement)) if (!(detailsDialog instanceof HTMLDialogElement))
throw new Error("Couldn't find instanceDetails dialog"); throw new Error("Couldn't find instanceDetails dialog");
@ -17,7 +32,7 @@ export const {
showInstanceDetailsDialog, showInstanceDetailsDialog,
hideInstanceDetailsDialog, hideInstanceDetailsDialog,
populateInstanceDetailsDialog populateInstanceDetailsDialog
} = initializeInstanceDetailsDialog(detailsDialog); } = initializeInstanceDetailsDialog(detailsDialog, instanceDetailsDialogCallback);
const addInstanceDialogCallback = async ( const addInstanceDialogCallback = async (
host: string, host: string,
@ -36,8 +51,9 @@ const addInstanceDialogCallback = async (
) )
throw new Error("Invalid API response"); throw new Error("Invalid API response");
populateInstanceDetailsDialog(name, host, secure, software, iconURL as string | null); populateInstanceDetailsDialog(name, host, secure, software, iconURL as string | null);
} finally { } catch {
populateInstanceDetailsDialog("", host, secure, "", null); populateInstanceDetailsDialog("", host, secure, "", null);
} finally {
showInstanceDetailsDialog(); showInstanceDetailsDialog();
} }
} }