aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2026-08-04 10:24:10 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2026-08-04 10:24:10 +0200
commitfc28fd37dd4a5dbc7512ec5f22d90795b75a4bc5 (patch)
treeb8ab762c61174e9704d264b8672a623caa16b995
parent6839831af54cd9302119bcc3bffafe10475958d4 (diff)
downloadbycs-sol-fc28fd37dd4a5dbc7512ec5f22d90795b75a4bc5.tar.gz
bycs-sol-fc28fd37dd4a5dbc7512ec5f22d90795b75a4bc5.zip
fix errors detected by eslint
-rw-r--r--eslint.config.js10
-rw-r--r--src/cockpit.js16
-rw-r--r--src/group.js2
-rw-r--r--src/mass-graduation.js27
-rw-r--r--src/mock.js6
-rw-r--r--src/selection.js62
6 files changed, 37 insertions, 86 deletions
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..84e53fb
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,10 @@
+import { defineConfig } from "eslint/config";
+
+export default defineConfig([
+ {
+ rules: {
+ semi: "error",
+ "prefer-const": "error",
+ },
+ },
+]); \ No newline at end of file
diff --git a/src/cockpit.js b/src/cockpit.js
index bd4c860..9dea658 100644
--- a/src/cockpit.js
+++ b/src/cockpit.js
@@ -51,15 +51,15 @@ function pointClickHandler(color) {
// TODO(muhq): Prefill the textarea with common reasons
switch (color) {
case "green":
- textarea.style.background = "rgb(from green r g b / 20%)"
+ textarea.style.background = "rgb(from green r g b / 20%)";
textarea.value = "";
break;
case "orange":
- textarea.style.background = "rgb(from orange r g b / 20%)"
+ textarea.style.background = "rgb(from orange r g b / 20%)";
textarea.value = "";
break;
case "red":
- textarea.style.background = "rgb(from red r g b / 20%)"
+ textarea.style.background = "rgb(from red r g b / 20%)";
textarea.value = "";
break;
}
@@ -68,7 +68,7 @@ function pointClickHandler(color) {
const coach = name;
- let submit = function() {
+ const submit = function() {
let change;
switch (color) {
case "green":
@@ -88,7 +88,7 @@ function pointClickHandler(color) {
textareaDiv.style.display = "none";
updateStudentInfo();
student.fetchGraduation().then(() => updateStudentGraduation() );
- }
+ };
// Use onEVENT to override any previous handler
textarea.onkeydown = function(e) {
if (e.shiftKey && e.key === "Enter") {
@@ -327,9 +327,9 @@ async function updateStudentGraduation() {
const successTd = document.createElement("td");
if (period.success) {
- successTd.innerHTML = "Graduierung erfolgreich"
+ successTd.innerHTML = "Graduierung erfolgreich";
} else {
- successTd.innerHTML = "Graduierung nicht erfolgreich"
+ successTd.innerHTML = "Graduierung nicht erfolgreich";
}
tr.appendChild(successTd);
@@ -363,4 +363,4 @@ window.onload = function() {
DEFAULT_STUDENT_ICON = document.getElementById("student-info-icon").src;
name = getName();
initCockpit();
-}
+};
diff --git a/src/group.js b/src/group.js
index ba5e1a0..d52707b 100644
--- a/src/group.js
+++ b/src/group.js
@@ -25,7 +25,7 @@ class Group {
}
}
-let groups = new Map();
+const groups = new Map();
function buildGroups(students) {
for (const student of students) {
diff --git a/src/mass-graduation.js b/src/mass-graduation.js
index 3cbf32a..0a69cd1 100644
--- a/src/mass-graduation.js
+++ b/src/mass-graduation.js
@@ -113,7 +113,7 @@ function observationClickHandler(li) {
async function loadGroup(selected) {
group = selected;
const students = await group.getStudents();
- let graduationPromises = [];
+ const graduationPromises = [];
document.getElementById("group-content").style.display = "block";
const ul = document.getElementById("group-members");
@@ -124,30 +124,30 @@ async function loadGroup(selected) {
const graduationPromise = student.getGraduation();
const li = document.createElement("li");
- li.classList.add("group-member")
+ li.classList.add("group-member");
// Remember the student of the entry
li.student = student;
const i = document.createElement("img");
- i.classList.add("group-member-icon")
+ i.classList.add("group-member-icon");
graduationPromise.then((graduation) => {
i.src = graduation.getIcon();
});
li.appendChild(i);
const n = document.createElement("span");
- n.classList.add("group-member-name")
+ n.classList.add("group-member-name");
n.innerHTML = `${student.name}`;
li.appendChild(n);
const ob = document.createElement("button");
- ob.classList.add("group-member-observation-icon")
+ ob.classList.add("group-member-observation-icon");
graduationPromise.then((graduation) => {
if (!graduation.isObserved()) {
return;
}
- ob.innerHTML = "&#128065"
+ ob.innerHTML = "&#128065";
ob.addEventListener("click", () => observationClickHandler(li) );
});
graduationPromises.push(graduationPromise);
@@ -156,7 +156,7 @@ async function loadGroup(selected) {
for (const col of ["green", "orange", "red"]) {
const b = document.createElement("button");
- b.classList.add(`group-member-${col}`)
+ b.classList.add(`group-member-${col}`);
b.innerHTML = "o";
b.addEventListener("click", () => toggle(b) );
li.appendChild(b);
@@ -167,7 +167,7 @@ async function loadGroup(selected) {
li.appendChild(textarea);
const p = document.createElement("button");
- p.classList.add("group-member-print")
+ p.classList.add("group-member-print");
p.innerHTML = "🖶";
p.addEventListener("click", () => printNote(li) );
li.appendChild(p);
@@ -176,7 +176,7 @@ async function loadGroup(selected) {
}
const graduations = await Promise.all(graduationPromises);
- let observations = graduations.filter(
+ const observations = graduations.filter(
(g) => g.observationRequested || (g.observation && !g.observation.end)
);
@@ -192,9 +192,8 @@ async function loadGroup(selected) {
const observationReuqestsNode = document.getElementById("observation-requests");
observationReuqestsNode.innerHTML = "";
observations.sort((g1, g2) => {
- let g1D, g2D;
- g1D = g1.observationRequested ? g1.observationRequested : g1.observation.start;
- g2D = g2.observationRequested ? g2.observationRequested : g2.observation.start;
+ const g1D = g1.observationRequested ? g1.observationRequested : g1.observation.start;
+ const g2D = g2.observationRequested ? g2.observationRequested : g2.observation.start;
return g1D - g2D;
});
@@ -256,7 +255,7 @@ function submitMassGraduation() {
// TODO(muhq): await graduation promises
- let promises = [];
+ const promises = [];
for(const li of document.querySelectorAll("li.group-member")) {
const reason = li.querySelector(".group-member-point-reason").value;
const student = li.student;
@@ -270,7 +269,7 @@ function submitMassGraduation() {
promises.push(submitGraduationChange(student, GraduationChange.newRedPointChange(reason, name)));
}
if (li.observationDiv) {
- let status = [];
+ const status = [];
for (const row of li.observationDiv.querySelectorAll("tbody > tr")) {
if (row.querySelector('td[data-yes="true"]').innerHTML === "X")
status.push("yes");
diff --git a/src/mock.js b/src/mock.js
index 91b1525..33d1a1a 100644
--- a/src/mock.js
+++ b/src/mock.js
@@ -83,13 +83,13 @@ function fetchPublicGraduationMock(s) {
}
function submitGraduationChangeMock(s, c) {
- console.assert(s.graduation, "no graduation")
+ console.assert(s.graduation, "no graduation");
s.graduation.addChange(c);
}
function submitObservationMock(s, o) {
- console.assert(s.graduation, "no graduation")
- console.assert(s.graduation.observation, "no observation period")
+ console.assert(s.graduation, "no graduation");
+ console.assert(s.graduation.observation, "no observation period");
s.graduation.observation.addObservation(o);
}
diff --git a/src/selection.js b/src/selection.js
index eda20ae..bfaebc0 100644
--- a/src/selection.js
+++ b/src/selection.js
@@ -22,7 +22,7 @@ async function initSelection(idPrefix, fetchCandidates, fmtCandidate, onSelectio
const candidates = await fetchCandidates();
loader.style.display = "none";
- let items = [];
+ const items = [];
let currentFocus = -1;
let visibleItems = [];
@@ -34,7 +34,7 @@ async function initSelection(idPrefix, fetchCandidates, fmtCandidate, onSelectio
}
for (const candidate of candidates) {
- let item = document.createElement("li");
+ const item = document.createElement("li");
item.candidate = candidate;
item.innerHTML = fmtCandidate(candidate);
item.style.display = 'none';
@@ -109,62 +109,4 @@ async function initSelection(idPrefix, fetchCandidates, fmtCandidate, onSelectio
});
}
-function pointClickHandler(color) {
- const textareaDiv = document.getElementById("student-info-point-reason-container");
- const textarea = document.getElementById("student-info-point-reason");
- const submitBtn = document.getElementById("student-info-point-reason-submit");
-
- // TODO(muhq): Prefill the textarea with common reasons
- switch (color) {
- case "green":
- textarea.style.background = "rgb(from green r g b / 20%)"
- textarea.value = "";
- break;
- case "orange":
- textarea.style.background = "rgb(from orange r g b / 20%)"
- textarea.value = "";
- break;
- case "red":
- textarea.style.background = "rgb(from red r g b / 20%)"
- textarea.value = "";
- break;
- }
- textareaDiv.style.display = "block";
- textarea.focus();
-
- // Can not use string interpolation because of Moodle's firstname filter.
- const coach = firstname + " " + lastname;
-
- let submit = function() {
- let change;
- switch (color) {
- case "green":
- change = GraduationChange.newGreenPointChange(student, textarea.value, coach);
- break;
- case "orange":
- change = GraduationChange.newOrangePointChange(student, textarea.value, coach);
- break;
- case "red":
- change = GraduationChange.newRedPointChange(student, textarea.value, coach);
- break;
- default:
- alert("Invalid color");
- break;
- }
- submitGraduationChange(student, change);
- textareaDiv.style.display = "none";
- updateStudentInfo();
- }
- // Use onEVENT to override any previous handler
- textarea.onkeydown = function(e) {
- if (e.shiftKey && e.key === "Enter") {
- submit();
- }
- if (e.key === "Escape") {
- textareaDiv.style.display = "none";
- }
- };
- submitBtn.onclick = submit;
-}
-
export { initSelection };