Voeg 28 herkenbare kleurplaten en creatieve niveaus toe (v0.4.66-beta) #4

Open
bes-r wants to merge 207 commits from bes-r/kleurplaten-v0-4-66 into main AGit
3 changed files with 33 additions and 16 deletions
Showing only changes of commit 14115b79ad - Show all commits

View file

@ -426,7 +426,12 @@
.formMsg{min-height:20px; font-size:13.5px; font-weight:700; color:var(--red); margin:6px 0;}
.formMsg.ok{color:var(--green);}
.guestnote{font-size:13px; color:var(--muted); margin-top:12px; line-height:1.45;}
#settingsModal .hello{font-size:18px; font-weight:800; margin-bottom:14px;}
/* instellingen: neutrale kaarten per sectie (.am-reset, hergebruikt van het
beheerpaneel) i.p.v. het speelse bord-uiterlijk - dit scherm is voor volwassenen */
#settingsModal .am-h3:first-of-type{margin-top:0;}
#settingsModal .am-reset .lrow{margin:0;}
#settingsModal .am-reset .guestnote{margin-top:2px;}
#settingsModal .am-name{font-size:16px;}
/* =========================================================
Letter game widget
==========================================================*/

View file

@ -24,7 +24,6 @@
<button class="tbtn ghost" id="btnFolders">📁</button>
<button class="tbtn ghost" id="btnSave">💾 <span data-i18n="saveBoard"></span></button>
<button class="tbtn ghost" id="btnUser">👤 <span id="userLbl"></span></button>
<button class="tbtn ghost" id="btnSettings" style="display:none;">⚙️</button>
<button class="tbtn ghost" id="btnAdmin" style="display:none;">👥</button>
<div id="langToggle">
<button data-lang="nl">NL</button>
@ -101,10 +100,20 @@
</div>
<div class="modalwrap" id="settingsWrap">
<div class="modal" id="settingsModal">
<div class="am-head">
<h2 data-i18n="settingsTitle"></h2>
<div class="hello" id="helloLbl"></div>
<button class="wclose" id="btnSettingsClose"></button>
</div>
<div class="am-h3" data-i18n="stAccount"></div>
<div class="am-reset">
<div class="am-name" id="helloName"></div>
<div class="am-role" id="helloRole"></div>
</div>
<div class="am-h3" data-i18n="stPassword"></div>
<div class="am-reset" id="ownPwBlock">
<div id="settingsMsg" class="formMsg"></div>
<div id="ownPwBlock">
<div class="lrow">
<input type="password" id="ownPw" maxlength="64" autocomplete="new-password">
<button class="tbtn ghost pwtoggle" type="button" id="btnOwnPwToggle" data-i18n="pwShow"></button>
@ -114,11 +123,15 @@
<button class="tbtn ghost" id="btnOwnPw" data-i18n="pwChange"></button>
</div>
</div>
<div class="am-h3" data-i18n="stSession"></div>
<div class="am-reset">
<div class="lrow">
<button class="tbtn ghost" id="btnLogout" data-i18n="logout"></button>
</div>
<div class="guestnote" data-i18n="storedNote"></div>
</div>
</div>
</div>
<div class="modalwrap" id="adminWrap">
<div class="modal" id="adminModal"></div>

View file

@ -112,6 +112,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",
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.",
@ -237,6 +238,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",
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.",
@ -373,16 +375,13 @@ 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 settingsBtn = document.getElementById("btnSettings");
settingsBtn.style.display = currentUser ? "" : "none";
settingsBtn.title = T("settingsTitle");
const adminBtn = document.getElementById("btnAdmin");
adminBtn.style.display = can("admin.access") ? "" : "none";
adminBtn.title = T("beheer");
if(currentUser){
document.getElementById("helloLbl").textContent =
`${T("hello")} ${currentUser.displayName}! 👋 · ${T(roleKey(currentUser.role))}`;
document.getElementById("ownPwBlock").style.display = can("password.own.change") ? "block" : "none";
document.getElementById("helloName").textContent = currentUser.displayName;
document.getElementById("helloRole").textContent = T(roleKey(currentUser.role));
document.getElementById("ownPwBlock").style.display = can("password.own.change") ? "flex" : "none";
}
}
/* login-modal tabs: "inloggen" vs "koppelcode activeren" */
@ -413,7 +412,7 @@ document.getElementById("btnUser").addEventListener("click", ()=>{
loadSchools();
loginWrap.classList.add("open");
});
document.getElementById("btnSettings").addEventListener("click", openSettings);
document.getElementById("btnSettingsClose").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"); });