Compare commits
No commits in common. "8008d68c8bd1d36f3e78f765eedde6e39e4e9056" and "e2ce075c96de5adb7a037ae233a5286f158d0637" have entirely different histories.
8008d68c8b
...
e2ce075c96
@ -29,8 +29,10 @@ body {
|
|||||||
z-index: 2000;
|
z-index: 2000;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 10px;
|
gap: 16px;
|
||||||
padding: 10px 20px;
|
padding: 10px 20px;
|
||||||
|
|
||||||
|
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
.site-header img.logo {
|
.site-header img.logo {
|
||||||
@ -40,7 +42,7 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.site-header h1 {
|
.site-header h1 {
|
||||||
font-size: 1.3rem;
|
font-size: 1.4rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
letter-spacing: 0.08em;
|
letter-spacing: 0.08em;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
@ -101,30 +103,7 @@ search {
|
|||||||
border-radius: 0 0 16px 16px;
|
border-radius: 0 0 16px 16px;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
margin-top: -1px;
|
margin-top: -1px;
|
||||||
padding: 16px 12px 10px;
|
padding: 16px 0 10px;
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Search view controls */
|
|
||||||
.search-close-btn {
|
|
||||||
position: absolute;
|
|
||||||
top: 12px;
|
|
||||||
right: 14px;
|
|
||||||
opacity: 0.85;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-clear-btn {
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
opacity: 0.85;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-clear-btn:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-close-btn:hover {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Breadcrumb Styles */
|
/* Breadcrumb Styles */
|
||||||
@ -175,7 +154,6 @@ search {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: nowrap;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
padding: 0 10px; /* keep first/last items off the screen edge */
|
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
overflow-y: visible;
|
overflow-y: visible;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
@ -1085,46 +1063,3 @@ footer {
|
|||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
color: var(--brand-ink);
|
color: var(--brand-ink);
|
||||||
}
|
}
|
||||||
/* Buttons - harmonize with brand palette */
|
|
||||||
.btn-primary {
|
|
||||||
background: linear-gradient(135deg, var(--brand-sky), #3b82f6);
|
|
||||||
border: 1px solid var(--brand-sky);
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 700;
|
|
||||||
letter-spacing: 0.01em;
|
|
||||||
box-shadow: 0 8px 18px rgba(59, 130, 246, 0.18);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary:hover {
|
|
||||||
background: linear-gradient(135deg, #2563eb, var(--brand-sky));
|
|
||||||
border-color: #2563eb;
|
|
||||||
box-shadow: 0 12px 28px rgba(59, 130, 246, 0.22);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary:active,
|
|
||||||
.btn-primary:focus {
|
|
||||||
background: linear-gradient(135deg, #1d4ed8, #2563eb);
|
|
||||||
border-color: #1d4ed8;
|
|
||||||
box-shadow: 0 6px 16px rgba(37, 99, 235, 0.26) inset;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-outline-secondary {
|
|
||||||
border-color: var(--border-color);
|
|
||||||
color: var(--brand-ink);
|
|
||||||
background: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-outline-secondary:hover,
|
|
||||||
.btn-outline-secondary:focus {
|
|
||||||
background: linear-gradient(135deg, #fff, #f4f7fb);
|
|
||||||
color: var(--brand-ink);
|
|
||||||
border-color: var(--border-color);
|
|
||||||
box-shadow: 0 6px 16px rgba(15, 23, 42, 0.08);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-outline-secondary:active {
|
|
||||||
background: #eef2f7;
|
|
||||||
color: var(--brand-ink);
|
|
||||||
border-color: var(--border-color);
|
|
||||||
box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08) inset;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -66,9 +66,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const query = document.getElementById('query').value.trim();
|
const query = document.getElementById('query').value.trim();
|
||||||
const includeTranscript = document.getElementById('includeTranscript').checked;
|
const includeTranscript = document.getElementById('includeTranscript').checked;
|
||||||
const spinnerTimer = setTimeout(() => {
|
|
||||||
if (typeof showSpinner === 'function') showSpinner();
|
|
||||||
}, 200);
|
|
||||||
|
|
||||||
// Get the selected category radio button, if any
|
// Get the selected category radio button, if any
|
||||||
const categoryRadio = document.querySelector('input[name="category"]:checked');
|
const categoryRadio = document.querySelector('input[name="category"]:checked');
|
||||||
@ -99,12 +96,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
formData.append('dateto', document.getElementById('dateto').value);
|
formData.append('dateto', document.getElementById('dateto').value);
|
||||||
formData.append('includeTranscript', includeTranscript);
|
formData.append('includeTranscript', includeTranscript);
|
||||||
|
|
||||||
const settleSpinner = () => {
|
fetch('/searchcommand', {
|
||||||
clearTimeout(spinnerTimer);
|
|
||||||
if (typeof hideSpinner === 'function') hideSpinner();
|
|
||||||
};
|
|
||||||
|
|
||||||
const fetchPromise = fetch('/searchcommand', {
|
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: formData
|
body: formData
|
||||||
})
|
})
|
||||||
@ -126,12 +118,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error('Error:', error);
|
console.error('Error:', error);
|
||||||
});
|
});
|
||||||
// Always clear/hide spinner once the request settles
|
|
||||||
if (typeof fetchPromise.finally === 'function') {
|
|
||||||
fetchPromise.finally(settleSpinner);
|
|
||||||
} else {
|
|
||||||
fetchPromise.then(settleSpinner, settleSpinner);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Clear button event handler
|
// Clear button event handler
|
||||||
|
|||||||
@ -1,29 +1,85 @@
|
|||||||
{% extends 'base.html' %}
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
|
|
||||||
{% block title %}{{ title_short }}{% endblock %}
|
<title>{{ title_short }}</title>
|
||||||
|
|
||||||
{% block head_extra %}
|
<meta property="og:title" content="{{ og_title }}" />
|
||||||
<meta property="og:title" content="{{ og_title }}">
|
<meta property="og:description" content="{{ og_description }}" />
|
||||||
<meta property="og:description" content="{{ og_description }}">
|
<meta property="og:image" content="/icon/logo-192x192.png" />
|
||||||
<meta property="og:image" content="/icon/logo-192x192.png">
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:type" content="website">
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<meta name="description" content="... uns aber, die wir gerettet werden, ist es eine Gotteskraft.">
|
<meta name="description" content="... uns aber, die wir gerettet werden, ist es eine Gotteskraft.">
|
||||||
<meta name="author" content="{{ title_short }}">
|
<meta name="author" content="{{ title_short }}">
|
||||||
<link rel="icon" href="/icon/logo-192x192.png" type="image/png" sizes="192x192">
|
<link rel="icon" href="/icon/logo-192x192.png" type="image/png" sizes="192x192">
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Web App Manifest -->
|
||||||
<link rel="manifest" href="{{ url_for('static', filename='manifest.json') }}">
|
<link rel="manifest" href="{{ url_for('static', filename='manifest.json') }}">
|
||||||
|
|
||||||
|
<!-- Android Theme Color -->
|
||||||
|
<meta name="theme-color" content="#000">
|
||||||
|
|
||||||
|
<!-- Apple-specific tags -->
|
||||||
<link rel="touch-icon" href="/icon/logo-192x192.png">
|
<link rel="touch-icon" href="/icon/logo-192x192.png">
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
<meta name="mobile-web-app-status-bar-style" content="default">
|
<meta name="mobile-web-app-status-bar-style" content="default">
|
||||||
<meta name="mobile-web-app-title" content="Gottesdienste">
|
<meta name="mobile-web-app-title" content="Gottesdienste">
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" />
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css" rel="stylesheet">
|
||||||
|
|
||||||
|
<!-- Your CSS -->
|
||||||
|
<link rel="stylesheet" href="{{ url_for('static', filename='theme.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='gallery.css') }}">
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='audioplayer.css') }}">
|
<link rel="stylesheet" href="{{ url_for('static', filename='audioplayer.css') }}">
|
||||||
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
||||||
<script> const admin_enabled = {{ admin_enabled | tojson | safe }}; </script>
|
<script> const admin_enabled = {{ admin_enabled | tojson | safe }}; </script>
|
||||||
{% endblock %}
|
</head>
|
||||||
|
<body>
|
||||||
|
<script src="{{ url_for('static', filename='functions.js') }}"></script>
|
||||||
|
<header class="site-header">
|
||||||
|
<a href="/">
|
||||||
|
<img src="/custom_logo/logoW.png" alt="Logo" class="logo">
|
||||||
|
</a>
|
||||||
|
<h1>{{ title_long }}</h1>
|
||||||
|
</header>
|
||||||
|
<div class="wrapper">
|
||||||
|
{% if admin_enabled %}
|
||||||
|
<div class="admin-nav">
|
||||||
|
<div class="admin-nav-rail">
|
||||||
|
<div class="admin-nav-track">
|
||||||
|
<a href="{{ url_for('mylinks') }}">Meine Links</a>
|
||||||
|
<span> | </span>
|
||||||
|
<a href="{{ url_for('folder_secret_config_editor') }}" id="edit-folder-config">Ordnerkonfiguration</a>
|
||||||
|
<span> | </span>
|
||||||
|
<div class="dropdown dropend d-inline-block">
|
||||||
|
<a class="dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
|
||||||
|
Auswertungen
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a class="dropdown-item" href="{{ url_for('dashboard') }}">Dashbord</a></li>
|
||||||
|
<li><a class="dropdown-item" href="{{ url_for('connections') }}">Verbindungen</a></li>
|
||||||
|
<li><a class="dropdown-item" href="{{ url_for('file_access') }}">Dateizugriffe</a></li>
|
||||||
|
<li><a class="dropdown-item" href="{{ url_for('songs_dashboard') }}">Wiederholungen</a></li>
|
||||||
|
<li><a class="dropdown-item" href="{{ url_for('search_db_analyzer') }}">Dateiindex Analyse</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<!-- Tab Navigation -->
|
|
||||||
{% if features %}
|
{% if features %}
|
||||||
|
<!-- Tab Navigation -->
|
||||||
<nav class="main-tabs">
|
<nav class="main-tabs">
|
||||||
{% if "files" in features %}<button class="tab-button active" data-tab="browse">Audio/Photo</button>{% endif %}
|
{% if "files" in features %}<button class="tab-button active" data-tab="browse">Audio/Photo</button>{% endif %}
|
||||||
{% if "messages" in features %}<button class="tab-button" data-tab="messages">Nachrichten</button>{% endif %}
|
{% if "messages" in features %}<button class="tab-button" data-tab="messages">Nachrichten</button>{% endif %}
|
||||||
@ -50,18 +106,13 @@
|
|||||||
{% include 'calendar_section.html' %}
|
{% include 'calendar_section.html' %}
|
||||||
|
|
||||||
<search style="display: none;">
|
<search style="display: none;">
|
||||||
<button type="button" id="backBtn" class="btn-close search-close-btn" aria-label="beenden"></button>
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<form id="searchForm" method="post" class="mb-4">
|
<form id="searchForm" method="post" class="mb-4">
|
||||||
|
|
||||||
<!-- Suchwörter -->
|
<!-- Suchwörter -->
|
||||||
<div class="mb-3 search-query-wrap">
|
<div class="mb-3">
|
||||||
<label for="query" class="h5 form-label">Suchwörter:</label>
|
<label for="query" class="h5 form-label">Suchwörter:</label>
|
||||||
<div class="input-group">
|
|
||||||
<input type="text" id="query" name="query" class="form-control" required>
|
<input type="text" id="query" name="query" class="form-control" required>
|
||||||
<button type="button" id="clearBtn" class="btn btn-outline-secondary input-clear-btn" aria-label="zurücksetzen">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Toggle für Suchoptionen -->
|
<!-- Toggle für Suchoptionen -->
|
||||||
@ -80,6 +131,7 @@
|
|||||||
|
|
||||||
<!-- Suchoptionen einklappbar -->
|
<!-- Suchoptionen einklappbar -->
|
||||||
<div id="searchOptions" class="collapse border rounded p-3 mb-3">
|
<div id="searchOptions" class="collapse border rounded p-3 mb-3">
|
||||||
|
|
||||||
<!-- Kategorie -->
|
<!-- Kategorie -->
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label class="form-label">Kategorie:</label>
|
<label class="form-label">Kategorie:</label>
|
||||||
@ -145,12 +197,17 @@
|
|||||||
<input type="date" id="dateto" name="dateto" class="form-control">
|
<input type="date" id="dateto" name="dateto" class="form-control">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<!-- Ende Suchoptionen -->
|
||||||
|
|
||||||
<!-- Buttons -->
|
<!-- Buttons -->
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<button type="submit" class="btn btn-primary">Suchen</button>
|
<button type="submit" class="btn btn-primary">Suchen</button>
|
||||||
|
<button type="button" id="clearBtn" class="btn btn-secondary ms-2">zurücksetzen</button>
|
||||||
|
<button type="button" id="backBtn" class="btn btn-secondary ms-2">beenden</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<!-- AJAX-loaded results -->
|
<!-- AJAX-loaded results -->
|
||||||
@ -158,6 +215,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</search>
|
</search>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Global Audio Player in Footer -->
|
<!-- Global Audio Player in Footer -->
|
||||||
<footer>
|
<footer>
|
||||||
<div class="audio-player-container" id="audioPlayerContainer">
|
<div class="audio-player-container" id="audioPlayerContainer">
|
||||||
@ -187,6 +246,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Transcript Modal -->
|
<!-- Transcript Modal -->
|
||||||
<div id="transcriptModal">
|
<div id="transcriptModal">
|
||||||
@ -200,7 +260,7 @@
|
|||||||
<div id="gallery-modal" style="display: none;">
|
<div id="gallery-modal" style="display: none;">
|
||||||
<button id="gallery-close">x</button>
|
<button id="gallery-close">x</button>
|
||||||
<button id="gallery-info" aria-expanded="false" aria-controls="gallery-exif">i</button>
|
<button id="gallery-info" aria-expanded="false" aria-controls="gallery-exif">i</button>
|
||||||
<img id="gallery-modal-content" src="">
|
<img id="gallery-modal-content" src="" />
|
||||||
<button class="gallery-nav gallery-prev">‹</button>
|
<button class="gallery-nav gallery-prev">‹</button>
|
||||||
<button class="gallery-nav gallery-next">›</button>
|
<button class="gallery-nav gallery-next">›</button>
|
||||||
<button id="gallery-play" aria-pressed="false" aria-label="Start slideshow">></button>
|
<button id="gallery-play" aria-pressed="false" aria-label="Start slideshow">></button>
|
||||||
@ -215,19 +275,22 @@
|
|||||||
<div id="fullscreen-loader" style="display: none;">
|
<div id="fullscreen-loader" style="display: none;">
|
||||||
<div class="loader"></div>
|
<div class="loader"></div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block scripts %}
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
|
|
||||||
|
<!-- Load main app JS first, then gallery JS -->
|
||||||
<script src="{{ url_for('static', filename='audioplayer.js') }}"></script>
|
<script src="{{ url_for('static', filename='audioplayer.js') }}"></script>
|
||||||
<script src="{{ url_for('static', filename='app.js') }}"></script>
|
<script src="{{ url_for('static', filename='app.js') }}"></script>
|
||||||
<script src="{{ url_for('static', filename='gallery.js') }}"></script>
|
<script src="{{ url_for('static', filename='gallery.js') }}"></script>
|
||||||
<script src="{{ url_for('static', filename='search.js') }}"></script>
|
<script src="{{ url_for('static', filename='search.js') }}"></script>
|
||||||
<script src="{{ url_for('static', filename='messages.js') }}"></script>
|
<script src="{{ url_for('static', filename='messages.js') }}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='general.js') }}"></script>
|
||||||
<script>
|
<script>
|
||||||
if ('serviceWorker' in navigator) {
|
if ('serviceWorker' in navigator) {
|
||||||
window.addEventListener('load', () => {
|
window.addEventListener('load', () => {
|
||||||
navigator.serviceWorker.register('{{ url_for("static", filename="sw.js") }}');
|
navigator.serviceWorker.register('{{ url_for("static", filename="sw.js") }}')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
</body>
|
||||||
|
</html>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user