### feat: verbessere PDF-Handling und füge neuen Versionsmarker hinzu
All checks were successful
All checks were successful
- **WebMainScreen:** Implementiere Öffnen von Ausschreibungen (PDFs) in neuem Tab. - **UI:** Ergänze dezentralen Versions-Marker in der Web-Oberfläche. - **Docker-Publish:** Kopiere Turnier-Ausschreibungen (PDFs) in den Zielordner. - **Assets:** Füge neue PDF-Dateien für Neumarkt2026 hinzu.
This commit is contained in:
parent
eea022b862
commit
dbbca96c69
|
|
@ -84,6 +84,8 @@ jobs:
|
|||
rm -rf "$TARGET_DIR"
|
||||
mkdir -p "$TARGET_DIR"
|
||||
cp -r "$DIST_DIR"/. "$TARGET_DIR/"
|
||||
# Kopiere Turnier-Ausschreibungen (PDFs) für Plan-B
|
||||
cp docs/Neumarkt2026/*.pdf "$TARGET_DIR/" || true
|
||||
|
||||
echo "✓ Assets für Docker vorbereitet (Stand: $(date))"
|
||||
|
||||
|
|
|
|||
BIN
docs/Neumarkt2026/26128.pdf
Normal file
BIN
docs/Neumarkt2026/26128.pdf
Normal file
Binary file not shown.
BIN
docs/Neumarkt2026/26129.pdf
Normal file
BIN
docs/Neumarkt2026/26129.pdf
Normal file
Binary file not shown.
|
|
@ -214,22 +214,6 @@ fun OnlineNennungFormular(
|
|||
color = AppColors.Primary
|
||||
)
|
||||
|
||||
if (!isMobile) {
|
||||
Text(
|
||||
text = "https://nennung.mo-code.at/#/nennung/$turnierNr",
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
color = AppColors.Primary.copy(alpha = 0.6f),
|
||||
modifier = Modifier.padding(bottom = 4.dp)
|
||||
)
|
||||
Text(
|
||||
text = "v2026-04-23.7 - URL-ROUTING", // Version erhöht für URL-Routing Fix
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
fontWeight = FontWeight.Bold,
|
||||
color = Color.Blue, // Farbe geändert für neue Version
|
||||
modifier = Modifier.padding(bottom = 4.dp).background(Color.Black.copy(alpha = 0.05f))
|
||||
)
|
||||
}
|
||||
|
||||
Text(
|
||||
text = "Turnier-Nr: $turnierNr | Datum: ${if (turnierNr == "26128") "25. April 2026" else "26. April 2026"}",
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
|
|
|
|||
|
|
@ -35,6 +35,9 @@ private fun setWindowHash(hash: String): Unit = js("window.location.hash = hash"
|
|||
@OptIn(ExperimentalWasmJsInterop::class)
|
||||
private fun onHashChange(onChanged: () -> Unit): Unit = js("window.addEventListener('hashchange', onChanged)")
|
||||
|
||||
@OptIn(ExperimentalWasmJsInterop::class)
|
||||
private fun openInNewTab(url: String): Unit = js("window.open(url, '_blank')")
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun MainAppContent() {
|
||||
|
|
@ -88,6 +91,9 @@ fun MainAppContent() {
|
|||
},
|
||||
onNennenClick = { vId, tId ->
|
||||
currentScreen = WebScreen.Nennung(vId, tId)
|
||||
},
|
||||
onAusschreibungClick = { pdfUrl ->
|
||||
openInNewTab(pdfUrl)
|
||||
}
|
||||
)
|
||||
|
||||
|
|
@ -112,6 +118,15 @@ fun MainAppContent() {
|
|||
onBack = { currentScreen = WebScreen.Landing }
|
||||
)
|
||||
}
|
||||
|
||||
// Dezentraler Versions-Marker in der unteren rechten Ecke
|
||||
Box(modifier = Modifier.fillMaxSize().padding(8.dp), contentAlignment = Alignment.BottomEnd) {
|
||||
Text(
|
||||
text = "v2026-04-23.9",
|
||||
style = MaterialTheme.typography.labelSmall,
|
||||
color = Color.LightGray.copy(alpha = 0.5f)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -149,7 +164,8 @@ fun Erfolgsscreen(email: String, onBack: () -> Unit) {
|
|||
@Composable
|
||||
fun LandingPage(
|
||||
onVeranstaltungClick: (Long) -> Unit,
|
||||
onNennenClick: (Long, Long) -> Unit
|
||||
onNennenClick: (Long, Long) -> Unit,
|
||||
onAusschreibungClick: (String) -> Unit
|
||||
) {
|
||||
val veranstaltungen = remember {
|
||||
listOf(
|
||||
|
|
@ -195,7 +211,8 @@ fun LandingPage(
|
|||
items(veranstaltungen) { veranstaltung ->
|
||||
VeranstaltungsCardWeb(
|
||||
veranstaltung = veranstaltung,
|
||||
onNennenClick = { tId -> onNennenClick(veranstaltung.id, tId) }
|
||||
onNennenClick = { tId -> onNennenClick(veranstaltung.id, tId) },
|
||||
onAusschreibungClick = onAusschreibungClick
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -204,7 +221,8 @@ fun LandingPage(
|
|||
@Composable
|
||||
fun VeranstaltungsCardWeb(
|
||||
veranstaltung: VeranstaltungWebModel,
|
||||
onNennenClick: (Long) -> Unit
|
||||
onNennenClick: (Long) -> Unit,
|
||||
onAusschreibungClick: (String) -> Unit
|
||||
) {
|
||||
Card(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
|
|
@ -230,7 +248,8 @@ fun VeranstaltungsCardWeb(
|
|||
veranstaltung.turniere.forEach { turnier ->
|
||||
TurnierCardWeb(
|
||||
turnier = turnier,
|
||||
onNennenClick = { onNennenClick(turnier.id) }
|
||||
onNennenClick = { onNennenClick(turnier.id) },
|
||||
onAusschreibungClick = { onAusschreibungClick(turnier.pdfUrl) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -240,7 +259,8 @@ fun VeranstaltungsCardWeb(
|
|||
@Composable
|
||||
fun TurnierCardWeb(
|
||||
turnier: TurnierWebModel,
|
||||
onNennenClick: () -> Unit
|
||||
onNennenClick: () -> Unit,
|
||||
onAusschreibungClick: () -> Unit
|
||||
) {
|
||||
BoxWithConstraints {
|
||||
val isMobile = maxWidth < 500.dp
|
||||
|
|
@ -258,7 +278,7 @@ fun TurnierCardWeb(
|
|||
horizontalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
TextButton(
|
||||
onClick = { /* PDF öffnen Logik */ },
|
||||
onClick = onAusschreibungClick,
|
||||
modifier = Modifier.weight(1f)
|
||||
) {
|
||||
Icon(Icons.Default.Description, contentDescription = null)
|
||||
|
|
@ -287,7 +307,7 @@ fun TurnierCardWeb(
|
|||
}
|
||||
|
||||
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
TextButton(onClick = { /* PDF öffnen Logik */ }) {
|
||||
TextButton(onClick = onAusschreibungClick) {
|
||||
Icon(Icons.Default.Description, contentDescription = null)
|
||||
Spacer(Modifier.width(4.dp))
|
||||
Text("Ausschreibung")
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user