From 43c7892eb7435e1c5e6c2217baf5a0172d72a81b Mon Sep 17 00:00:00 2001 From: Ramon Date: Mon, 13 Jul 2026 16:13:01 +0200 Subject: [PATCH] =?UTF-8?q?v0.2.13-beta:=20=C3=A9=C3=A9n=20instellingenmen?= =?UTF-8?q?u=20-=20beheer,=20versie=20en=20copyright=20samengevoegd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Werkbalk teruggebracht tot één ⚙️-knop (was 👤 + los 👥-beheerknop + los versienummer bij het logo) - Beheerpaneel-knop verplaatst in Instellingen (nieuwe "Beheer"-sectie, alleen zichtbaar met rechten); opent nog steeds hetzelfde beheerpaneel, sluit nu ook Instellingen zodat er geen twee schermen over elkaar staan - Versienummer verplaatst van de werkbalk naar de voettekst van Instellingen - Copyright-regel toegevoegd in de voettekst ("© Ramon Besselink") - Taal/contrast/geluid bewust NIET verplaatst: die blijven op de werkbalk omdat ze ook zonder inloggen (gastgebruik) bruikbaar moeten blijven, terwijl Instellingen alleen open gaat na inloggen Co-Authored-By: Claude Sonnet 5 --- public/css/teach.css | 10 +++++++--- public/index.html | 16 +++++++++++++--- public/js/core.js | 13 ++++++++----- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/public/css/teach.css b/public/css/teach.css index 9874e47..9215d11 100644 --- a/public/css/teach.css +++ b/public/css/teach.css @@ -37,7 +37,7 @@ .logo .l4{color:var(--blue); transform:rotate(5deg) translateY(-1px);} .logo .l5{color:var(--purple); transform:rotate(-4deg);} .logo .crayon{font-size:24px; margin-left:6px; transform:rotate(10deg);} - #verTag{font-size:10.5px; font-weight:700; color:var(--muted); align-self:flex-end; margin-left:4px; transform:none;} + #verTag{font-size:10.5px; font-weight:700; color:var(--muted);} #verTag.beta{color:#fff; background:var(--orange); padding:1px 7px; border-radius:8px;} .logo:hover span:not(.crayon){animation:bounce .5s;} .logo .l2{animation-delay:.05s;} .logo .l3{animation-delay:.1s;} @@ -431,6 +431,11 @@ #settingsModal .am-h3:first-of-type{margin-top:0;} #settingsModal .am-reset .lrow{margin:0;} #settingsModal .am-reset .guestnote{margin-top:2px;} + .st-footer{ + display:flex; justify-content:space-between; align-items:center; gap:8px; + margin-top:16px; padding-top:12px; border-top:1.5px solid #e3eaf3; + font-size:11px; color:var(--muted); + } #settingsModal .am-name{font-size:16px;} /* ========================================================= Letter game widget @@ -812,7 +817,7 @@ body.hc .lg-ed-form input[type=text],body.hc .ed-pictorow input{border-color:#000; color:#000;} body.hc .np-result{background:#0047ab;} body.hc .np-row label,body.hc .thint,body.hc .guestnote,body.hc .ed-credit, - body.hc .bp-hint,body.hc .gcard .gd{color:#222;} + body.hc .bp-hint,body.hc .gcard .gd,body.hc .st-footer{color:#222;} body.hc .gcard{border-color:#000; background:#fff;} body.hc .gcat-title{color:#000;} body.hc .tbtn.ghost{background:#fff; border:2px solid #000; color:#000;} @@ -1059,7 +1064,6 @@ body.hc .am-reset,body.hc .am-reset-row{border:1.5px solid #000; background:#fff #toolbar{padding:0 8px; gap:6px;} .logo{font-size:22px;} .logo .crayon{font-size:18px; margin-left:4px;} - #verTag{font-size:9px; margin-left:2px;} .tbtn{padding:8px 10px; font-size:13px;} #boardsPanel{top:60px; max-height:min(66vh,480px);} diff --git a/public/index.html b/public/index.html index 6221b87..a6447b2 100644 --- a/public/index.html +++ b/public/index.html @@ -13,7 +13,6 @@ @@ -23,8 +22,7 @@
- - +
@@ -124,6 +122,13 @@
+ + +
@@ -131,6 +136,11 @@
+ +
diff --git a/public/js/core.js b/public/js/core.js index f666156..a6ec1a6 100644 --- a/public/js/core.js +++ b/public/js/core.js @@ -20,6 +20,7 @@ const VERSION = "0.2.10"; }) .catch(()=>{}); })(); +document.getElementById("copyright").textContent = "© "+new Date().getFullYear()+" Ramon Besselink"; /* ========================================================= i18n ==========================================================*/ @@ -112,7 +113,7 @@ const I18N = { tmHint:"Sleep aan de rode schijf om de tijd in te stellen.", login:"Inloggen", loginBtn:"Inloggen", registerBtn:"Account maken", logout:"Uitloggen", settingsTitle:"Instellingen", tabLogin:"Inloggen", tabLinkCode:"Koppelcode", busy:"Bezig…", - stAccount:"Account", stPassword:"Wachtwoord", stSession:"Sessie", + stAccount:"Account", stPassword:"Wachtwoord", stSession:"Sessie", openAdmin:"Beheerpaneel", pwChanged:"Wachtwoord gewijzigd ✓", namePh:"naam", passPh:"wachtwoord", guestNote:"Zonder inloggen wordt niets bewaard. Log in met je schoolaccount om alles op de server te bewaren.", @@ -238,7 +239,7 @@ const I18N = { tmHint:"Drag the red disc to set the time.", login:"Log in", loginBtn:"Log in", registerBtn:"Create account", logout:"Log out", settingsTitle:"Settings", tabLogin:"Log in", tabLinkCode:"Link code", busy:"Please wait…", - stAccount:"Account", stPassword:"Password", stSession:"Session", + stAccount:"Account", stPassword:"Password", stSession:"Session", openAdmin:"Admin panel", pwChanged:"Password changed ✓", namePh:"name", passPh:"password", guestNote:"Without logging in nothing is saved. Log in with your school account to keep everything on the server.", @@ -375,9 +376,9 @@ const roleKey = r => r==="super" ? "roleSuper" : r==="admin" ? "roleAdmin" : r== function updateUserUI(){ document.getElementById("userLbl").textContent = currentUser ? currentUser.displayName : T("login"); document.getElementById("btnUser").classList.toggle("on", !!currentUser); - const adminBtn = document.getElementById("btnAdmin"); - adminBtn.style.display = can("admin.access") ? "" : "none"; - adminBtn.title = T("beheer"); + const showAdmin = can("admin.access"); + document.getElementById("stAdminLbl").style.display = showAdmin ? "" : "none"; + document.getElementById("adminBlock").style.display = showAdmin ? "flex" : "none"; if(currentUser){ document.getElementById("helloName").textContent = currentUser.displayName; document.getElementById("helloRole").textContent = T(roleKey(currentUser.role)); @@ -413,6 +414,8 @@ document.getElementById("btnUser").addEventListener("click", ()=>{ loginWrap.classList.add("open"); }); document.getElementById("btnSettingsClose").addEventListener("click", ()=>settingsWrap.classList.remove("open")); +/* Beheer wordt vanuit Instellingen geopend: dat scherm zelf dicht zodat er geen twee modals over elkaar staan */ +document.getElementById("btnAdmin").addEventListener("click", ()=>settingsWrap.classList.remove("open")); loginWrap.addEventListener("click", e=>{ if(e.target===loginWrap) loginWrap.classList.remove("open"); }); settingsWrap.addEventListener("click", e=>{ if(e.target===settingsWrap) settingsWrap.classList.remove("open"); });