-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
116 lines (94 loc) · 3.86 KB
/
script.js
File metadata and controls
116 lines (94 loc) · 3.86 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
let classCounter = 0;
const classData = {};
function addClass() {
const className = document.getElementById("classNameInput").value.trim();
if (!className) return;
const classId = `class-${classCounter++}`;
const classContainer = document.createElement("div");
classContainer.className = "class-box";
classContainer.id = classId;
classContainer.innerHTML = `
<h2>${className}</h2>
<input type="text" placeholder="Assessment Name" id="${classId}-name">
<input type="number" placeholder="Grade (%)" id="${classId}-grade">
<input type="number" placeholder="Weight (%)" id="${classId}-weight">
<button onclick="addAssessment('${classId}')">Add Assessment</button>
<ul class="grade-list" id="${classId}-list"></ul>
<button onclick="calculateClassGrade('${classId}')">Calculate Final Grade</button>
<p id="${classId}-result"></p>
`;
document.getElementById("classList").appendChild(classContainer);
document.getElementById("classNameInput").value = "";
}
function addAssessment(classId) {
const nameInput = document.getElementById(`${classId}-name`);
const gradeInput = document.getElementById(`${classId}-grade`);
const weightInput = document.getElementById(`${classId}-weight`);
const name = nameInput.value.trim();
const grade = parseFloat(gradeInput.value);
const weight = parseFloat(weightInput.value);
if (!name || isNaN(grade) || isNaN(weight)) return;
if (!classData[classId]) {
classData[classId] = [];
}
classData[classId].push({ name, grade, weight });
const listItem = document.createElement("li");
listItem.textContent = `${name} - ${grade}% (Weight: ${weight}%)`;
document.getElementById(`${classId}-list`).appendChild(listItem);
nameInput.value = "";
gradeInput.value = "";
weightInput.value = "";
}
function calculateClassGrade(classId) {
const entries = classData[classId];
if (!entries || entries.length === 0) {
document.getElementById(`${classId}-result`).textContent = "No assessments added yet!";
return;
}
let totalWeightedScore = 0;
let totalWeight = 0;
for (const { grade, weight } of entries) {
totalWeightedScore += (grade * weight);
totalWeight += weight;
}
const average = totalWeightedScore / totalWeight;
const resultText = isNaN(average)
? "Check weights or grades – something’s off!"
: `Final Grade: ${average.toFixed(2)}%`;
document.getElementById(`${classId}-result`).textContent = resultText;
}
function showTab(tabName) {
document.querySelectorAll('.tab-content').forEach(el => el.style.display = 'none');
document.getElementById(tabName).style.display = 'block';
document.querySelectorAll('.tabs button').forEach(btn => btn.classList.remove('active'));
event.target.classList.add('active');
}
function toggleDarkMode() {
document.body.classList.toggle('dark');
if (document.body.classList.contains('dark')) {
spawnBugs('firefly');
} else {
spawnBugs('dragonfly');
}
}
function spawnBugs(type, count = 15) {
removeBugs();
for (let i = 0; i < count; i++) {
const bug = document.createElement("div");
bug.className = type;
bug.style.top = Math.random() * window.innerHeight + "px";
bug.style.left = Math.random() * window.innerWidth + "px";
bug.style.animationDuration = (Math.random() * 2 + 3) + "s";
document.body.appendChild(bug);
}
}
function removeBugs() {
document.querySelectorAll('.firefly, .dragonfly').forEach(el => el.remove());
}
window.onload = () => {
if (document.body.classList.contains('dark')) {
spawnBugs('firefly');
} else {
spawnBugs('dragonfly');
}
};