diff --git a/public/js/admin.js b/public/js/admin.js
index 8ef9b6b..8b4c60e 100644
--- a/public/js/admin.js
+++ b/public/js/admin.js
@@ -229,7 +229,8 @@
] },
{ tab:"toewijzingen", icon:"๐ฏ", group:"school", order:12, labelKey:"amAssignments", subKey:"stToewijzSub",
show:()=>can("assignments.manage"),
- keywords:()=>[T("amModeWatch"), T("amModeWork"), "bord","board","delen","share","toewijzen","assign","widget"] },
+ keywords:()=>[T("amModeWatch"), T("amModeWork"), T("amDashboardTitle"), T("castPathTitle"),
+ "bord","board","delen","share","toewijzen","assign","widget","dashboard","opdrachtenreeks","learning path"] },
{ tab:"voortgang", icon:"๐", group:"school", order:13, labelKey:"amProgress", subKey:"stVoortgangSub",
show:()=>can("progress.view"),
keywords:()=>["voortgang","progress","score","resultaten","results","tijdlijn","timeline"] },
diff --git a/public/js/core.js b/public/js/core.js
index 9c7a773..508fb68 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.55-beta";
+const VERSION = "0.4.56-beta";
/* Safari en oudere mobiele browsers behandelen 100vh/100% soms als de hoogte
achter hun adres- en navigatiebalk. visualViewport geeft de werkelijk
zichtbare hoogte; de CSS gebruikt deze pixelwaarde als betrouwbare bron en
@@ -281,7 +281,7 @@ const I18N = {
wikiLanguageNote:"The official SLO goals and these implementation summaries are shown in Dutch.",
stUsersSub:"Accounts beheren: leerlingen, staf, ouders en aanmeldingen.",
stKlassenSub:"Klassen aanmaken, koppelen en beheren.",
- stToewijzSub:"Bepaal wat een klas of leerling te zien krijgt.",
+ stToewijzSub:"Wijs borden en opdrachtenreeksen toe en bekijk het klasdashboard.",
stVoortgangSub:"Volg per leerling de resultaten in de tijd.",
stScholenSub:"Scholen en systeemmanagers, over alle scholen heen.",
amSchoolMenu:"School", stSchoolMenuSub:"Scholen, klassen en gebruikers beheren.",
@@ -307,6 +307,7 @@ const I18N = {
vwRole:"Weergave als", vwRoleSystem:"Systeem", vwRoleAdmin:"Schoolbeheerder", vwRoleTeacher:"Leerkracht", vwRoleParent:"Ouder", vwRolePupil:"Leerling",
vwRoleNote:"Alleen de interface verandert. Je blijft ingelogd als systeemmanager; serverrechten en gegevens wijzigen niet.",
vwPreview:"Voorbeeldweergave", vwPreviewReset:"Terug naar systeem",
+ vwTeacherPath:"๐ฏ Opdrachtenreeks", vwTeacherDashboard:"๐ Klasdashboard",
vwParentPreview:"Voorbeeld van het ouderportaal. Echte kindgegevens en acties zijn in deze weergave uitgeschakeld.",
vwPupilPreview:"Voorbeeld van de leerlingomgeving met de taal- en rekenwidgets van het huidige bord. Bediening en voortgang zijn uitgeschakeld.",
vwPupilAddWidget:"Widget toevoegen", vwPupilChooseWidget:"Kies een leerlingwidget",
@@ -678,7 +679,7 @@ const I18N = {
wikiLanguageNote:"The official SLO goals and these implementation summaries are shown in Dutch.",
stUsersSub:"Manage accounts: pupils, staff, parents and enrolments.",
stKlassenSub:"Create, link and manage classes.",
- stToewijzSub:"Choose what a class or pupil gets to see.",
+ stToewijzSub:"Assign boards and learning paths and view the class dashboard.",
stVoortgangSub:"Follow each pupil's results over time.",
stScholenSub:"Schools and system managers, across all schools.",
amSchoolMenu:"School", stSchoolMenuSub:"Manage schools, classes and users.",
@@ -704,6 +705,7 @@ const I18N = {
vwRole:"View as", vwRoleSystem:"System", vwRoleAdmin:"School administrator", vwRoleTeacher:"Teacher", vwRoleParent:"Parent", vwRolePupil:"Pupil",
vwRoleNote:"Only the interface changes. You remain signed in as system manager; server permissions and data do not change.",
vwPreview:"Preview mode", vwPreviewReset:"Return to system",
+ vwTeacherPath:"๐ฏ Learning path", vwTeacherDashboard:"๐ Class dashboard",
vwParentPreview:"Preview of the parent portal. Real child data and actions are disabled in this view.",
vwPupilPreview:"Preview of the pupil environment using language and maths widgets from the current board. Controls and progress are disabled.",
vwPupilAddWidget:"Add widget", vwPupilChooseWidget:"Choose a pupil widget",
diff --git a/public/js/role-preview.js b/public/js/role-preview.js
index 07e710a..f7274ac 100644
--- a/public/js/role-preview.js
+++ b/public/js/role-preview.js
@@ -8,7 +8,10 @@
const roleSeg=document.getElementById("segViewRole");
const banner=document.getElementById("rolePreviewBanner");
const bannerLabel=document.getElementById("rolePreviewLabel");
- const resetButton=banner.querySelector("button");
+ const teacherActions=document.getElementById("rolePreviewTeacherActions");
+ const pathButton=document.getElementById("rolePreviewPath");
+ const dashboardButton=document.getElementById("rolePreviewDashboard");
+ const resetButton=document.getElementById("rolePreviewReset");
const ROLE_KEYS={
super:"vwRoleSystem",admin:"vwRoleAdmin",teacher:"vwRoleTeacher",
parent:"vwRoleParent",pupil:"vwRolePupil"
@@ -128,6 +131,7 @@
});
banner.hidden=!enabled||role==="super";
bannerLabel.textContent=enabled&&role!=="super"?roleLabel(role):"";
+ teacherActions.hidden=!enabled||role!=="teacher";
}
async function renderPreviewSurface(){
const sequence=++renderSequence;
@@ -169,6 +173,12 @@
roleSeg.querySelectorAll("button").forEach(button=>{
button.addEventListener("click",()=>chooseRole(button.dataset.role));
});
+ pathButton.addEventListener("click",()=>{
+ if(isSystemManager()&&activeRole()==="teacher")document.getElementById("btnCast").click();
+ });
+ dashboardButton.addEventListener("click",()=>{
+ if(isSystemManager()&&activeRole()==="teacher")openSettings("toewijzingen");
+ });
resetButton.addEventListener("click",()=>chooseRole("super"));
document.addEventListener("userchange",()=>{
if(isSystemManager()){
diff --git a/test/role-preview.test.js b/test/role-preview.test.js
index 727d2c6..994bc1a 100644
--- a/test/role-preview.test.js
+++ b/test/role-preview.test.js
@@ -42,10 +42,13 @@ test('Weergave bevat de vijf rollen en laadt de veilige voorbeeldmodule vรณรณr d
assert.match(preview,/pupilAllowedDefs\(\)\.includes\(def\)/);
assert.match(preview,/setActiveViewRole\("super"\)[\s\S]*?makeWidget\(def\)[\s\S]*?await doSave\(\)/);
assert.match(preview,/role-preview-add-widget/);
+ assert.match(html,/id="rolePreviewTeacherActions" hidden/);
+ assert.match(preview,/document\.getElementById\("btnCast"\)\.click\(\)/);
+ assert.match(preview,/openSettings\("toewijzingen"\)/);
assert.doesNotMatch(preview,/currentUser\.role\s*=(?!=)/);
assert.doesNotMatch(preview,/api\(/);
assert.match(css,/body\.role-preview-pupil #pupilView \.widget-body\{pointer-events:none/);
- for(const key of ['vwRole','vwRoleSystem','vwRoleAdmin','vwRoleTeacher','vwRoleParent','vwRolePupil','vwRoleNote','vwPreviewReset','vwPupilAddWidget','vwPupilChooseWidget','vwPupilAddWidgetNote']){
+ for(const key of ['vwRole','vwRoleSystem','vwRoleAdmin','vwRoleTeacher','vwRoleParent','vwRolePupil','vwRoleNote','vwPreviewReset','vwTeacherPath','vwTeacherDashboard','vwPupilAddWidget','vwPupilChooseWidget','vwPupilAddWidgetNote']){
assert.equal((core.match(new RegExp(key+':','g'))||[]).length,2,key);
}
assert.ok(core.includes('const VERSION = "'+version.trim()+'"'));