SET quizData TO [Scenario 1,2, 3, 4, 5]
SET state TO {currentIndex: 0, score: 0, canAnswer: TRUE}
SET ui TO { DOM elements}
CALL 1.11 init()
END 1.0 Quiz Application
INCREMENT state.currentIndex
IF state.currentIndex < LENGTH(quizData) THEN
CALL 1.11 init()
ELSE
CALL 1.2 Final Report
ENDIF
END 1.1 Run Quiz Iteration
SET state.canAnswer TO TRUE
SET data TO quizData[state.currentIndex]
DISPLAY data.title
SET ui.progress TO (state.currentIndex / LENGTH(quizData)) * 100
HIDE ui.nextButton
HIDE ui.hintBox
CLEAR ui.optionsContainer
FOR EACH option, i IN data.options
CREATE card
SET card.text TO option
card.onclick CALL 1.12 handleChoice(i, card)
APPEND card TO ui.optionsContainer
ENDFOR
END 1.11 init
IF state.canAnswer == FALSE THEN
EXIT MODULE
ENDIF
SET state.canAnswer TO FALSE
SET correctIndex TO quizData[state.currentIndex].correct
IF index == correctIndex THEN
ADD "correct" TO element.classList
INCREMENT state.score
ELSE
ADD "incorrect" TO element.classList
ADD "missed" TO ui.optionsContainer.children[correctIndex]
ENDIF
DISPLAY quizData[state.currentIndex].hint
SHOW ui.hintBox
SHOW ui.nextButton
END 1.12 handleChoice
CALL 1.21 showReport()
END 1.2 Final Report
HIDE ui.quizView
SHOW ui.reportView
SET percent TO (state.score / LENGTH(quizData)) * 100
SET rank TO CALL 1.22 calculateRank(percent)
DISPLAY rank, state.score, LENGTH(quizData)
END 1.21 showReport
IF percent == 100 THEN RETURN "A+"
ELSE IF percent >= 90 THEN RETURN "A"
ELSE IF percent >= 80 THEN RETURN "B"
ELSE IF percent >= 70 THEN RETURN "C"
ELSE IF percent >= 60 THEN RETURN "D"
ELSE RETURN "F"
END 1.22 calculateRank