Aktive Klassen-Simulation
';
+ html += '
đź“‹ Aktive Klassen-Aufgabe
';
+ var anyPrepared = false;
activeAssign.forEach(function(a) {
var mod = mods.find(function(m){return m.id===a.module_id;});
- var name = mod ? mod.icon + ' ' + mod.name : a.module_id;
- var end = a.ends_at ? ' · bis ' + new Date(a.ends_at).toLocaleDateString('de-AT',{day:'2-digit',month:'2-digit',hour:'2-digit',minute:'2-digit'}) : ' · ohne Zeitlimit';
- html += '
';
- html += '
' + (mod?.icon||'đź“‹') + '';
- html += '
' + esc(mod?.name||a.module_id) + '';
- html += ' · Level ' + a.level + end + '
';
- html += '
';
- html += '
';
+ var paused = mod ? !!mod.paused : false;
+ if (paused) anyPrepared = true;
+ var img = (mod && mod.card_image) ? 'assets/img/'+mod.card_image : null;
+ var thumb = img
+ ? '

'
+ : '
'+(mod?mod.icon:'đź“‹')+'';
+ var end = a.ends_at ? 'fällig ' + new Date(a.ends_at).toLocaleDateString('de-AT',{weekday:'short',day:'2-digit',month:'2-digit',hour:'2-digit',minute:'2-digit'}) : 'ohne Zeitlimit';
+ var stateBadge = paused
+ ? '
⏸ Vorbereitet'
+ : '
▶ Läuft';
+ html += '
';
+ html += thumb;
+ html += '
'+esc(mod?mod.name:a.module_id)+' · Stufe '+a.level+'
';
+ html += '
'+stateBadge+' '+end+'
';
+ html += '
';
+ if (paused) {
+ html += '';
+ } else {
+ html += '';
+ }
+ html += '';
+ html += '
';
});
+ if (anyPrepared) {
+ html += '
⏸ Vorbereitet: Die Klasse sieht den Auftrag bereits, kann aber erst loslegen, wenn du „▶ Start freigeben" drückst — so starten alle gemeinsam.
';
+ }
html += '
';
}
// Start-Button
- html += '
';
+ html += '
';
// Vorbereitung: spielbare vs. geplante Module trennen (vor Matrix nutzen)
var modsActive = mods.filter(function(m){ return m.status !== 'geplant' && m.status !== 'archiv'; });
@@ -3021,11 +3046,34 @@ async function showStartSim(preselectedModuleId) {
sel.innerHTML = '';
ALL_MODS.forEach(function(m) { var o=document.createElement('option'); o.value=m.id; o.textContent=(m.icon||'')+' '+m.name; sel.appendChild(o); });
if (preselectedModuleId) sel.value = preselectedModuleId;
- document.getElementById('ss-ends').value = '';
document.getElementById('ss-paused').checked = false;
document.getElementById('ss-level').value = '1';
+ ssSetDue('woche'); // Default-Frist: +1 Woche (Hausübung); setzt Feld + Bestätigung
showModal('modal-startsim');
}
+function _ssPad(n){ return String(n).padStart(2,'0'); }
+function _ssDtLocal(d){ return d.getFullYear()+'-'+_ssPad(d.getMonth()+1)+'-'+_ssPad(d.getDate())+'T'+_ssPad(d.getHours())+':'+_ssPad(d.getMinutes()); }
+function ssSetDue(kind){
+ var el = document.getElementById('ss-ends');
+ if (kind === '') { el.value = ''; ssUpdateSummary(); return; }
+ var d = new Date();
+ if (kind === 'morgen') d.setDate(d.getDate()+1);
+ else if (kind === 'woche') d.setDate(d.getDate()+7);
+ d.setHours(13, 0, 0, 0);
+ el.value = _ssDtLocal(d);
+ ssUpdateSummary();
+}
+function ssUpdateSummary(){
+ var el = document.getElementById('ss-summary'); if (!el) return;
+ var modSel = document.getElementById('ss-module');
+ var modTxt = (modSel && modSel.options[modSel.selectedIndex]) ? modSel.options[modSel.selectedIndex].text : '—';
+ var lvl = document.getElementById('ss-level').value;
+ var ends = document.getElementById('ss-ends').value;
+ var paused = document.getElementById('ss-paused').checked;
+ var endTxt = ends ? new Date(ends).toLocaleDateString('de-AT',{weekday:'short',day:'2-digit',month:'2-digit',hour:'2-digit',minute:'2-digit'}) : 'ohne Zeitlimit';
+ var startTxt = paused ? '⏸ startet auf dein Signal' : '▶ startet sofort';
+ el.innerHTML = '
'+esc(modTxt)+' · Stufe '+lvl+' · fällig
'+esc(endTxt)+' · '+startTxt;
+}
async function startSimulation() {
var moduleId = document.getElementById('ss-module').value;
var level = parseInt(document.getElementById('ss-level').value);