diff --git a/static/crossroad.html b/static/crossroad.html index 5405513..4bff713 100644 --- a/static/crossroad.html +++ b/static/crossroad.html @@ -28,7 +28,9 @@
-
+
+ +
diff --git a/static/crossroad.mts b/static/crossroad.mts index ad0bfe9..4901180 100644 --- a/static/crossroad.mts +++ b/static/crossroad.mts @@ -1,8 +1,10 @@ import { initializeAddInstanceFlow } from "./add_instance_flow.mjs"; -import { findDialogOrFail, findFormOrFail } from "./dom.mjs"; +import { findButtonOrFail, findDialogOrFail, findFormOrFail, findInputOrFail } from "./dom.mjs"; import knownSoftware from "./known_software.mjs"; import storageManager from "./storage_manager.mjs"; +const radioButtonName = "instanceSelect"; + export function getMainDialog(): HTMLDialogElement { return document.getElementById('mainDialog') as HTMLDialogElement; } @@ -10,6 +12,7 @@ export function getMainDialog(): HTMLDialogElement { const detailsDialog = findDialogOrFail(document.body, "#instanceDetails"); const addDialog = findDialogOrFail(document.body, "#addInstance"); const instanceSelectForm = findFormOrFail(document.body, "#instanceSelectForm"); +const redirectButton = findButtonOrFail(document.body, "#redirect"); export const { showAddInstanceDialog, @@ -23,8 +26,9 @@ function createInstanceSelectOptions() { div.setAttribute("x-option", instance.origin); const radio = document.createElement("input"); radio.id = instance.origin; + radio.value = instance.origin; radio.type = "radio"; - radio.name = "instanceSelect"; + radio.name = radioButtonName; const label = document.createElement("label"); label.htmlFor = instance.origin; label.innerText = instance.name + " "; @@ -44,8 +48,24 @@ function createInstanceSelectOptions() { instanceSelectForm.appendChild(div); } const firstInput = instanceSelectForm.querySelector("input"); - if (firstInput) firstInput.checked = true; + if (firstInput) { + firstInput.checked = true; + redirectButton.disabled = false; + } else { + redirectButton.disabled = true; + } } createInstanceSelectOptions(); storageManager.addSaveCallback(createInstanceSelectOptions); + +function redirect() { + // Can be assumed to not fail because the button is disabled if there are no options and the first one is selected by default + const option = findInputOrFail(instanceSelectForm, `input[name="${radioButtonName}"]:checked`).value; + const url = URL.parse(option)!; + const currentURL = URL.parse(location.href)!; + url.pathname = currentURL.pathname.replace(/\/.*?\//, "/"); + location.href = url.toString(); +} + +redirectButton.addEventListener("click", e => redirect());