The form button generates the ICS file, so name it after the result. Move the Nextcloud button ahead of it, matching the visual weight of the primary actions.
358 lines
15 KiB
HTML
358 lines
15 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Jitsi Meeting</title>
|
|
<link id="faviconIco" href="assets/images/favicon.ico" rel="alternate icon">
|
|
<link id="appleTouchIcon" href="assets/images/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180">
|
|
<link id="faviconSvg" href="assets/images/favicon.svg" rel="icon" type="image/svg+xml">
|
|
<link rel="stylesheet" href="assets/css/launch.css">
|
|
</head>
|
|
|
|
<body>
|
|
<svg width="0" height="0" style="position: absolute;" aria-hidden="true">
|
|
<filter id="logo-dark-tint">
|
|
<feColorMatrix type="matrix" values="0 0 0 0 0.8667
|
|
0 0 0 0 0.8431
|
|
0 0 0 0 0.8235
|
|
0 0 0 1 0"/>
|
|
</filter>
|
|
</svg>
|
|
|
|
<nav class="navbar">
|
|
<div id="logoBar" class="logo-bar hidden">
|
|
<img id="logoImage" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="Logo">
|
|
</div>
|
|
<button id="navToggle" class="button secondary nav-toggle" type="button" aria-haspopup="true" aria-expanded="false" aria-controls="navActions" aria-label="Menu">
|
|
<svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M4 7h16M4 12h16M4 17h16"/>
|
|
</svg>
|
|
</button>
|
|
<div id="navActions" class="nav-actions">
|
|
<a id="legalNoticeLink" class="button secondary hidden" href="#" target="_blank" rel="noopener noreferrer" data-i18n="legal_notice">
|
|
Legal Notice
|
|
</a>
|
|
<button id="windowsHelpButton" class="button secondary hidden" type="button" data-i18n="help.meetingPrivacySettings.windows.navButton">
|
|
Help
|
|
</button>
|
|
<a class="button secondary" href="https://git.bnvb.eu/stefan.tollkuehn/jitsi-launch" target="_blank" rel="noopener noreferrer" data-i18n="source">
|
|
Source
|
|
</a>
|
|
<div id="langMenu" class="lang-menu">
|
|
<button id="langButton" class="button secondary" type="button" aria-haspopup="true" aria-expanded="false">
|
|
<img id="langFlag" class="lang-flag" src="assets/images/uk.svg" alt="">
|
|
<span id="langLabel">English</span>
|
|
</button>
|
|
<div id="langDropdown" class="lang-dropdown">
|
|
<button type="button" data-lang="en"><img class="lang-flag" src="assets/images/uk.svg" alt="">English</button>
|
|
<button type="button" data-lang="de"><img class="lang-flag" src="assets/images/de.svg" alt="">Deutsch</button>
|
|
<button type="button" data-lang="fr"><img class="lang-flag" src="assets/images/fr.svg" alt="">Français</button>
|
|
<button type="button" data-lang="zh"><img class="lang-flag" src="assets/images/cn.svg" alt="">中文</button>
|
|
</div>
|
|
</div>
|
|
<button id="themeButton" class="button secondary" type="button" aria-label="Toggle dark mode">
|
|
<svg id="themeIconMoon" class="theme-icon" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/>
|
|
</svg>
|
|
<svg id="themeIconSun" class="theme-icon hidden" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
<circle cx="12" cy="12" r="4"/>
|
|
<path d="M12 2v2m0 16v2M4.9 4.9l1.4 1.4m11.4 11.4 1.4 1.4M2 12h2m16 0h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/>
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="container">
|
|
<div class="card">
|
|
|
|
<!-- NORMALER LAUNCHER -->
|
|
<div id="launcher" class="hidden">
|
|
<h1 data-i18n="launcher.title">Jitsi Meeting</h1>
|
|
|
|
<p>
|
|
<span data-i18n="launcher.meetingText">
|
|
Please click the button, to join the meeting:
|
|
</span>
|
|
<span class="room">
|
|
<strong id="roomName"></strong>
|
|
</span>
|
|
</p>
|
|
|
|
<button id="openButton" class="button primary" type="button" data-i18n="launcher.openButton">
|
|
Join meeting
|
|
</button>
|
|
|
|
<button id="createNewFromLauncherButton" class="button secondary hidden" type="button" data-i18n="creator.createNewButton">
|
|
Create New Meeting
|
|
</button>
|
|
</div>
|
|
|
|
<!-- STARTVORGANG -->
|
|
<div id="starting" class="hidden">
|
|
<h1 data-i18n="starting.title">
|
|
Starting Jitsi Meet …
|
|
</h1>
|
|
|
|
<div class="status">
|
|
<span class="spinner"></span>
|
|
<span data-i18n="starting.status">
|
|
The Jitsi Meet desktop client is being opened.
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- FALLBACK -->
|
|
<div id="fallback" class="hidden">
|
|
<h1 data-i18n="fallback.title">
|
|
Jitsi Meet could not be opened
|
|
</h1>
|
|
|
|
<p data-i18n="fallback.description">
|
|
The Jitsi Meet desktop client may not have been started.
|
|
</p>
|
|
|
|
<button id="retryButton" class="button primary" type="button" data-i18n="fallback.retryButton">
|
|
Try again
|
|
</button>
|
|
|
|
<!-- Windows -->
|
|
<div id="windowsDownload" class="download hidden">
|
|
<h2 data-i18n="downloads.windows.title">
|
|
Jitsi Meet for Microsoft Windows
|
|
</h2>
|
|
|
|
<p data-i18n="downloads.windows.description">
|
|
Install the Jitsi Meet desktop client and then try opening the meeting again.
|
|
</p>
|
|
|
|
<a id="windowsLink" class="button secondary" target="_blank" rel="noopener noreferrer" data-i18n="downloads.windows.button">
|
|
Download Jitsi for Windows
|
|
</a>
|
|
</div>
|
|
|
|
<!-- macOS -->
|
|
<div id="macosDownload" class="download hidden">
|
|
<h2 data-i18n="downloads.macos.title">
|
|
Jitsi Meet for Apple macOS
|
|
</h2>
|
|
|
|
<p data-i18n="downloads.macos.description">
|
|
Install the Jitsi Meet desktop client and then try opening the meeting again.
|
|
</p>
|
|
|
|
<a id="macosLink" class="button secondary" target="_blank" rel="noopener noreferrer" data-i18n="downloads.macos.button">
|
|
Download Jitsi for macOS
|
|
</a>
|
|
</div>
|
|
|
|
<!-- Linux -->
|
|
<div id="linuxDownload" class="download hidden">
|
|
<h2 data-i18n="downloads.linux.title">
|
|
Jitsi Meet for Linux
|
|
</h2>
|
|
|
|
<p data-i18n="downloads.linux.description">
|
|
Install the Jitsi Meet desktop client and then try opening the meeting again.
|
|
</p>
|
|
|
|
<a id="linuxLink" class="button secondary" target="_blank" rel="noopener noreferrer" data-i18n="downloads.linux.button">
|
|
Download Jitsi for Linux
|
|
</a>
|
|
</div>
|
|
|
|
<!-- iOS -->
|
|
<div id="iosDownload" class="download hidden">
|
|
<h2 data-i18n="downloads.ios.title">
|
|
Jitsi Meet for iOS
|
|
</h2>
|
|
|
|
<p data-i18n="downloads.ios.description">
|
|
Install the Jitsi Meet app and then try opening the meeting again.
|
|
</p>
|
|
|
|
<a id="iosLink" class="button secondary" target="_blank" rel="noopener noreferrer" data-i18n="downloads.ios.button">
|
|
Download Jitsi for iOS
|
|
</a>
|
|
</div>
|
|
|
|
<!-- Android -->
|
|
<div id="androidDownload" class="download hidden">
|
|
<h2 data-i18n="downloads.android.title">
|
|
Jitsi Meet for Android
|
|
</h2>
|
|
|
|
<p data-i18n="downloads.android.description">
|
|
Install the Jitsi Meet app and then try opening the meeting again.
|
|
</p>
|
|
|
|
<a id="androidLink" class="button secondary" target="_blank" rel="noopener noreferrer" data-i18n="downloads.android.button">
|
|
Download Jitsi for Android
|
|
</a>
|
|
</div>
|
|
|
|
<!-- unknown -->
|
|
<div id="otherDownload" class="download hidden">
|
|
<h2 data-i18n="downloads.other.title">
|
|
Jitsi Meet Desktop
|
|
</h2>
|
|
|
|
<p data-i18n="downloads.other.description">
|
|
No desktop download is configured for your operating system.
|
|
</p>
|
|
</div>
|
|
|
|
<!-- Browser -->
|
|
<div class="download">
|
|
<h2 data-i18n="browser.title">
|
|
Join in browser
|
|
</h2>
|
|
|
|
<p data-i18n="browser.description">
|
|
You can also join the meeting directly in your browser.
|
|
</p>
|
|
|
|
<a id="browserLink" class="button secondary" data-i18n="browser.button">
|
|
Join in browser
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- FEHLER -->
|
|
<div id="invalidRoom" class="hidden">
|
|
<h1 id="missingRoomTitle" data-i18n="error.title">
|
|
No meeting specified
|
|
</h1>
|
|
|
|
<div id="missingRoomError" class="error">
|
|
<span data-i18n="error.description">
|
|
Please specify a meeting using the
|
|
</span>
|
|
<code>?room=...</code>
|
|
<span data-i18n="error.descriptionSuffix">
|
|
parameter.
|
|
</span>
|
|
</div>
|
|
|
|
<h1 id="invalidNameTitle" class="hidden" data-i18n="error.invalidTitle">
|
|
Invalid meeting name
|
|
</h1>
|
|
|
|
<div id="invalidNameError" class="error hidden">
|
|
<span data-i18n="error.invalidDescription">
|
|
Only letters, numbers and hyphens are allowed:
|
|
</span>
|
|
<br>
|
|
<span class="room">
|
|
<strong id="invalidRoomName"></strong>
|
|
</span>
|
|
</div>
|
|
|
|
<div style="margin-top: 24px;">
|
|
<button id="createNewMeetingButton" class="button primary hidden" type="button" data-i18n="creator.createNewButton">
|
|
Create New Meeting
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- MEETING CREATOR -->
|
|
<div id="meetingCreator" class="hidden">
|
|
<h1 data-i18n="creator.title">Create New Meeting</h1>
|
|
|
|
<div class="form-group">
|
|
<label for="meetingName" data-i18n="creator.meetingNameLabel">Meeting Name</label>
|
|
<input type="text" id="meetingName" placeholder="My Meeting" data-i18n-placeholder="creator.meetingNamePlaceholder" />
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="meetingDescription" data-i18n="creator.meetingDescriptionLabel">Description</label>
|
|
<textarea id="meetingDescription" placeholder="Meeting description (optional)" data-i18n-placeholder="creator.meetingDescriptionPlaceholder"></textarea>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="meetingStart" data-i18n="creator.meetingStartLabel">Start Date & Time</label>
|
|
<input type="datetime-local" id="meetingStart" step="900" />
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="meetingEnd" data-i18n="creator.meetingEndLabel">End Date & Time</label>
|
|
<input type="datetime-local" id="meetingEnd" step="900" />
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="meetingOrganizer" data-i18n="creator.meetingOrganizerLabel">Organizer Email</label>
|
|
<input type="email" id="meetingOrganizer" placeholder="organizer@example.com" />
|
|
</div>
|
|
|
|
<div class="form-actions">
|
|
<button id="createNextcloudButton" class="button primary hidden" type="button" data-i18n="creator.nextcloudButton">
|
|
Create in Nextcloud Calendar
|
|
</button>
|
|
<button id="createMeetingButton" class="button primary" type="button" data-i18n="creator.createButton">
|
|
Download ICS File
|
|
</button>
|
|
<button id="createAdhocButton" class="button secondary hidden" type="button" data-i18n="creator.adhocButton">
|
|
Create Adhoc Link
|
|
</button>
|
|
<button id="cancelCreateButton" class="button secondary" type="button" data-i18n="creator.cancelButton">
|
|
Cancel
|
|
</button>
|
|
</div>
|
|
|
|
<div id="adhocResult" class="adhoc-result hidden">
|
|
<span data-i18n="creator.adhocLinkLabel">Your adhoc meeting link:</span>
|
|
<div class="adhoc-link">
|
|
<a id="adhocLink" target="_blank" rel="noopener noreferrer"></a>
|
|
<button id="copyAdhocLinkButton" class="button secondary" type="button" data-i18n="creator.copyLinkButton">Copy Link</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="icsSuccess" class="success-message hidden">
|
|
<span data-i18n="creator.successMessage">Meeting created! Download your calendar file and open it to import the meeting into your personal calendar.</span>
|
|
<a id="downloadIcsLink" class="button primary" style="margin-top: 12px; display: inline-block;" data-i18n="creator.downloadButton">Download ICS File</a>
|
|
</div>
|
|
|
|
<div id="nextcloudStatus" class="success-message hidden" aria-live="polite"></div>
|
|
|
|
<div id="nextcloudError" class="error hidden" aria-live="assertive"></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<!-- WINDOWS-HILFE OVERLAY -->
|
|
<dialog id="windowsHelpOverlay" class="privacy">
|
|
<h2 data-i18n="help.meetingPrivacySettings.windows.title"></h2>
|
|
<p data-i18n="help.meetingPrivacySettings.windows.intro"></p>
|
|
|
|
<h3 data-i18n="help.meetingPrivacySettings.windows.step1Title"></h3>
|
|
<p data-i18n="help.meetingPrivacySettings.windows.step1Description"></p>
|
|
|
|
<h3 data-i18n="help.meetingPrivacySettings.windows.step2Title"></h3>
|
|
<p data-i18n="help.meetingPrivacySettings.windows.step2Description"></p>
|
|
|
|
<h3 data-i18n="help.meetingPrivacySettings.windows.step3Title"></h3>
|
|
<p data-i18n="help.meetingPrivacySettings.windows.step3Description"></p>
|
|
|
|
<p data-i18n="help.meetingPrivacySettings.windows.browserPermissions"></p>
|
|
|
|
<h3 data-i18n="help.meetingPrivacySettings.windows.goodToKnowTitle"></h3>
|
|
<ul>
|
|
<li data-i18n="help.meetingPrivacySettings.windows.goodToKnow1"></li>
|
|
<li data-i18n="help.meetingPrivacySettings.windows.goodToKnow2"></li>
|
|
<li data-i18n="help.meetingPrivacySettings.windows.goodToKnow3"></li>
|
|
</ul>
|
|
|
|
<p data-i18n="help.meetingPrivacySettings.windows.adminSupport"></p>
|
|
|
|
<div class="help-actions">
|
|
<button id="windowsHelpClose" class="button secondary" type="button" data-i18n="help.meetingPrivacySettings.windows.closeButton">
|
|
Close
|
|
</button>
|
|
</div>
|
|
</dialog>
|
|
|
|
<script src="assets/lib/ua-parser.min.js"></script>
|
|
<script src="assets/launch.js"></script>
|
|
</body>
|
|
</html> |