feat: enhance lesson functionality with user code storage and progress tracking

This commit is contained in:
Michael Czechowski
2025-06-05 14:03:18 +02:00
parent 10fce10033
commit e30bb40b1a
3 changed files with 49 additions and 37 deletions

View File

@@ -8,6 +8,7 @@ const state = {
currentModule: null,
currentLessonIndex: 0,
modules: [],
userCode: new Map(), // Store user code for each lesson
userProgress: {}, // Format: { moduleId: { completed: [0, 2, 3], current: 4 } }
userCodeBeforeValidation: "", // Track user code state before validation
userSettings: {
@@ -48,7 +49,7 @@ const lessonEngine = new LessonEngine();
// Load user progress from localStorage
function loadUserProgress() {
const savedProgress = localStorage.getItem("codeCrispies.Progress");
const savedProgress = localStorage.getItem("codeCrispies.progress");
if (savedProgress) {
state.userProgress = JSON.parse(savedProgress);
}
@@ -56,7 +57,7 @@ function loadUserProgress() {
// Save user progress to localStorage
function saveUserProgress() {
localStorage.setItem("codeCrispies.Progress", JSON.stringify(state.userProgress));
localStorage.setItem("codeCrispies.progress", JSON.stringify(state.userProgress));
}
function loadUserSettings() {
@@ -392,6 +393,10 @@ function runCode() {
// Always apply the code to the preview, regardless of validation result
lessonEngine.applyUserCode(userCode, true);
// Backup code in local storage
state.userCode.set(state.currentLessonIndex, userCode);
localStorage.setItem("codeCrispies.userCode", JSON.stringify(Array.from(state.userCode.entries())));
const validationResult = validateUserCode(userCode, lesson);
// Add validation indicators based on validCases count if available
@@ -557,7 +562,7 @@ function resetProgress() {
document.getElementById("cancel-reset").addEventListener("click", closeModal);
document.getElementById("confirm-reset").addEventListener("click", () => {
localStorage.removeItem("codeCrispies.Progress");
localStorage.removeItem("codeCrispies.progress");
localStorage.removeItem("codeCrispies.lastModuleId");
state.userProgress = {};
closeModal();

View File

@@ -18,7 +18,7 @@ export function renderModuleList(container, modules, onSelectModule, onSelectLes
container.innerHTML = "<h3>CSS Lessons</h3>";
// Get user progress from localStorage
const progressData = localStorage.getItem("codeCrispies.Progress");
const progressData = localStorage.getItem("codeCrispies.progress");
let progress = {};
if (progressData) {
try {