fix: Restore all files lost during destructive rebase
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>
This commit is contained in:
153
backend/frontend/studio_modular.py
Normal file
153
backend/frontend/studio_modular.py
Normal file
@@ -0,0 +1,153 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user