/* =================================================================== Dateiablage. Hochgeladen wird der rohe Dateiinhalt, der Name steht im Kopf -- deshalb braucht der Server kein multipart/form-data zu zerlegen. Wer was sehen und freigeben darf, entscheidet ausschliesslich er. =================================================================== */ (() => { 'use strict'; /* DogFather und Manager haben dieselben Rechte -- die Unterscheidung macht nur die Personenverwaltung, und die prueft der Server. */ /* Die Leitungsliste steht in bereiche.js -- eine Antwort statt neun. Sie stand hier frueher selbst, ohne 'spicy', und genau das war der Fehler, den Filipe am 07.09.2026 gefunden hat. */ const LEITUNG = window.Bereiche.LEITUNG; const $ = (id) => document.getElementById(id); const STATUSNAME = { entwurf: 'Entwurf', review: 'Review', freigegeben: 'Freigegeben' }; const WEITER = { entwurf: 'review', review: 'freigegeben' }; const ZURUECK = { review: 'entwurf', freigegeben: 'review' }; let ich = null; let filter = ''; let maxBytes = 25 * 1024 * 1024; const el = (tag, klasse, text) => { const k = document.createElement(tag); if (klasse) k.className = klasse; if (text !== undefined) k.textContent = text; return k; }; const melde = (t) => { $('fehler').textContent = t || ''; }; async function hole(pfad, optionen = {}) { const a = await fetch(pfad, { credentials: 'same-origin', ...optionen }); if (a.status === 401) { location.assign('/workspace/'); throw new Error('abgemeldet'); } return a; } function groesse(bytes) { if (bytes < 1024) return bytes + ' B'; if (bytes < 1024 * 1024) return Math.round(bytes / 1024) + ' KB'; return (bytes / 1024 / 1024).toFixed(1).replace('.', ',') + ' MB'; } const datum = (iso) => (iso ? iso.slice(0, 10).split('-').reverse().join('.') : '—'); /* ---------- Wer darf die Datei sehen ------------------------------------ Kleine Schalter statt einer Mehrfachliste: In einer