Loading static/js/yalikejazz.mjs +14 −15 Changes for static/js/yalikejazz.mjs: 14 added lines, 15 removed lines. Original line number Diff line number Diff line Loading @@ -3,16 +3,16 @@ import { pooltest } from "./exercises.mjs" import { getHandInToken } from "./snakeoil.mjs" import { createExerciseCard, displayAsSolved, displayAsNonCurrent, displayAsCurrent } from "./exercises.cards.mjs" function findNextUnsolvedExerciseIndex(currentExerciseIndex) { function findNextUnsolvedExercise() { if (currentState.solvedExercises.length === pooltest.exercises.length) { return null } else { let nextUnsolvedExerciseIndex = currentExerciseIndex let nextUnsolvedExerciseIndex = currentState.exerciseIndex while (currentState.solvedExercises.includes(nextUnsolvedExerciseIndex)) { nextUnsolvedExerciseIndex = (nextUnsolvedExerciseIndex + 1) % pooltest.exercises.length } return nextUnsolvedExerciseIndex return pooltest.exercises[nextUnsolvedExerciseIndex] } } Loading @@ -25,7 +25,7 @@ function createAndInitExerciseCard(exercise) { const cardEl = createExerciseCard(exercise, () => { if (!currentState.solvedExercises.includes(exercise.index) && currentState.exerciseIndex !== exercise.index) { // Only skip to exercises that are not solved and aren't itself startExercise(exercise.index) startExercise(exercise) } }) Loading @@ -45,27 +45,26 @@ function initExerciseList() { } /** * Start an exercise with the given index, also updating the currentState * @param {Number} exerciseIndex Index of the exercise to start * Start an exercise, also updating the currentState * @param {Exercise} exercise Exercise to start */ function startExercise(exerciseIndex) { const cardEl = document.querySelector(`.exercise[data-exercise-index='${exerciseIndex}']`) const exercise = pooltest.exercises[exerciseIndex] function startExercise(exercise) { const cardEl = document.querySelector(`.exercise[data-exercise-index='${exercise.index}']`) currentState.exerciseIndex = exerciseIndex currentState.exerciseIndex = exercise.index exercise.onDescribed(description => cardEl.querySelector(".description").textContent = description) exercise.onVerified( success => { if (success) { currentState.markAsSolved(exerciseIndex) currentState.markAsSolved(exercise.index) displayAsSolved(cardEl) const nextExerciseIndex = findNextUnsolvedExerciseIndex(exerciseIndex) const nextExercise = findNextUnsolvedExercise() if (nextExerciseIndex === null) { if (nextExercise === null) { alert("Du hast den Pooltest erfolgreich abgeschlossen! Du kannst jetzt abgeben :)") } else { startExercise(nextExerciseIndex) startExercise(nextExercise) } } else { Loading Loading @@ -119,7 +118,7 @@ export function main() { initActionLinks() // If there is no current exercise, start with the first one. startExercise(currentState.exerciseIndex || 0) startExercise(pooltest.exercises[currentState.exerciseIndex || 0]) } window.onload = main Loading
static/js/yalikejazz.mjs +14 −15 Changes for static/js/yalikejazz.mjs: 14 added lines, 15 removed lines. Original line number Diff line number Diff line Loading @@ -3,16 +3,16 @@ import { pooltest } from "./exercises.mjs" import { getHandInToken } from "./snakeoil.mjs" import { createExerciseCard, displayAsSolved, displayAsNonCurrent, displayAsCurrent } from "./exercises.cards.mjs" function findNextUnsolvedExerciseIndex(currentExerciseIndex) { function findNextUnsolvedExercise() { if (currentState.solvedExercises.length === pooltest.exercises.length) { return null } else { let nextUnsolvedExerciseIndex = currentExerciseIndex let nextUnsolvedExerciseIndex = currentState.exerciseIndex while (currentState.solvedExercises.includes(nextUnsolvedExerciseIndex)) { nextUnsolvedExerciseIndex = (nextUnsolvedExerciseIndex + 1) % pooltest.exercises.length } return nextUnsolvedExerciseIndex return pooltest.exercises[nextUnsolvedExerciseIndex] } } Loading @@ -25,7 +25,7 @@ function createAndInitExerciseCard(exercise) { const cardEl = createExerciseCard(exercise, () => { if (!currentState.solvedExercises.includes(exercise.index) && currentState.exerciseIndex !== exercise.index) { // Only skip to exercises that are not solved and aren't itself startExercise(exercise.index) startExercise(exercise) } }) Loading @@ -45,27 +45,26 @@ function initExerciseList() { } /** * Start an exercise with the given index, also updating the currentState * @param {Number} exerciseIndex Index of the exercise to start * Start an exercise, also updating the currentState * @param {Exercise} exercise Exercise to start */ function startExercise(exerciseIndex) { const cardEl = document.querySelector(`.exercise[data-exercise-index='${exerciseIndex}']`) const exercise = pooltest.exercises[exerciseIndex] function startExercise(exercise) { const cardEl = document.querySelector(`.exercise[data-exercise-index='${exercise.index}']`) currentState.exerciseIndex = exerciseIndex currentState.exerciseIndex = exercise.index exercise.onDescribed(description => cardEl.querySelector(".description").textContent = description) exercise.onVerified( success => { if (success) { currentState.markAsSolved(exerciseIndex) currentState.markAsSolved(exercise.index) displayAsSolved(cardEl) const nextExerciseIndex = findNextUnsolvedExerciseIndex(exerciseIndex) const nextExercise = findNextUnsolvedExercise() if (nextExerciseIndex === null) { if (nextExercise === null) { alert("Du hast den Pooltest erfolgreich abgeschlossen! Du kannst jetzt abgeben :)") } else { startExercise(nextExerciseIndex) startExercise(nextExercise) } } else { Loading Loading @@ -119,7 +118,7 @@ export function main() { initActionLinks() // If there is no current exercise, start with the first one. startExercise(currentState.exerciseIndex || 0) startExercise(pooltest.exercises[currentState.exerciseIndex || 0]) } window.onload = main