118 lines
5.3 KiB
HTML
118 lines
5.3 KiB
HTML
<!doctype html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
|
||
<meta property="og:title" content="Gottesdienste Speyer und Schwegenheim" />
|
||
<meta property="og:description" content="... uns aber, die wir gerettet werden, ist es eine Gotteskraft." />
|
||
<meta property="og:image" content="https://app.bethaus-speyer.de/static/icons/logo-200x200.png" />
|
||
<meta property="og:url" content="https://app.bethaus-speyer.de" />
|
||
|
||
<title>Gottesdienste</title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||
<link rel="icon" href="/static/icons/logo-192x192.png" type="image/png" sizes="192x192">
|
||
|
||
|
||
<!-- Web App Manifest -->
|
||
<link rel="manifest" href="{{ url_for('static', filename='manifest.json') }}">
|
||
|
||
<!-- Android Theme Color -->
|
||
<meta name="theme-color" content="#34495e">
|
||
|
||
<!-- Apple-specific tags -->
|
||
<link rel="touch-icon" href="{{ url_for('static', filename='icons/icon-192x192.png') }}">
|
||
<meta name="mobile-web-app-capable" content="yes">
|
||
<meta name="mobile-web-app-status-bar-style" content="default">
|
||
<meta name="mobile-web-app-title" content="Gottesdienste">
|
||
|
||
<!-- Your CSS -->
|
||
<link rel="stylesheet" href="{{ url_for('static', filename='app.css') }}">
|
||
<link rel="stylesheet" href="{{ url_for('static', filename='gallery.css') }}">
|
||
<link rel="stylesheet" href="{{ url_for('static', filename='audioplayer.css') }}">
|
||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||
</head>
|
||
<body>
|
||
<header class="site-header">
|
||
<a href="#">
|
||
<img src="/static/logoW.png" alt="Logo" class="logo">
|
||
</a>
|
||
<h1>Gottesdienste Speyer und Schwegenheim</h1>
|
||
</header>
|
||
<div class="wrapper">
|
||
<div class="container">
|
||
<div id="breadcrumbs" class="breadcrumb"></div>
|
||
<div id="content"></div>
|
||
</div>
|
||
|
||
<!-- Global Audio Player in Footer -->
|
||
<footer>
|
||
<div class="audio-player-container" id="audioPlayerContainer">
|
||
<div class="audio-player">
|
||
<audio id="globalAudio">
|
||
Your browser does not support the audio element.
|
||
</audio>
|
||
<div class="controls">
|
||
<button class="player-button">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="#34495e">
|
||
<path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z" clip-rule="evenodd" />
|
||
</svg>
|
||
</button>
|
||
<div class="slider">
|
||
<input type="range" class="timeline" max="100" value="0" step="0.1">
|
||
<div id="timeInfo" class="now-playing-info"></div>
|
||
</div>
|
||
<button class="sound-button">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="#34495e">
|
||
<path fill-rule="evenodd" d="M9.383 3.076A1 1 0 0110 4v12a1 1 0 01-1.707.707L4.586 13H2a1 1 0 01-1-1V8a1 1 0 011-1h2.586l3.707-3.707a1 1 0 011.09-.217zM14.657 2.929a1 1 0 011.414 0A9.972 9.972 0 0119 10a9.972 9.972 0 01-2.929 7.071 1 1 0 01-1.414-1.414A7.971 7.971 0 0017 10c0-2.21-.894-4.208-2.343-5.657a1 1 0 010-1.414zm-2.829 2.828a1 1 0 011.415 0A5.983 5.983 0 0115 10a5.984 5.984 0 01-1.757 4.243 1 1 0 01-1.415-1.415A3.984 3.984 0 0013 10a3.983 3.983 0 00-1.172-2.828 1 1 0 010-1.415z" clip-rule="evenodd" />
|
||
</svg>
|
||
</button>
|
||
<button class="sound-button" onclick="downloadAudio()">
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 122.88 120.89" fill="#34495e" width="30" height="30">
|
||
<path fill-rule="evenodd" d="M84.58,47a7.71,7.71,0,1,1,10.8,11L66.09,86.88a7.72,7.72,0,0,1-10.82,0L26.4,58.37a7.71,7.71,0,1,1,10.81-11L53.1,63.12l.16-55.47a7.72,7.72,0,0,1,15.43.13l-.15,55L84.58,47ZM0,113.48.1,83.3a7.72,7.72,0,1,1,15.43.14l-.07,22q46,.09,91.91,0l.07-22.12a7.72,7.72,0,1,1,15.44.14l-.1,30h-.09a7.71,7.71,0,0,1-7.64,7.36q-53.73.1-107.38,0A7.7,7.7,0,0,1,0,113.48Z"/>
|
||
</svg>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div id="nowPlayingInfo" class="now-playing-info">
|
||
keine Datei ausgewählt...
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
</div>
|
||
|
||
<!-- Transcript Modal -->
|
||
<div id="transcriptModal">
|
||
<div class="modal-content">
|
||
<span class="close">×</span>
|
||
<div id="transcriptContent"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Gallery Modal for Images -->
|
||
<div id="gallery-modal" style="display: none;">
|
||
<img id="gallery-modal-content" src="" />
|
||
<button class="gallery-nav gallery-prev">‹</button>
|
||
<button class="gallery-nav gallery-next">›</button>
|
||
<button id="gallery-close">x</button>
|
||
</div>
|
||
|
||
<div id="loader-container" style="display: none;">
|
||
<div id="gallery-loader"></div>
|
||
</div>
|
||
|
||
<!-- Load main app JS first, then gallery JS -->
|
||
<script src="{{ url_for('static', filename='app.js') }}"></script>
|
||
<script src="{{ url_for('static', filename='gallery.js') }}"></script>
|
||
<script src="{{ url_for('static', filename='audioplayer.js') }}"></script>
|
||
<script>
|
||
if ('serviceWorker' in navigator) {
|
||
window.addEventListener('load', () => {
|
||
navigator.serviceWorker.register('{{ url_for("static", filename="sw.js") }}')
|
||
.then(reg => console.log('Service worker registered.', reg))
|
||
.catch(err => console.error('Service worker not registered.', err));
|
||
});
|
||
}
|
||
</script>
|
||
</body>
|
||
</html>
|