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") {