A previous `git pull --rebase origin main` dropped 177 local commits,
losing 3400+ files across admin-v2, backend, studio-v2, website,
klausur-service, and many other services. The partial restore attempt
(660295e2) only recovered some files.
This commit restores all missing files from pre-rebase ref 98933f5e
while preserving post-rebase additions (night-scheduler, night-mode UI,
NightModeWidget dashboard integration).
Restored features include:
- AI Module Sidebar (FAB), OCR Labeling, OCR Compare
- GPU Dashboard, RAG Pipeline, Magic Help
- Klausur-Korrektur (8 files), Abitur-Archiv (5+ files)
- Companion, Zeugnisse-Crawler, Screen Flow
- Full backend, studio-v2, website, klausur-service
- All compliance SDKs, agent-core, voice-service
- CI/CD configs, documentation, scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
154 lines
4.4 KiB
Python
154 lines
4.4 KiB
Python
"""
|
|
BreakPilot Studio - Modulare Frontend-Architektur
|
|
|
|
Diese Datei ist der zentrale Einstiegspunkt fuer das Studio-Frontend.
|
|
Sie laedt alle Module und kombiniert sie zu einer vollstaendigen Seite.
|
|
|
|
Architektur:
|
|
- Jedes Modul (base, jitsi, letters, worksheets, correction) liefert CSS, HTML und JS
|
|
- Diese werden hier zusammengefuegt
|
|
- Das Ergebnis ist eine vollstaendige HTML-Seite
|
|
|
|
Module:
|
|
- BaseLayoutModule: TopBar, Sidebar, Footer, Theme Toggle, Login
|
|
- JitsiModule: Videokonferenzen (Elterngespraeche, Schulungen)
|
|
- LettersModule: Elternbriefe mit rechtssicherer Sprache
|
|
- WorksheetsModule: Lerneinheiten und Arbeitsblaetter
|
|
- CorrectionModule: Klausurkorrektur mit OCR und AI
|
|
"""
|
|
|
|
from .modules import (
|
|
BaseLayoutModule,
|
|
DashboardModule,
|
|
JitsiModule,
|
|
LettersModule,
|
|
WorksheetsModule,
|
|
CorrectionModule,
|
|
MessengerModule,
|
|
SchoolModule,
|
|
ContentCreatorModule,
|
|
ContentFeedModule,
|
|
KlausurKorrekturModule,
|
|
AbiturDocsAdminModule,
|
|
RbacAdminModule,
|
|
MailInboxModule,
|
|
# SecurityModule entfernt - jetzt in /dev-admin verfuegbar
|
|
)
|
|
|
|
|
|
def get_studio_html() -> str:
|
|
"""
|
|
Generiert die vollstaendige Studio-HTML-Seite aus allen Modulen.
|
|
|
|
Returns:
|
|
str: Vollstaendige HTML-Seite mit allen Modulen
|
|
"""
|
|
# CSS von allen Modulen sammeln
|
|
all_css = "\n".join([
|
|
BaseLayoutModule.get_css(),
|
|
DashboardModule.get_css(),
|
|
JitsiModule.get_css(),
|
|
LettersModule.get_css(),
|
|
WorksheetsModule.get_css(),
|
|
CorrectionModule.get_css(),
|
|
MessengerModule.get_css(),
|
|
SchoolModule.get_css(),
|
|
ContentCreatorModule.get_css(),
|
|
ContentFeedModule.get_css(),
|
|
KlausurKorrekturModule.get_css(),
|
|
AbiturDocsAdminModule.get_css(),
|
|
RbacAdminModule.get_css(),
|
|
MailInboxModule.get_css(),
|
|
# SecurityModule entfernt - jetzt in /dev-admin
|
|
])
|
|
|
|
# HTML von allen Modulen sammeln (Dashboard zuerst!)
|
|
all_module_html = "\n".join([
|
|
DashboardModule.get_html(),
|
|
JitsiModule.get_html(),
|
|
LettersModule.get_html(),
|
|
WorksheetsModule.get_html(),
|
|
CorrectionModule.get_html(),
|
|
MessengerModule.get_html(),
|
|
SchoolModule.get_html(),
|
|
ContentCreatorModule.get_html(),
|
|
ContentFeedModule.get_html(),
|
|
KlausurKorrekturModule.get_html(),
|
|
AbiturDocsAdminModule.get_html(),
|
|
RbacAdminModule.get_html(),
|
|
MailInboxModule.get_html(),
|
|
# SecurityModule entfernt - jetzt in /dev-admin
|
|
])
|
|
|
|
# JavaScript von allen Modulen sammeln
|
|
all_js = "\n".join([
|
|
BaseLayoutModule.get_js(),
|
|
DashboardModule.get_js(),
|
|
JitsiModule.get_js(),
|
|
LettersModule.get_js(),
|
|
WorksheetsModule.get_js(),
|
|
CorrectionModule.get_js(),
|
|
MessengerModule.get_js(),
|
|
SchoolModule.get_js(),
|
|
ContentCreatorModule.get_js(),
|
|
ContentFeedModule.get_js(),
|
|
KlausurKorrekturModule.get_js(),
|
|
AbiturDocsAdminModule.get_js(),
|
|
RbacAdminModule.get_js(),
|
|
MailInboxModule.get_js(),
|
|
# SecurityModule entfernt - jetzt in /dev-admin
|
|
])
|
|
|
|
# Base HTML Struktur mit allen eingefuegten Modulen
|
|
base_html = BaseLayoutModule.get_html()
|
|
|
|
# Module HTML in den main-content Bereich einfuegen
|
|
# Suche nach dem Platzhalter <!-- MODULE_PANELS --> und ersetze ihn
|
|
if "<!-- MODULE_PANELS -->" in base_html:
|
|
base_html = base_html.replace("<!-- MODULE_PANELS -->", all_module_html)
|
|
else:
|
|
# Fallback: Fuege Module vor dem schliessenden main-content ein
|
|
base_html = base_html.replace(
|
|
"</div><!-- /main-content -->",
|
|
f"{all_module_html}\n </div><!-- /main-content -->"
|
|
)
|
|
|
|
# Vollstaendige HTML-Seite zusammenbauen
|
|
html = f"""<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>BreakPilot Studio</title>
|
|
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
|
|
<style>
|
|
{all_css}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
{base_html}
|
|
<script>
|
|
{all_js}
|
|
|
|
// Note: Initialization is handled by BaseLayoutModule DOMContentLoaded
|
|
console.log('BreakPilot Studio - Modular Architecture ready');
|
|
</script>
|
|
</body>
|
|
</html>"""
|
|
|
|
return html
|
|
|
|
|
|
def get_studio_page():
|
|
"""
|
|
Kompatibilitaets-Wrapper fuer bestehende API.
|
|
|
|
Returns:
|
|
str: Vollstaendige HTML-Seite
|
|
"""
|
|
return get_studio_html()
|
|
|
|
|
|
# Fuer direkten Import
|
|
studio_html = get_studio_html
|