Commit 6ca545bf authored by Jakob Moser's avatar Jakob Moser
Browse files

Deactivate buttons while linux is loading

Closes #48
parent 85beef65
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -2,7 +2,8 @@ import { State } from "./state.mjs"
import * as tests from "./exercises.mjs"
import { createExerciseCard, displayAsSolved, displayAsNonCurrent, displayAsCurrent, displayAsVerifying, displayAsNonVerifying, displayAsUnusuallyLongVerifying } from "./exercises.cards.mjs"
import { Exercise } from "./exercises.api.mjs"
import { enableAutoFocus } from "./jslinux.api.mjs"
import { enableAutoFocus, isVmLoading } from "./jslinux.api.mjs"
import { waitFor } from "./util.mjs"

const testId = new URLSearchParams(location.search).get("id")
const currentTest = tests[testId]
@@ -122,12 +123,20 @@ function initActionLinks() {
    })
}

/**
 * Enables or disables all exercise action buttons
 * @param {boolean} enabled If all exercise action buttons should be enabled
 */
function setExerciseActionButtonsEnabled(enabled) {
    document.querySelectorAll(".exercise.card .actions button").forEach(buttonEl => buttonEl.disabled = !enabled)
}

function redirectToPractice() {
    // TODO Use something nicer based on URLSearchParams
    location.search = `?id=practice`
}

export function main() {
export async function main() {
    if(currentTest === undefined) {
        // When no test can be loaded, redirect to a URL which leads to a known existing test
        redirectToPractice()
@@ -159,9 +168,14 @@ export function main() {

    enableAutoFocus()
    initExerciseList()
    setExerciseActionButtonsEnabled(false)
    initActionLinks()

    startExercise(currentTest.getNextUnsolvedExercise(currentState))

    // Enable all exercise action buttons as soon as the VM has booted
    await waitFor(()=>!isVmLoading())
    setExerciseActionButtonsEnabled(true)
}

window.onload = main