-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprogress.js
More file actions
191 lines (159 loc) · 6.85 KB
/
progress.js
File metadata and controls
191 lines (159 loc) · 6.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
document.addEventListener('DOMContentLoaded', function() {
// Check if user is logged in
const currentUser = JSON.parse(localStorage.getItem('currentUser'));
if (!currentUser) {
// Show login prompt if not logged in
document.getElementById('loginPrompt').style.display = 'block';
document.getElementById('progressContent').style.display = 'none';
return;
}
// Populate language dropdown with user's learning languages
populateLanguageDropdown();
// Load initial progress data
loadProgressData();
// Add event listener for language selection change
document.getElementById('progressLanguage').addEventListener('change', loadProgressData);
});
/**
* Populate the language dropdown with languages the user is learning
*/
function populateLanguageDropdown() {
const currentUser = JSON.parse(localStorage.getItem('currentUser'));
const progressLanguageSelect = document.getElementById('progressLanguage');
// Clear existing options
progressLanguageSelect.innerHTML = '';
// Get user's learning languages from localStorage
const userProgress = JSON.parse(localStorage.getItem('userProgress')) || {};
const userLanguages = userProgress[currentUser.username] || {};
// If no languages are being learned, add a default message
if (Object.keys(userLanguages).length === 0) {
const option = document.createElement('option');
option.value = '';
option.textContent = 'No languages started yet';
progressLanguageSelect.appendChild(option);
return;
}
// Add each language the user is learning
Object.keys(userLanguages).forEach(language => {
const option = document.createElement('option');
option.value = language;
option.textContent = language;
progressLanguageSelect.appendChild(option);
});
}
/**
* Load and display progress data for the selected language
*/
function loadProgressData() {
const currentUser = JSON.parse(localStorage.getItem('currentUser'));
const selectedLanguage = document.getElementById('progressLanguage').value;
if (!selectedLanguage) {
// No language selected or no languages being learned
displayEmptyProgress();
return;
}
// Get user progress data from localStorage
const userProgress = JSON.parse(localStorage.getItem('userProgress')) || {};
const languageProgress = userProgress[currentUser.username]?.[selectedLanguage] || {};
// Update overall progress
updateOverallProgress(languageProgress);
// Update lesson progress list
updateLessonProgressList(languageProgress, selectedLanguage);
// Update statistics
updateLearningStatistics(languageProgress, selectedLanguage);
}
/**
* Display empty progress when no language is selected
*/
function displayEmptyProgress() {
document.getElementById('overallProgressBar').style.width = '0%';
document.getElementById('overallProgressPercent').textContent = '0%';
document.getElementById('lessonProgressList').innerHTML = '<p>Start learning to see your progress!</p>';
document.getElementById('daysStreak').textContent = '0';
document.getElementById('completedLessons').textContent = '0';
document.getElementById('vocabularyLearned').textContent = '0';
document.getElementById('timeSpent').textContent = '0 hrs';
}
/**
* Update the overall progress bar and percentage
*/
function updateOverallProgress(languageProgress) {
const lessons = languageProgress.lessons || {};
const lessonCount = Object.keys(lessons).length;
if (lessonCount === 0) {
document.getElementById('overallProgressBar').style.width = '0%';
document.getElementById('overallProgressPercent').textContent = '0%';
return;
}
// Calculate completed lessons
let completedLessons = 0;
Object.values(lessons).forEach(lesson => {
if (lesson.completed) {
completedLessons++;
}
});
// Calculate percentage
const percentage = Math.round((completedLessons / lessonCount) * 100);
document.getElementById('overallProgressBar').style.width = percentage + '%';
document.getElementById('overallProgressPercent').textContent = percentage + '%';
}
/**
* Update the lesson progress list
*/
function updateLessonProgressList(languageProgress, language) {
const lessonProgressList = document.getElementById('lessonProgressList');
lessonProgressList.innerHTML = '';
const lessons = languageProgress.lessons || {};
// If no lessons started, show message
if (Object.keys(lessons).length === 0) {
lessonProgressList.innerHTML = '<p>No lessons started yet. <a href="languages.html">Start learning now!</a></p>';
return;
}
// Create a sorted array of lesson numbers
const lessonNumbers = Object.keys(lessons).map(Number).sort((a, b) => a - b);
// Create progress item for each lesson
lessonNumbers.forEach(lessonNumber => {
const lesson = lessons[lessonNumber];
const lessonItem = document.createElement('div');
lessonItem.className = 'lesson-progress-item';
const progressPercentage = lesson.progress || 0;
const completionStatus = lesson.completed ? 'Completed' : `${progressPercentage}% Complete`;
lessonItem.innerHTML = `
<div class="lesson-info">
<h3>Lesson ${lessonNumber}</h3>
<p>${completionStatus}</p>
</div>
<div class="lesson-progress-bar-container">
<div class="lesson-progress-bar" style="width: ${progressPercentage}%"></div>
</div>
<a href="lesson.html?lang=${language}&lesson=${lessonNumber}" class="btn continue-btn">
${lesson.completed ? 'Review' : 'Continue'}
</a>
`;
lessonProgressList.appendChild(lessonItem);
});
}
/**
* Update learning statistics
*/
function updateLearningStatistics(languageProgress, language) {
// Days streak
const streak = languageProgress.streak || 0;
document.getElementById('daysStreak').textContent = streak;
// Completed lessons
const lessons = languageProgress.lessons || {};
let completedLessons = 0;
Object.values(lessons).forEach(lesson => {
if (lesson.completed) {
completedLessons++;
}
});
document.getElementById('completedLessons').textContent = completedLessons;
// Vocabulary learned
const vocabularyLearned = languageProgress.vocabularyLearned || 0;
document.getElementById('vocabularyLearned').textContent = vocabularyLearned;
// Time spent (in hours)
const timeSpentMinutes = languageProgress.timeSpent || 0;
const timeSpentHours = (timeSpentMinutes / 60).toFixed(1);
document.getElementById('timeSpent').textContent = `${timeSpentHours} hrs`;
}