aboutsummaryrefslogtreecommitdiff
path: root/src/coaching.js
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-09-24 12:16:03 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-09-25 19:32:21 +0200
commit4ff7855e0d6824d2dda2abae79521f1dfd28eb08 (patch)
tree30aef32401caa3bb24ef25e2c1b237335a6de8eb /src/coaching.js
parentd836114025efccd2c4098e5537b7376998a74213 (diff)
downloadbycs-sol-4ff7855e0d6824d2dda2abae79521f1dfd28eb08.tar.gz
bycs-sol-4ff7855e0d6824d2dda2abae79521f1dfd28eb08.zip
coaching: add simple coaching overview page
Diffstat (limited to 'src/coaching.js')
-rw-r--r--src/coaching.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/coaching.js b/src/coaching.js
new file mode 100644
index 0000000..8b97784
--- /dev/null
+++ b/src/coaching.js
@@ -0,0 +1,81 @@
+import { fetchStudents } from "./student-ENV.ts";
+
+import { getName } from "./utils-ENV.js";
+
+let name;
+
+async function loadGroup() {
+ const students = await fetchStudents();
+ const graduationPromises = [];
+ document.getElementById("group-content").style.display = "block";
+
+ const ul = document.getElementById("group-members");
+
+ ul.innerHTML = "";
+
+ const listEntries = [];
+ for (const student of students) {
+ const graduationPromise = student.getGraduation();
+ graduationPromises.push(graduationPromise);
+
+ const li = document.createElement("li");
+ li.student = student;
+ listEntries.push(li);
+
+ const i = document.createElement("img");
+ i.classList.add("group-member-icon");
+ graduationPromise.then((graduation) => {
+ i.src = graduation.getIcon();
+ });
+ li.appendChild(i);
+ }
+
+ const graduations = await Promise.all(graduationPromises);
+
+ for (const li of listEntries) {
+ const student = li.student;
+ if (!student.graduation.coaches.includes(name))
+ continue;
+
+ const n = document.createElement("span");
+ n.classList.add("group-member-name");
+ n.innerHTML = `${student.name}`;
+ li.appendChild(n);
+
+ for (const col of ["green", "orange", "red"]) {
+ const s = document.createElement("span");
+ s.classList.add(`group-member-${col}`);
+ switch (col) {
+ case "green":
+ s.innerHTML = student.graduation.green;
+ break;
+ case "orange":
+ s.innerHTML = student.graduation.orange;
+ break;
+ case "red":
+ s.innerHTML = student.graduation.red;
+ break;
+ }
+ li.appendChild(s);
+ }
+
+ const p = document.createElement("span");
+ p.classList.add("group-member-points");
+ p.innerHTML = `&sum; ${student.graduation.getNettoPoints()}`;
+ li.appendChild(p);
+
+ li.classList.add("group-member");
+ ul.appendChild(li);
+ }
+}
+
+async function init() {
+ name = getName();
+ loadGroup();
+}
+
+if (document.readyState === "loading") {
+ document.addEventListener("DOMContentLoaded", init);
+} else {
+ init();
+}