-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
157 lines (130 loc) · 6.06 KB
/
script.js
File metadata and controls
157 lines (130 loc) · 6.06 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
const courses = [
{ id: 1, title: "Intro to HTML", description: "Learn the basics of HTML.", category: "Web Development", lessons: [
{ id: 1, title: "What is HTML?", completed: false },
{ id: 2, title: "Basic Tags", completed: false },
{ id: 3, title: "Forms", completed: false }
] },
{ id: 2, title: "CSS for Beginners", description: "Style your websites with CSS.", category: "Web Development", lessons: [
{ id: 1, title: "Introduction to CSS", completed: false },
{ id: 2, title: "Selectors", completed: false },
{ id: 3, title: "Box Model", completed: false }
] },
{ id: 3, title: "JavaScript 101", description: "Get started with JS basics.", category: "Programming", lessons: [
{ id: 1, title: "Variables and Data Types", completed: false },
{ id: 2, title: "Functions", completed: false },
{ id: 3, title: "DOM Manipulation", completed: false }
] },
{ id: 4, title: "Python Basics", description: "Learn Python programming.", category: "Programming", lessons: [
{ id: 1, title: "Hello World", completed: false },
{ id: 2, title: "Data Structures", completed: false },
{ id: 3, title: "Control Flow", completed: false }
] },
{ id: 5, title: "Data Science Intro", description: "Basics of data science.", category: "Data Science", lessons: [
{ id: 1, title: "What is Data Science?", completed: false },
{ id: 2, title: "Pandas Basics", completed: false },
{ id: 3, title: "Visualization", completed: false }
] }
];
function login() {
const username = document.getElementById("username").value.trim();
if (!username) return alert("Please enter your username.");
localStorage.setItem("vibeUser", username);
localStorage.setItem(`completed_${username}`, JSON.stringify([]));
localStorage.setItem(`lessons_${username}`, JSON.stringify({}));
window.location.href = "courses.html";
}
function logout() {
localStorage.removeItem("vibeUser");
window.location.href = "index.html";
}
function renderCourses() {
const username = localStorage.getItem("vibeUser");
if (!username) return window.location.href = "index.html";
document.getElementById("user-name").innerText = username;
const completedCourses = JSON.parse(localStorage.getItem(`completed_${username}`)) || [];
const container = document.getElementById("course-list");
container.innerHTML = "";
const searchTerm = document.getElementById("search").value.toLowerCase();
const categoryFilter = document.getElementById("category").value;
courses.filter(course => {
const matchesSearch = course.title.toLowerCase().includes(searchTerm) || course.description.toLowerCase().includes(searchTerm);
const matchesCategory = categoryFilter === "" || course.category === categoryFilter;
return matchesSearch && matchesCategory;
}).forEach(course => {
const div = document.createElement("div");
div.className = "course";
const isCompleted = completedCourses.includes(course.id);
div.innerHTML = `
<h3>${course.title}</h3>
<p>${course.description}</p>
<p><strong>Category:</strong> ${course.category}</p>
<button onclick="viewDetails(${course.id})">View Details</button>
<button onclick="toggleCompleted(${course.id})">
${isCompleted ? "✅ Completed" : "Mark as Completed"}
</button>
`;
container.appendChild(div);
});
}
function viewDetails(id) {
window.location.href = `course.html?id=${id}`;
}
function toggleCompleted(courseId) {
const username = localStorage.getItem("vibeUser");
let completed = JSON.parse(localStorage.getItem(`completed_${username}`)) || [];
if (completed.includes(courseId)) {
completed = completed.filter(id => id !== courseId);
} else {
completed.push(courseId);
}
localStorage.setItem(`completed_${username}`, JSON.stringify(completed));
renderCourses();
}
function renderCourseDetail() {
const urlParams = new URLSearchParams(window.location.search);
const courseId = parseInt(urlParams.get('id'));
const course = courses.find(c => c.id === courseId);
if (!course) return window.location.href = "courses.html";
const username = localStorage.getItem("vibeUser");
if (!username) return window.location.href = "index.html";
document.getElementById("course-title").innerText = course.title;
document.getElementById("course-description").innerText = course.description;
const lessonsContainer = document.getElementById("lessons-list");
const lessonsData = JSON.parse(localStorage.getItem(`lessons_${username}`)) || {};
const completedLessons = lessonsData[courseId] || [];
const totalLessons = course.lessons.length;
const completedCount = completedLessons.length;
const progressPercent = totalLessons > 0 ? (completedCount / totalLessons) * 100 : 0;
document.getElementById("progress-fill").style.width = `${progressPercent}%`;
document.getElementById("progress-text").innerText = `${completedCount}/${totalLessons} lessons completed`;
lessonsContainer.innerHTML = "";
course.lessons.forEach(lesson => {
const div = document.createElement("div");
div.className = `lesson ${completedLessons.includes(lesson.id) ? 'completed' : ''}`;
div.innerHTML = `
<span>${lesson.title}</span>
<button onclick="toggleLessonCompleted(${courseId}, ${lesson.id})">
${completedLessons.includes(lesson.id) ? "✅ Completed" : "Mark as Completed"}
</button>
`;
lessonsContainer.appendChild(div);
});
}
function toggleLessonCompleted(courseId, lessonId) {
const username = localStorage.getItem("vibeUser");
let lessonsData = JSON.parse(localStorage.getItem(`lessons_${username}`)) || {};
if (!lessonsData[courseId]) lessonsData[courseId] = [];
if (lessonsData[courseId].includes(lessonId)) {
lessonsData[courseId] = lessonsData[courseId].filter(id => id !== lessonId);
} else {
lessonsData[courseId].push(lessonId);
}
localStorage.setItem(`lessons_${username}`, JSON.stringify(lessonsData));
renderCourseDetail();
}
if (window.location.pathname.includes("courses.html")) {
window.onload = renderCourses;
}
if (window.location.pathname.includes("course.html")) {
window.onload = renderCourseDetail;
}