spanish-quizzer

An app to quiz you on Spanish vocabulary and verb conjugations
git clone https://git.ashermorgan.net/spanish-quizzer/
Log | Files | Refs | README

commit a037109cc70472d0b58fb01d4a3b793a9a9a80b6
parent bcbb1256b224a10118602dbffec562d30377b949
Author: AsherMorgan <59518073+AsherMorgan@users.noreply.github.com>
Date:   Sun, 31 May 2020 12:58:47 -0700

Merge pull request #9 from AsherMorgan/feature-resume-session

Store progress between sessions.
Diffstat:
MScripts/Quizzer.js | 42++++++++++++++++++++++++++++++++++++++++++
MScripts/Settings.js | 1-
MStyles/Settings.css | 2+-
Mindex.html | 1+
4 files changed, 44 insertions(+), 2 deletions(-)

diff --git a/Scripts/Quizzer.js b/Scripts/Quizzer.js @@ -31,6 +31,9 @@ function Start() { return; } + // Save terms to local storage + localStorage.setItem("terms", JSON.stringify(Terms)); + // Configure prompt audio if (document.getElementById("settingsPromptType").value != "Text") { document.getElementById("quizzerPrompt").classList.add("audio"); @@ -55,6 +58,42 @@ function Start() { +// Resume the previous session +function Resume() { + // Load terms and progress + Terms = JSON.parse(localStorage.getItem("terms")); + Term = parseInt(localStorage.getItem("term")) - 1; + + // Validate Terms + if (!Terms || Terms.length == 0 || !Term || Term < 0 || Term > Terms.length) { + document.getElementById("settingsError").textContent = "An error occured while resuming the previous session."; + document.getElementById("settingsError").scrollIntoView(false); + return; + } + + // Configure prompt audio + if (document.getElementById("settingsPromptType").value != "Text") { + document.getElementById("quizzerPrompt").classList.add("audio"); + + // Give iOS devices ringer warning + if (!!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform)) { + alert("Please make sure your ringer is on in order to hear audio prompts."); + } + } + else { + document.getElementById("quizzerPrompt").classList.remove("audio"); + } + + // Show and hide elements + document.getElementById("settings").hidden = true; + document.getElementById("quizzer").hidden = false; + + // Give the user a prompt + Reset(); +} + + + // Filters a vocabulary set given the filter name function ApplyFilter(vocabSet, name) { // Declare variables @@ -244,6 +283,9 @@ function Reset() { document.getElementById("quizzerFeedback").hidden = false; } + // Save progress to local storage + localStorage.setItem("term", Term); + // Update progress document.getElementById("quizzerProgress").textContent = `${Term} / ${Terms.length}`; diff --git a/Scripts/Settings.js b/Scripts/Settings.js @@ -272,7 +272,6 @@ function settingsSetChanged(setName) { // Update local storage function UpdateLocalStorage() { - localStorage.clear(); localStorage.setItem("darkMode", document.getElementById("settingsDarkMode").checked); localStorage.setItem("PromptType", document.getElementById("settingsPromptType").value); localStorage.setItem("repeatPrompt", document.getElementById("settingsRepeatPrompts").value); diff --git a/Styles/Settings.css b/Styles/Settings.css @@ -35,7 +35,7 @@ h3 { cursor: pointer; } -#settingsStart { +#settingsStart, #settingsResume { margin-top: 15px; margin-bottom: 5px; width: 75px; diff --git a/index.html b/index.html @@ -98,6 +98,7 @@ <div class="centered"> <button id="settingsStart" onclick="Start()">Start</button> + <button id="settingsResume" onclick="Resume()">Resume</button> </div> <div id="settingsError" class="centered bad"></div>