Voeg 28 herkenbare kleurplaten en creatieve niveaus toe (v0.4.66-beta) #4
3 changed files with 48 additions and 5 deletions
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
|||
0.3.15-beta
|
||||
0.3.16-beta
|
||||
|
|
|
|||
|
|
@ -420,6 +420,23 @@
|
|||
live op, dus nieuwe woorden die je toevoegt komen vanzelf door zonder opnieuw
|
||||
toe te wijzen. Een expliciete "Toewijzen"-knop i.p.v. direct bij het kiezen van
|
||||
een bord opslaan, zodat een klas-brede wijziging niet per ongeluk gebeurt. */
|
||||
/* widgets van een eigen bord (voor de één-widget-keuze in assignmentRow);
|
||||
widgets zonder wid komen uit borden van vóór v0.3.13 en verschijnen pas
|
||||
na de eerstvolgende save van dat bord */
|
||||
function boardWidgets(boardId){
|
||||
let found = null;
|
||||
BS.folders.forEach(fo=>fo.boards.forEach(bo=>{ if(bo.id===boardId) found = bo; }));
|
||||
return ((found && found.data && found.data.widgets) || []).filter(w=>w.wid);
|
||||
}
|
||||
function describeCurrent(current){
|
||||
if(!current) return "";
|
||||
let s = `${T("amAssignedAs")} “${current.boardName || current.boardId}”`;
|
||||
if(current.widgetId){
|
||||
const wName = current.widgetType ? T("wg_"+current.widgetType) : current.widgetId;
|
||||
s += ` › ${wName} (${current.mode==="kijken" ? T("amModeWatch") : T("amModeWork")})`;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
function assignmentRow(target, boardOptions, current){
|
||||
const row = h("div","am-row");
|
||||
row.appendChild(h("span","am-name", target.label));
|
||||
|
|
@ -427,19 +444,43 @@
|
|||
sel.appendChild(new Option(T("amNoAssignment"), ""));
|
||||
boardOptions.forEach(b=>sel.appendChild(new Option(b.label, b.id)));
|
||||
sel.value = current ? current.boardId : "";
|
||||
const info = h("span","am-code", current ? `${T("amAssignedAs")} “${current.boardName || current.boardId}”` : "");
|
||||
/* keuze: heel bord (default, bestaand gedrag) of één widget + modus */
|
||||
const widgetSel = h("select","am-sel am-widget-sel");
|
||||
const modeSel = h("select","am-sel am-mode-sel");
|
||||
modeSel.appendChild(new Option(T("amModeWork"), "werken"));
|
||||
modeSel.appendChild(new Option(T("amModeWatch"), "kijken"));
|
||||
const syncWidgetSel = ()=>{
|
||||
widgetSel.innerHTML = "";
|
||||
widgetSel.appendChild(new Option(T("amWholeBoard"), ""));
|
||||
boardWidgets(sel.value).forEach(w=>widgetSel.appendChild(new Option(T("wg_"+w.id), w.wid)));
|
||||
widgetSel.value = (current && current.boardId===sel.value && current.widgetId) ? current.widgetId : "";
|
||||
widgetSel.style.display = sel.value ? "" : "none";
|
||||
syncModeSel();
|
||||
};
|
||||
const syncModeSel = ()=>{ modeSel.style.display = (sel.value && widgetSel.value) ? "" : "none"; };
|
||||
modeSel.value = current && current.mode ? current.mode : "werken";
|
||||
sel.addEventListener("change", syncWidgetSel);
|
||||
widgetSel.addEventListener("change", syncModeSel);
|
||||
const info = h("span","am-code", describeCurrent(current));
|
||||
row.appendChild(sel);
|
||||
row.appendChild(widgetSel);
|
||||
row.appendChild(modeSel);
|
||||
row.appendChild(info);
|
||||
syncWidgetSel();
|
||||
const apply = h("button","am-btn", T("amAssign"));
|
||||
apply.type = "button";
|
||||
apply.addEventListener("click", async ()=>{
|
||||
try{
|
||||
if(sel.value) await api(`/assignments/${target.type}/${target.id}`, {method:"PUT", body:{boardId: sel.value}});
|
||||
if(sel.value){
|
||||
const body = { boardId: sel.value };
|
||||
if(widgetSel.value){ body.widgetId = widgetSel.value; body.mode = modeSel.value; }
|
||||
await api(`/assignments/${target.type}/${target.id}`, {method:"PUT", body});
|
||||
}
|
||||
else await api(`/assignments/${target.type}/${target.id}`, {method:"DELETE"});
|
||||
if(target.type==="class"){ await reload(); }
|
||||
else{
|
||||
const a = (await api("/assignments/pupil/"+target.id)).assignment;
|
||||
info.textContent = a ? `${T("amAssignedAs")} “${a.boardName || a.boardId}”` : "";
|
||||
info.textContent = describeCurrent(a);
|
||||
msg(T("amAssignSaved"));
|
||||
}
|
||||
}catch(e){ msg(e.message); }
|
||||
|
|
|
|||
|
|
@ -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.3.15-beta";
|
||||
const VERSION = "0.3.16-beta";
|
||||
(function(){
|
||||
const tag = document.getElementById("verTag");
|
||||
tag.textContent = "v"+VERSION;
|
||||
|
|
@ -176,6 +176,7 @@ const I18N = {
|
|||
amAssignments:"Toewijzingen", amAssignClasses:"Per klas (standaard)", amAssignPupils:"Per leerling (uitzondering)",
|
||||
amPickPupil:"— kies een leerling —", amNoAssignment:"— geen toewijzing —",
|
||||
amAssignedAs:"Toegewezen:", amAssign:"Toewijzen", amAssignSaved:"Toewijzing opgeslagen.",
|
||||
amWholeBoard:"— heel bord —", amModeWatch:"kijken", amModeWork:"werken",
|
||||
amProgress:"Voortgang", amProgressEmpty:"Nog geen voortgang voor deze leerling.",
|
||||
amConfirmDel:"Weet je zeker dat je deze gebruiker wilt verwijderen?",
|
||||
amCopy:"kopieer", amCopyAll:"kopieer alles",
|
||||
|
|
@ -337,6 +338,7 @@ const I18N = {
|
|||
amAssignments:"Assignments", amAssignClasses:"Per class (default)", amAssignPupils:"Per pupil (override)",
|
||||
amPickPupil:"— pick a pupil —", amNoAssignment:"— no assignment —",
|
||||
amAssignedAs:"Assigned:", amAssign:"Assign", amAssignSaved:"Assignment saved.",
|
||||
amWholeBoard:"— whole board —", amModeWatch:"watch", amModeWork:"work",
|
||||
amProgress:"Progress", amProgressEmpty:"No progress for this pupil yet.",
|
||||
amConfirmDel:"Are you sure you want to delete this user?",
|
||||
amCopy:"copy", amCopyAll:"copy all",
|
||||
|
|
|
|||
Loading…
Reference in a new issue