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
4 changed files with 20 additions and 23 deletions
Showing only changes of commit ebe622588f - Show all commits

View file

@ -1 +1 @@
0.3.86-beta 0.3.87-beta

View file

@ -49,13 +49,12 @@
document.body.removeChild(ta); document.body.removeChild(ta);
} }
const orig = btn.textContent; const orig = btn.textContent;
btn.textContent = ""; btn.textContent = "";
setTimeout(()=>{ btn.textContent = orig; }, 1200); setTimeout(()=>{ btn.textContent = orig; }, 1200);
} }
function copyBtn(text, cls){ function copyBtn(text, cls){
const b = h("button", cls || "am-copy", "📋"); const b = h("button", cls || "am-btn", T("amCopy"));
b.type = "button"; b.type = "button";
b.title = T("amCopy");
b.addEventListener("click", e=>{ e.preventDefault(); if(text) copyText(b, text); }); b.addEventListener("click", e=>{ e.preventDefault(); if(text) copyText(b, text); });
return b; return b;
} }
@ -92,7 +91,7 @@
b.addEventListener("click", async ()=>{ b.addEventListener("click", async ()=>{
if(!timer){ if(!timer){
b.classList.add("armed"); b.classList.add("armed");
b.textContent = "⚠ " + T("amSure"); b.textContent = T("amSure");
timer = setTimeout(()=>{ timer = null; b.classList.remove("armed"); b.textContent = label; }, 4000); timer = setTimeout(()=>{ timer = null; b.classList.remove("armed"); b.textContent = label; }, 4000);
return; return;
} }
@ -527,9 +526,8 @@
pwInp.placeholder = T("amPwOptional"); pwInp.placeholder = T("amPwOptional");
pwInp.addEventListener("keydown", ev=>ev.stopPropagation()); pwInp.addEventListener("keydown", ev=>ev.stopPropagation());
pwWrap.appendChild(pwInp); pwWrap.appendChild(pwInp);
const gen = h("button","am-btn","🎲"); const gen = h("button","am-btn", T("amGenerate"));
gen.type = "button"; gen.type = "button";
gen.title = T("amGenerate");
gen.addEventListener("click", async ()=>{ gen.addEventListener("click", async ()=>{
try{ try{
const { password } = await api("/admin/genpw"); const { password } = await api("/admin/genpw");
@ -677,7 +675,7 @@
return box; return box;
} }
const all = resetResults.entries.map(en=>`${en.displayName}\t${en.password}`).join("\n"); const all = resetResults.entries.map(en=>`${en.displayName}\t${en.password}`).join("\n");
const copyAll = h("button","am-btn","📋 "+T("amCopyAll")); const copyAll = h("button","am-btn", T("amCopyAll"));
copyAll.type = "button"; copyAll.type = "button";
copyAll.addEventListener("click", e=>{ e.preventDefault(); copyText(copyAll, all); }); copyAll.addEventListener("click", e=>{ e.preventDefault(); copyText(copyAll, all); });
box.appendChild(copyAll); box.appendChild(copyAll);
@ -703,7 +701,7 @@
SCHOOLS.forEach(s=>{ SCHOOLS.forEach(s=>{
const admins = SYS_ADMINS.filter(a=>Number(a.schoolId)===Number(s.id)); const admins = SYS_ADMINS.filter(a=>Number(a.schoolId)===Number(s.id));
const row = h("div","am-row am-row-school"); const row = h("div","am-row am-row-school");
row.appendChild(h("span","am-name", "🏫 " + s.name)); row.appendChild(h("span","am-name", s.name));
row.appendChild(h("span","am-role", row.appendChild(h("span","am-role",
`${admins.length} ${(admins.length===1 ? T("amAdminOne") : T("amAdmins")).toLowerCase()}`)); `${admins.length} ${(admins.length===1 ? T("amAdminOne") : T("amAdmins")).toLowerCase()}`));
/* zelfde -systeem als bij gebruikers: hernoemen en verwijderen /* zelfde -systeem als bij gebruikers: hernoemen en verwijderen
@ -729,9 +727,8 @@
}catch(e){ msg(e.message); } }catch(e){ msg(e.message); }
})); }));
tools.appendChild(field("amFieldActions", acts)); tools.appendChild(field("amFieldActions", acts));
const edit = h("button","am-edit","✏"); const edit = h("button","am-edit", T("amEdit"));
edit.type = "button"; edit.type = "button";
edit.title = T("amEdit");
const key = "school:"+s.id; const key = "school:"+s.id;
const sync = ()=>{ const sync = ()=>{
const open = openRows.has(key); const open = openRows.has(key);
@ -747,7 +744,7 @@
row.appendChild(tools); row.appendChild(tools);
list.appendChild(row); list.appendChild(row);
/* de schoolbeheerders van deze school, duidelijk onderscheiden van de /* de schoolbeheerders van deze school, duidelijk onderscheiden van de
schoolrij (🛡-icoon, ingesprongen) maar met hetzelfde -gereedschap */ schoolrij (ingesprongen) maar met hetzelfde bewerk-gereedschap */
admins.forEach(a=>list.appendChild(userRow(a, { sub:true }))); admins.forEach(a=>list.appendChild(userRow(a, { sub:true })));
}); });
panel.appendChild(list); panel.appendChild(list);
@ -1247,7 +1244,7 @@
function schoolContextBar(){ function schoolContextBar(){
if(currentUser.role !== "super") return null; if(currentUser.role !== "super") return null;
const bar = h("div","am-schoolbar"); const bar = h("div","am-schoolbar");
bar.appendChild(h("span","am-schoolbar-lbl","🏫")); bar.appendChild(h("span","am-schoolbar-lbl", T("amFieldSchool")));
const sel = h("select","am-sel"); const sel = h("select","am-sel");
sel.appendChild(new Option(T("amAllSchools"), "")); sel.appendChild(new Option(T("amAllSchools"), ""));
SCHOOLS.forEach(s=>sel.appendChild(new Option(s.name, s.id))); SCHOOLS.forEach(s=>sel.appendChild(new Option(s.name, s.id)));

View file

@ -151,7 +151,7 @@ let CMS = {};
const pick = document.createElement("select"); const pick = document.createElement("select");
pick.className = "am-sel"; pick.className = "am-sel";
pick.appendChild(new Option(T("cmsWidgetPick"), "")); pick.appendChild(new Option(T("cmsWidgetPick"), ""));
REGISTRY.forEach(def=>pick.appendChild(new Option(def.icon + " " + T("wg_"+def.id), def.id))); REGISTRY.forEach(def=>pick.appendChild(new Option(T("wg_"+def.id), def.id)));
const editor = cmsEl("div"); const editor = cmsEl("div");
editor.style.display = "none"; editor.style.display = "none";
pick.addEventListener("change", ()=>{ pick.addEventListener("change", ()=>{

View file

@ -2,7 +2,7 @@
"use strict"; "use strict";
/* version shown until /api/version resolves (or if the fetch fails, e.g. offline). /* 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. */ Kept in sync by hand with the VERSION file at the repo root on every release. */
const VERSION = "0.3.86-beta"; const VERSION = "0.3.87-beta";
(function(){ (function(){
const tag = document.getElementById("verTag"); const tag = document.getElementById("verTag");
tag.textContent = "v"+VERSION; tag.textContent = "v"+VERSION;
@ -200,7 +200,7 @@ const I18N = {
login:"Inloggen", loginBtn:"Inloggen", registerBtn:"Account maken", logout:"Uitloggen", login:"Inloggen", loginBtn:"Inloggen", registerBtn:"Account maken", logout:"Uitloggen",
settingsTitle:"Instellingen", tabLogin:"Inloggen", tabLinkCode:"Koppelcode", busy:"Bezig…", settingsTitle:"Instellingen", tabLogin:"Inloggen", tabLinkCode:"Koppelcode", busy:"Bezig…",
stAccount:"Account", stPassword:"Wachtwoord", stSession:"Sessie", stAccount:"Account", stPassword:"Wachtwoord", stSession:"Sessie",
stSearchPh:"🔎 Zoeken in instellingen…", stNoResults:"Niets gevonden.", stSearchPh:"Zoeken in instellingen…", stNoResults:"Niets gevonden.",
stOpenSection:"open dit onderdeel", stOpenSection:"open dit onderdeel",
stGroupPersonal:"Persoonlijk", stGroupSchool:"School", stGroupSystem:"Systeem", stGroupPersonal:"Persoonlijk", stGroupSchool:"School", stGroupSystem:"Systeem",
stAccountSub:"Je gegevens, wachtwoord en reservekopieën.", stAccountSub:"Je gegevens, wachtwoord en reservekopieën.",
@ -265,7 +265,7 @@ const I18N = {
pupilEmpty:"Je leerkracht heeft nog niets voor je klaargezet.", pupilEmpty:"Je leerkracht heeft nog niets voor je klaargezet.",
pupilWatching:"meekijken", pupilWatching:"meekijken",
amUsers:"Gebruikers", amClasses:"Klassen", amSchools:"Scholen", amOverarching:"Systeem", amUsers:"Gebruikers", amClasses:"Klassen", amSchools:"Scholen", amOverarching:"Systeem",
amPickSchoolHint:"Kies hierboven eerst een school (🏫).", amPickSchool:"Kies een school", amPickSchoolHint:"Kies hierboven eerst een school.", amPickSchool:"Kies een school",
amPupils:"Leerlingen", amPupilOne:"Leerling", amEdit:"Bewerken", amPupils:"Leerlingen", amPupilOne:"Leerling", amEdit:"Bewerken",
amAdmins:"Schoolbeheerders", amAdminOne:"Schoolbeheerder", amAdmins:"Schoolbeheerders", amAdminOne:"Schoolbeheerder",
amClassAdd:"— voeg toe aan klas… —", amClassRemove:"Uit deze klas halen", amClassAdd:"— voeg toe aan klas… —", amClassRemove:"Uit deze klas halen",
@ -276,7 +276,7 @@ const I18N = {
amNewCodeWarn:"Maakt een nieuwe koppelcode aan. Het huidige wachtwoord vervalt direct; de gebruiker moet opnieuw activeren.", amNewCodeWarn:"Maakt een nieuwe koppelcode aan. Het huidige wachtwoord vervalt direct; de gebruiker moet opnieuw activeren.",
amDeleteWarn:"Verwijdert dit account definitief, inclusief borden en woorden.", amDeleteWarn:"Verwijdert dit account definitief, inclusief borden en woorden.",
amResultPw:"Nieuw wachtwoord", amResultCode:"Nieuwe koppelcode", amResultPw:"Nieuw wachtwoord", amResultCode:"Nieuwe koppelcode",
amColStatus:"Status", amNeverLoggedIn:"nog niet ingelogd", amColStatus:"Status", amNeverLoggedIn:"nog niet ingelogd", amFieldSchool:"School",
amDetailEmpty:"Selecteer links een gebruiker om te bewerken, of maak een nieuwe aan.", amDetailEmpty:"Selecteer links een gebruiker om te bewerken, of maak een nieuwe aan.",
amNewUser:"Nieuwe gebruiker", amRequestOne:"Aanmelding", amReqNew:"nieuw", amNewUser:"Nieuwe gebruiker", amRequestOne:"Aanmelding", amReqNew:"nieuw",
amParents:"Ouders", amParents:"Ouders",
@ -293,7 +293,7 @@ const I18N = {
amNewSchool:" School", amNewClass:" Klas", amNewTeacher:" Groepsleiding", amNewSchool:" School", amNewClass:" Klas", amNewTeacher:" Groepsleiding",
amNewAdmin:" Schoolbeheerder", amNewSuper:" Systeemmanager", amNewAdmin:" Schoolbeheerder", amNewSuper:" Systeemmanager",
amNewPupil:" Leerling", amUserPh:"gebruikersnaam…", amNamePh:"naam…", amNewPupil:" Leerling", amUserPh:"gebruikersnaam…", amNamePh:"naam…",
amSearchPh:"🔎 zoek op naam…", amSearchPh:"zoek op naam…",
amCode:"koppelcode", amNewCode:"nieuwe code", amPw:"wachtwoord", amCode:"koppelcode", amNewCode:"nieuwe code", amPw:"wachtwoord",
amNoClass:"— geen klas —", amPending:"nog niet geactiveerd", amNoClass:"— geen klas —", amPending:"nog niet geactiveerd",
amCouple:"koppel leerkracht", amAllSchools:"— alle scholen —", amSuperGroup:"Systeem", amCouple:"koppel leerkracht", amAllSchools:"— alle scholen —", amSuperGroup:"Systeem",
@ -492,7 +492,7 @@ const I18N = {
login:"Log in", loginBtn:"Log in", registerBtn:"Create account", logout:"Log out", login:"Log in", loginBtn:"Log in", registerBtn:"Create account", logout:"Log out",
settingsTitle:"Settings", tabLogin:"Log in", tabLinkCode:"Link code", busy:"Please wait…", settingsTitle:"Settings", tabLogin:"Log in", tabLinkCode:"Link code", busy:"Please wait…",
stAccount:"Account", stPassword:"Password", stSession:"Session", stAccount:"Account", stPassword:"Password", stSession:"Session",
stSearchPh:"🔎 Search settings…", stNoResults:"Nothing found.", stSearchPh:"Search settings…", stNoResults:"Nothing found.",
stOpenSection:"open this section", stOpenSection:"open this section",
stGroupPersonal:"Personal", stGroupSchool:"School", stGroupSystem:"System", stGroupPersonal:"Personal", stGroupSchool:"School", stGroupSystem:"System",
stAccountSub:"Your details, password and backups.", stAccountSub:"Your details, password and backups.",
@ -557,7 +557,7 @@ const I18N = {
pupilEmpty:"Your teacher hasn't set up anything for you yet.", pupilEmpty:"Your teacher hasn't set up anything for you yet.",
pupilWatching:"watching", pupilWatching:"watching",
amUsers:"Users", amClasses:"Classes", amSchools:"Schools", amOverarching:"System", amUsers:"Users", amClasses:"Classes", amSchools:"Schools", amOverarching:"System",
amPickSchoolHint:"First pick a school above (🏫).", amPickSchool:"Pick a school", amPickSchoolHint:"First pick a school above.", amPickSchool:"Pick a school",
amPupils:"Pupils", amPupilOne:"Pupil", amEdit:"Edit", amPupils:"Pupils", amPupilOne:"Pupil", amEdit:"Edit",
amAdmins:"School admins", amAdminOne:"School admin", amAdmins:"School admins", amAdminOne:"School admin",
amClassAdd:"— add to class… —", amClassRemove:"Remove from this class", amClassAdd:"— add to class… —", amClassRemove:"Remove from this class",
@ -568,7 +568,7 @@ const I18N = {
amNewCodeWarn:"Generates a new link code. The current password stops working immediately; the user must re-activate.", amNewCodeWarn:"Generates a new link code. The current password stops working immediately; the user must re-activate.",
amDeleteWarn:"Deletes this account permanently, including boards and words.", amDeleteWarn:"Deletes this account permanently, including boards and words.",
amResultPw:"New password", amResultCode:"New link code", amResultPw:"New password", amResultCode:"New link code",
amColStatus:"Status", amNeverLoggedIn:"not signed in yet", amColStatus:"Status", amNeverLoggedIn:"not signed in yet", amFieldSchool:"School",
amDetailEmpty:"Select a user on the left to edit, or create a new one.", amDetailEmpty:"Select a user on the left to edit, or create a new one.",
amNewUser:"New user", amRequestOne:"Enrolment", amReqNew:"new", amNewUser:"New user", amRequestOne:"Enrolment", amReqNew:"new",
amParents:"Parents", amParents:"Parents",
@ -585,7 +585,7 @@ const I18N = {
amNewSchool:" School", amNewClass:" Class", amNewTeacher:" Group leader", amNewSchool:" School", amNewClass:" Class", amNewTeacher:" Group leader",
amNewAdmin:" School admin", amNewSuper:" System manager", amNewAdmin:" School admin", amNewSuper:" System manager",
amNewPupil:" Pupil", amUserPh:"username…", amNamePh:"name…", amNewPupil:" Pupil", amUserPh:"username…", amNamePh:"name…",
amSearchPh:"🔎 search by name…", amSearchPh:"search by name…",
amCode:"link code", amNewCode:"new code", amPw:"password", amCode:"link code", amNewCode:"new code", amPw:"password",
amNoClass:"— no class —", amPending:"not yet activated", amNoClass:"— no class —", amPending:"not yet activated",
amCouple:"link teacher", amAllSchools:"— all schools —", amSuperGroup:"System", amCouple:"link teacher", amAllSchools:"— all schools —", amSuperGroup:"System",