fix: maak leerkrachtfuncties zichtbaar in voorbeeldmodus
Some checks failed
dev - build & deploy naar test / build-and-deploy (push) Failing after 1m10s
Some checks failed
dev - build & deploy naar test / build-and-deploy (push) Failing after 1m10s
This commit is contained in:
parent
ae8d0d4bb4
commit
b2f6a69897
7 changed files with 37 additions and 10 deletions
2
VERSION
2
VERSION
|
|
@ -1 +1 @@
|
||||||
0.4.55-beta
|
0.4.56-beta
|
||||||
|
|
|
||||||
|
|
@ -1326,12 +1326,15 @@
|
||||||
#ownPwBlock input{flex:1; min-width:0;}
|
#ownPwBlock input{flex:1; min-width:0;}
|
||||||
|
|
||||||
/* systeemmanager: veilige voorbeeldweergave van vaste rollen */
|
/* systeemmanager: veilige voorbeeldweergave van vaste rollen */
|
||||||
.vw-role-block[hidden],#rolePreviewBanner[hidden]{display:none}
|
.vw-role-block[hidden],#rolePreviewBanner[hidden],#rolePreviewTeacherActions[hidden]{display:none}
|
||||||
.vw-role-block{margin-bottom:8px;padding:10px 12px;border:1px solid var(--accent-soft);border-radius:12px;background:var(--surface-2)}
|
.vw-role-block{margin-bottom:8px;padding:10px 12px;border:1px solid var(--accent-soft);border-radius:12px;background:var(--surface-2)}
|
||||||
.vw-role-block .vw-row{align-items:flex-start;padding-top:0}.vw-role-seg{flex-wrap:wrap;justify-content:flex-end;max-width:min(620px,72%)}
|
.vw-role-block .vw-row{align-items:flex-start;padding-top:0}.vw-role-seg{flex-wrap:wrap;justify-content:flex-end;max-width:min(620px,72%)}
|
||||||
.vw-role-note{margin-top:7px}
|
.vw-role-note{margin-top:7px}
|
||||||
#rolePreviewBanner{position:fixed;top:calc(var(--tbar) + 8px);left:50%;z-index:5700;display:flex;align-items:center;gap:8px;transform:translateX(-50%);padding:7px 9px 7px 12px;border:1px solid var(--orange);border-radius:999px;background:var(--surface);box-shadow:var(--shadow-2);font-size:12px}
|
#rolePreviewBanner{position:fixed;top:calc(var(--tbar) + 8px);left:50%;z-index:5700;display:flex;align-items:center;gap:8px;transform:translateX(-50%);padding:7px 9px 7px 12px;border:1px solid var(--orange);border-radius:999px;background:var(--surface);box-shadow:var(--shadow-2);font-size:12px}
|
||||||
#rolePreviewBanner span{font-weight:800;color:var(--orange)}#rolePreviewBanner button{border:0;border-radius:999px;padding:5px 9px;background:color-mix(in srgb,var(--orange) 16%,var(--surface));color:var(--ink);font:inherit;font-weight:800;cursor:pointer}
|
#rolePreviewBanner span{font-weight:800;color:var(--orange)}#rolePreviewBanner button{border:0;border-radius:999px;padding:5px 9px;background:color-mix(in srgb,var(--orange) 16%,var(--surface));color:var(--ink);font:inherit;font-weight:800;cursor:pointer}
|
||||||
|
#rolePreviewTeacherActions{display:flex;align-items:center;gap:5px}
|
||||||
|
#rolePreviewTeacherActions button{background:var(--accent);color:#fff}
|
||||||
|
#rolePreviewTeacherActions button:hover,#rolePreviewTeacherActions button:focus-visible{filter:brightness(1.08);outline:2px solid var(--accent-soft);outline-offset:1px}
|
||||||
.role-preview-note{max-width:760px;margin:0 auto 14px;padding:11px 14px;border:1px solid var(--orange);border-radius:12px;background:color-mix(in srgb,var(--orange) 16%,var(--surface));color:var(--ink);font-size:13px;line-height:1.45}
|
.role-preview-note{max-width:760px;margin:0 auto 14px;padding:11px 14px;border:1px solid var(--orange);border-radius:12px;background:color-mix(in srgb,var(--orange) 16%,var(--surface));color:var(--ink);font-size:13px;line-height:1.45}
|
||||||
body.role-preview-active #parentView button:disabled,body.role-preview-active #parentView input:disabled,body.role-preview-active #parentView select:disabled{opacity:.55;cursor:not-allowed}
|
body.role-preview-active #parentView button:disabled,body.role-preview-active #parentView input:disabled,body.role-preview-active #parentView select:disabled{opacity:.55;cursor:not-allowed}
|
||||||
body.role-preview-pupil #pupilView .widget-body{pointer-events:none;user-select:none}
|
body.role-preview-pupil #pupilView .widget-body{pointer-events:none;user-select:none}
|
||||||
|
|
@ -1345,7 +1348,7 @@ body.role-preview-pupil #pupilView .widget-body{pointer-events:none;user-select:
|
||||||
body.role-preview-updating #board{visibility:hidden}
|
body.role-preview-updating #board{visibility:hidden}
|
||||||
@media(max-width:560px){.role-preview-widget-grid{grid-template-columns:1fr}}
|
@media(max-width:560px){.role-preview-widget-grid{grid-template-columns:1fr}}
|
||||||
body.tb-left #rolePreviewBanner,body.tb-right #rolePreviewBanner{top:8px}
|
body.tb-left #rolePreviewBanner,body.tb-right #rolePreviewBanner{top:8px}
|
||||||
@media(max-width:720px){.vw-role-block .vw-row{align-items:stretch;flex-direction:column}.vw-role-seg{max-width:none;justify-content:flex-start}#rolePreviewBanner{max-width:calc(100vw - 24px);white-space:nowrap}#rolePreviewBanner strong{display:none}}
|
@media(max-width:720px){.vw-role-block .vw-row{align-items:stretch;flex-direction:column}.vw-role-seg{max-width:none;justify-content:flex-start}#rolePreviewBanner{max-width:calc(100vw - 24px);flex-wrap:wrap;justify-content:center;border-radius:16px;white-space:nowrap}#rolePreviewBanner strong{display:none}#rolePreviewTeacherActions{order:3;width:100%;justify-content:center}}
|
||||||
|
|
||||||
/* ---------- weergave-instellingen (tabblad "Weergave") ---------- */
|
/* ---------- weergave-instellingen (tabblad "Weergave") ---------- */
|
||||||
.vw-row{
|
.vw-row{
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,15 @@
|
||||||
<button class="tbtn ghost" id="btnFs" title="Fullscreen">⛶</button>
|
<button class="tbtn ghost" id="btnFs" title="Fullscreen">⛶</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="rolePreviewBanner" hidden><strong data-i18n="vwPreview"></strong><span id="rolePreviewLabel"></span><button type="button" data-i18n="vwPreviewReset"></button></div>
|
<div id="rolePreviewBanner" hidden>
|
||||||
|
<strong data-i18n="vwPreview"></strong>
|
||||||
|
<span id="rolePreviewLabel"></span>
|
||||||
|
<div id="rolePreviewTeacherActions" hidden>
|
||||||
|
<button type="button" id="rolePreviewPath" data-i18n="vwTeacherPath"></button>
|
||||||
|
<button type="button" id="rolePreviewDashboard" data-i18n="vwTeacherDashboard"></button>
|
||||||
|
</div>
|
||||||
|
<button type="button" id="rolePreviewReset" data-i18n="vwPreviewReset"></button>
|
||||||
|
</div>
|
||||||
<div id="board"></div>
|
<div id="board"></div>
|
||||||
<div id="pupilView"></div>
|
<div id="pupilView"></div>
|
||||||
<div id="parentView"></div>
|
<div id="parentView"></div>
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,8 @@
|
||||||
] },
|
] },
|
||||||
{ tab:"toewijzingen", icon:"🎯", group:"school", order:12, labelKey:"amAssignments", subKey:"stToewijzSub",
|
{ tab:"toewijzingen", icon:"🎯", group:"school", order:12, labelKey:"amAssignments", subKey:"stToewijzSub",
|
||||||
show:()=>can("assignments.manage"),
|
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",
|
{ tab:"voortgang", icon:"📈", group:"school", order:13, labelKey:"amProgress", subKey:"stVoortgangSub",
|
||||||
show:()=>can("progress.view"),
|
show:()=>can("progress.view"),
|
||||||
keywords:()=>["voortgang","progress","score","resultaten","results","tijdlijn","timeline"] },
|
keywords:()=>["voortgang","progress","score","resultaten","results","tijdlijn","timeline"] },
|
||||||
|
|
|
||||||
|
|
@ -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.4.55-beta";
|
const VERSION = "0.4.56-beta";
|
||||||
/* Safari en oudere mobiele browsers behandelen 100vh/100% soms als de hoogte
|
/* Safari en oudere mobiele browsers behandelen 100vh/100% soms als de hoogte
|
||||||
achter hun adres- en navigatiebalk. visualViewport geeft de werkelijk
|
achter hun adres- en navigatiebalk. visualViewport geeft de werkelijk
|
||||||
zichtbare hoogte; de CSS gebruikt deze pixelwaarde als betrouwbare bron en
|
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.",
|
wikiLanguageNote:"The official SLO goals and these implementation summaries are shown in Dutch.",
|
||||||
stUsersSub:"Accounts beheren: leerlingen, staf, ouders en aanmeldingen.",
|
stUsersSub:"Accounts beheren: leerlingen, staf, ouders en aanmeldingen.",
|
||||||
stKlassenSub:"Klassen aanmaken, koppelen en beheren.",
|
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.",
|
stVoortgangSub:"Volg per leerling de resultaten in de tijd.",
|
||||||
stScholenSub:"Scholen en systeemmanagers, over alle scholen heen.",
|
stScholenSub:"Scholen en systeemmanagers, over alle scholen heen.",
|
||||||
amSchoolMenu:"School", stSchoolMenuSub:"Scholen, klassen en gebruikers beheren.",
|
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",
|
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.",
|
vwRoleNote:"Alleen de interface verandert. Je blijft ingelogd als systeemmanager; serverrechten en gegevens wijzigen niet.",
|
||||||
vwPreview:"Voorbeeldweergave", vwPreviewReset:"Terug naar systeem",
|
vwPreview:"Voorbeeldweergave", vwPreviewReset:"Terug naar systeem",
|
||||||
|
vwTeacherPath:"🎯 Opdrachtenreeks", vwTeacherDashboard:"📈 Klasdashboard",
|
||||||
vwParentPreview:"Voorbeeld van het ouderportaal. Echte kindgegevens en acties zijn in deze weergave uitgeschakeld.",
|
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.",
|
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",
|
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.",
|
wikiLanguageNote:"The official SLO goals and these implementation summaries are shown in Dutch.",
|
||||||
stUsersSub:"Manage accounts: pupils, staff, parents and enrolments.",
|
stUsersSub:"Manage accounts: pupils, staff, parents and enrolments.",
|
||||||
stKlassenSub:"Create, link and manage classes.",
|
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.",
|
stVoortgangSub:"Follow each pupil's results over time.",
|
||||||
stScholenSub:"Schools and system managers, across all schools.",
|
stScholenSub:"Schools and system managers, across all schools.",
|
||||||
amSchoolMenu:"School", stSchoolMenuSub:"Manage schools, classes and users.",
|
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",
|
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.",
|
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",
|
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.",
|
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.",
|
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",
|
vwPupilAddWidget:"Add widget", vwPupilChooseWidget:"Choose a pupil widget",
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,10 @@
|
||||||
const roleSeg=document.getElementById("segViewRole");
|
const roleSeg=document.getElementById("segViewRole");
|
||||||
const banner=document.getElementById("rolePreviewBanner");
|
const banner=document.getElementById("rolePreviewBanner");
|
||||||
const bannerLabel=document.getElementById("rolePreviewLabel");
|
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={
|
const ROLE_KEYS={
|
||||||
super:"vwRoleSystem",admin:"vwRoleAdmin",teacher:"vwRoleTeacher",
|
super:"vwRoleSystem",admin:"vwRoleAdmin",teacher:"vwRoleTeacher",
|
||||||
parent:"vwRoleParent",pupil:"vwRolePupil"
|
parent:"vwRoleParent",pupil:"vwRolePupil"
|
||||||
|
|
@ -128,6 +131,7 @@
|
||||||
});
|
});
|
||||||
banner.hidden=!enabled||role==="super";
|
banner.hidden=!enabled||role==="super";
|
||||||
bannerLabel.textContent=enabled&&role!=="super"?roleLabel(role):"";
|
bannerLabel.textContent=enabled&&role!=="super"?roleLabel(role):"";
|
||||||
|
teacherActions.hidden=!enabled||role!=="teacher";
|
||||||
}
|
}
|
||||||
async function renderPreviewSurface(){
|
async function renderPreviewSurface(){
|
||||||
const sequence=++renderSequence;
|
const sequence=++renderSequence;
|
||||||
|
|
@ -169,6 +173,12 @@
|
||||||
roleSeg.querySelectorAll("button").forEach(button=>{
|
roleSeg.querySelectorAll("button").forEach(button=>{
|
||||||
button.addEventListener("click",()=>chooseRole(button.dataset.role));
|
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"));
|
resetButton.addEventListener("click",()=>chooseRole("super"));
|
||||||
document.addEventListener("userchange",()=>{
|
document.addEventListener("userchange",()=>{
|
||||||
if(isSystemManager()){
|
if(isSystemManager()){
|
||||||
|
|
|
||||||
|
|
@ -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,/pupilAllowedDefs\(\)\.includes\(def\)/);
|
||||||
assert.match(preview,/setActiveViewRole\("super"\)[\s\S]*?makeWidget\(def\)[\s\S]*?await doSave\(\)/);
|
assert.match(preview,/setActiveViewRole\("super"\)[\s\S]*?makeWidget\(def\)[\s\S]*?await doSave\(\)/);
|
||||||
assert.match(preview,/role-preview-add-widget/);
|
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,/currentUser\.role\s*=(?!=)/);
|
||||||
assert.doesNotMatch(preview,/api\(/);
|
assert.doesNotMatch(preview,/api\(/);
|
||||||
assert.match(css,/body\.role-preview-pupil #pupilView \.widget-body\{pointer-events:none/);
|
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.equal((core.match(new RegExp(key+':','g'))||[]).length,2,key);
|
||||||
}
|
}
|
||||||
assert.ok(core.includes('const VERSION = "'+version.trim()+'"'));
|
assert.ok(core.includes('const VERSION = "'+version.trim()+'"'));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue