diff --git a/VERSION b/VERSION index d692748..1f03f53 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.21-beta +0.4.22-beta diff --git a/public/index.html b/public/index.html index b9f1d0a..fa80deb 100644 --- a/public/index.html +++ b/public/index.html @@ -61,7 +61,7 @@ - +
diff --git a/public/js/admin.js b/public/js/admin.js index 965dbe6..56e61df 100644 --- a/public/js/admin.js +++ b/public/js/admin.js @@ -48,6 +48,12 @@ const creatableRoles = () => [...new Set([currentUser.role, ...(currentUser.extraRoles||[])].flatMap(r => CREATABLE_ROLES[r] || []))]; + /* wie er als groepsleiding aan een klas gekoppeld kan staan - zelfde rollenset + als de server accepteert in POST /admin/classes/:id/teachers (niet alleen + "teacher": een schoolbeheerder of systeemmanager mag ook aan een klas + gekoppeld worden, en moet dan ook als zodanig getoond worden). */ + const isClassStaff = u => ["teacher","admin","super"].includes(u.role); + const esc = s => String(s ?? "").replace(/&/g,"&").replace(/{ const el = document.createElement(tag); @@ -1084,7 +1090,7 @@ onClick: ()=>{ navLevel = { type:"flat", kind:"requests" }; render(); } })); } CLASSES.forEach(c=>{ - const staff = USERS.filter(u=>u.role==="teacher" && (u.classIds||[]).some(id=>Number(id)===Number(c.id))).length; + const staff = USERS.filter(u=>isClassStaff(u) && (u.classIds||[]).some(id=>Number(id)===Number(c.id))).length; const cp = pupils.filter(u=>u.classId===c.id).length; grid.appendChild(tile({ label:c.name, stats:[{text:`🧑🏫 ${staff}`},{text:`🧒 ${cp}`}], onClick: ()=>{ navLevel = { type:"class", id:c.id }; kebabOpen = false; render(); } })); @@ -1125,7 +1131,7 @@ panel.appendChild(titleRow); if(kebabOpen && canManageClasses) panel.appendChild(classActionsPanel(c, otherSchools)); - const staff = USERS.filter(u=>u.role==="teacher" && (u.classIds||[]).some(id=>Number(id)===Number(c.id))); + const staff = USERS.filter(u=>isClassStaff(u) && (u.classIds||[]).some(id=>Number(id)===Number(c.id))); panel.appendChild(h("p","am-section-label", T("roleTeacher"))); panel.appendChild(peopleList(staff)); if(creatableRoles().includes("teacher")) panel.appendChild(addForm("teacher", c.id)); diff --git a/public/js/board.js b/public/js/board.js index f124323..9a96957 100644 --- a/public/js/board.js +++ b/public/js/board.js @@ -120,7 +120,7 @@ function makeWidget(def, saved){ const lockBtn = document.createElement("button"); lockBtn.className="wmin wlock"; lockBtn.textContent="🔓"; head.appendChild(lockBtn); const previewBtn = document.createElement("button"); previewBtn.className="wmin wpreview"; previewBtn.textContent="◉"; head.appendChild(previewBtn); const zBtn = document.createElement("button"); - zBtn.className = "wmin wz"; zBtn.textContent = "A+"; + zBtn.className = "wmin wz"; zBtn.textContent = "A+"; head.appendChild(zBtn); const minBtn = document.createElement("button"); minBtn.className = "wmin"; minBtn.textContent = "–"; @@ -194,7 +194,7 @@ function makeWidget(def, saved){ function applyWZ(){ body.style.zoom = wz; win.dataset.wz = wz; - zBtn.textContent = wz===1 ? "A+" : Math.round(wz*100)+"%"; + zBtn.textContent = wz===1 ? "A+" : Math.round(wz*100)+"%"; zBtn.classList.toggle("on", wz!==1); zBtn.title = T("wZoom"); } diff --git a/public/js/core.js b/public/js/core.js index 216ffb3..a3b7c15 100644 --- a/public/js/core.js +++ b/public/js/core.js @@ -2,7 +2,7 @@ "use strict"; /* version — shown until /api/version resolves (or if the fetch fails, e.g. offline). Kept in sync by hand with the VERSION file at the repo root on every release. */ -const VERSION = "0.4.21-beta"; +const VERSION = "0.4.22-beta"; (function(){ const tag = document.getElementById("verTag"); tag.textContent = "v"+VERSION;