diff --git a/launch.html b/launch.html
index 10e5573..8321767 100644
--- a/launch.html
+++ b/launch.html
@@ -272,6 +272,53 @@
color: #0066cc;
}
+ /*
+ * Verhindert abgeschnittene Inhalte, wenn die Karte
+ * höher als der Viewport ist ("center" schneidet oben ab).
+ */
+ @supports (align-items: safe center) {
+ body {
+ align-items: safe center;
+ }
+ }
+
+ /*
+ * Schmale Bildschirme: Navbar umbrechen lassen,
+ * Abstände und Logo verkleinern.
+ */
+ @media (max-width: 600px) {
+ body {
+ align-items: flex-start;
+ padding-top: 130px;
+ }
+
+ .navbar {
+ top: 8px;
+ left: 4%;
+ width: 92%;
+ padding: 10px;
+ flex-wrap: wrap;
+ }
+
+ .logo-bar img {
+ height: 40px;
+ }
+
+ .nav-actions {
+ flex-wrap: wrap;
+ justify-content: flex-end;
+ }
+
+ button, .button {
+ padding: 10px 14px;
+ font-size: 15px;
+ }
+
+ .card {
+ padding: 20px;
+ }
+ }
+
@keyframes spin {
to {
transform: rotate(360deg);
@@ -1737,7 +1784,7 @@
function generateICS(meetingName, description, startTime, endTime, organizer) {
/* Generate a unique room name from the meeting name */
const roomName = createRoomName(meetingName);
- const meetingUrl = `https://${CONFIG.jitsiLauncher}/launch.html?room=${encodeURIComponent(roomName)}`;
+ const meetingUrl = createLaunchUrl(roomName);
/* Format dates for ICS */
const formatICSDate = (date) => {
@@ -1935,6 +1982,24 @@ END:VCALENDAR`;
* ============================================================
*/
+ /*
+ * Zeitspanne, nach der der "Kopiert!"-Text zum
+ * normalen Button-Label zurückkehrt.
+ */
+ const COPY_RESET_MS = 2000;
+
+ /*
+ * Launch-URL, die das Meeting im Jitsi-Client öffnet.
+ *
+ * Beispiel:
+ *
+ * "projekt-kickoff" ergibt
+ * https://meet.bnvb.eu/launch.html?room=projekt-kickoff
+ */
+ function createLaunchUrl(roomName) {
+ return `https://${CONFIG.jitsiLauncher}/launch.html?room=${encodeURIComponent(roomName)}`;
+ }
+
function createAdhocLink() {
const meetingName = meetingNameInput.value.trim();
@@ -1943,13 +2008,14 @@ END:VCALENDAR`;
return;
}
- if (!ROOM_PATTERN.test(createRoomName(meetingName))) {
+ const roomName = createRoomName(meetingName);
+
+ if (!ROOM_PATTERN.test(roomName)) {
alert(getTranslation('creator.meetingNameInvalid') || 'Meeting name may only contain letters, numbers and hyphens');
return;
}
- const roomName = createRoomName(meetingName);
- const url = `https://${CONFIG.jitsiLauncher}/launch.html?room=${encodeURIComponent(roomName)}`;
+ const url = createLaunchUrl(roomName);
adhocLink.href = url;
adhocLink.textContent = url;
@@ -1961,6 +2027,7 @@ END:VCALENDAR`;
async function copyAdhocLink() {
const url = adhocLink.href;
+ /* Clipboard-API, mit Fallback für ältere Browser */
try {
await navigator.clipboard.writeText(url);
} catch (error) {
@@ -1972,10 +2039,11 @@ END:VCALENDAR`;
document.body.removeChild(input);
}
+ /* Kurzes Feedback, dann zurück zum normalen Label */
copyAdhocLinkButton.textContent = getTranslation('creator.copiedLabel') || 'Copied!';
setTimeout(() => {
copyAdhocLinkButton.textContent = getTranslation('creator.copyLinkButton') || 'Copy Link';
- }, 2000);
+ }, COPY_RESET_MS);
}
function cancelCreateMeeting() {