diff --git a/src/routes/flashcards/+page.svelte b/src/routes/flashcards/+page.svelte index f63ee10..67f8d97 100644 --- a/src/routes/flashcards/+page.svelte +++ b/src/routes/flashcards/+page.svelte @@ -2,16 +2,25 @@ import Buttons from "./buttons.svelte"; import Card from "./card.svelte"; import StatsAndButtons from "./StatsAndButtons.svelte"; + + import { stats, resetDeck } from "./logic.svelte.js";
-
-
-
- + {#if stats.isDeckEmpty} +
+

Hey, You learned everything!

+
-
-
- -
+ {:else} +
+
+
+ +
+
+
+ +
+ {/if}
diff --git a/src/routes/flashcards/StatsAndButtons.svelte b/src/routes/flashcards/StatsAndButtons.svelte index 6cb69f0..63a3456 100644 --- a/src/routes/flashcards/StatsAndButtons.svelte +++ b/src/routes/flashcards/StatsAndButtons.svelte @@ -1,10 +1,14 @@ + +
- : 20 - : 20 - : 20 + : {stats.AnswerKnown} + : {stats.AnswerNotKnown} + : {stats.AnswerNotChecked}
diff --git a/src/routes/flashcards/logic.svelte.js b/src/routes/flashcards/logic.svelte.js index 0376367..daab9ce 100644 --- a/src/routes/flashcards/logic.svelte.js +++ b/src/routes/flashcards/logic.svelte.js @@ -1,4 +1,4 @@ -export let card = $state({ Q: "What is the capital of France?", a: "Paris" }); +export let card = $state({ Q: "", a: "" }); export let statusOfCard = $state({ currentlyAnswered: false, @@ -8,12 +8,80 @@ export let statusOfCard = $state({ entering: false, }); +let deck = [ + { Q: "Best programer in the world?", a: "RezHackXYZ" }, + { Q: "Best coding community?", a: "HackClub" }, + { Q: "Will @Shub go totally bankrupt?", a: "yes!" }, +]; + +export let stats = $state({ + isDeckEmpty: false, + AnswerKnown: 0, + AnswerNotKnown: 0, + AnswerNotChecked: deck.length, +}); + +let CurrentDeck = { + AnswersKnown: [], + AnswersNotKnown: [], + AnswersNotChecked: $state.snapshot(deck), +}; + +export function resetDeck() { + CurrentDeck.AnswersKnown = []; + CurrentDeck.AnswersNotKnown = []; + CurrentDeck.AnswersNotChecked = $state.snapshot(deck); + stats.AnswerKnown = 0; + stats.AnswerNotKnown = 0; + stats.AnswerNotChecked = deck.length; + stats.isDeckEmpty = false; + SetNewCard(); +} + +function SetNewCard() { + // Check if deck is complete + if (CurrentDeck.AnswersNotChecked.length === 0 && CurrentDeck.AnswersNotKnown.length === 0) { + stats.isDeckEmpty = true; + return; + } + + let sourceArray; + + // First go through unchecked cards, then cycle through unknown cards + if (CurrentDeck.AnswersNotChecked.length > 0) { + sourceArray = CurrentDeck.AnswersNotChecked; + } else { + sourceArray = CurrentDeck.AnswersNotKnown; + } + + let randomIndex = Math.floor(Math.random() * sourceArray.length); + let selectedCard = sourceArray[randomIndex]; + + card.Q = selectedCard.Q; + card.a = selectedCard.a; + + // Remove from source array + sourceArray.splice(randomIndex, 1); + + // Update stats + updateStats(); +} + +function updateStats() { + stats.AnswerKnown = CurrentDeck.AnswersKnown.length; + stats.AnswerNotKnown = CurrentDeck.AnswersNotKnown.length; + stats.AnswerNotChecked = CurrentDeck.AnswersNotChecked.length; +} + +SetNewCard(); + function AnimateCard() { statusOfCard.exiting = true; setTimeout(() => { statusOfCard.exiting = false; statusOfCard.entering = true; + SetNewCard(); setTimeout(() => { statusOfCard.entering = false; @@ -30,6 +98,17 @@ export function nextCard(side) { return; } + // Create a copy of current card before moving to next + let currentCard = { Q: card.Q, a: card.a }; + + if (side == "right") { + // User knows this card + CurrentDeck.AnswersKnown.push(currentCard); + } else { + // User doesn't know this card - add to unknown pile for re-asking + CurrentDeck.AnswersNotKnown.push(currentCard); + } + statusOfCard.currentlyAnswered = true; if (side == "right") {