Files
wizarr/app/templates/base.html
RicoUHD 4b0eca0d38 style(flask): use dynamic url_for query parameters and optimize context processor imports
- Refactored all cache-busting v arguments in base.html to pass directly through the Flask url_for Jinja function (v=app_version) rather than string concatenation.
- Moved the os import in context_processors.py to the top level scope to avoid redundant runtime overhead on every request.
2026-05-25 17:52:19 +02:00

142 lines
6.8 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/main.css', v=app_version) }}" />
<link rel="stylesheet"
href="{{ url_for('static', filename='css/tiny-mde.min.css', v=app_version) }}" />
<link rel="stylesheet"
href="{{ url_for('static', filename='css/vendor/animate.min.css', v=app_version) }}">
<script src="{{ url_for('static', filename='js/vendor/htmx.min.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/vendor/htmx-preload.min.js', v=app_version) }}"></script>
<link rel="icon"
type="image/x-icon"
href="{{ url_for('static', filename='favicon.ico') }}">
<!-- PWA Manifest -->
<link rel="manifest"
href="{{ url_for('static', filename='manifest.json') }}">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, viewport-fit=cover">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style"
content="black-translucent">
<meta name="apple-mobile-web-app-title" content="Wizarr">
<meta name="HandheldFriendly" content="true" />
<!-- PWA Theme Color -->
<meta name="theme-color" content="#3b82f6">
<!-- Apple Touch Icons -->
<link rel="apple-touch-icon"
href="{{ url_for('static', filename='img/pwa-icons/icon-152x152.png') }}">
<link rel="apple-touch-icon"
sizes="72x72"
href="{{ url_for('static', filename='img/pwa-icons/icon-72x72.png') }}">
<link rel="apple-touch-icon"
sizes="96x96"
href="{{ url_for('static', filename='img/pwa-icons/icon-96x96.png') }}">
<link rel="apple-touch-icon"
sizes="128x128"
href="{{ url_for('static', filename='img/pwa-icons/icon-128x128.png') }}">
<link rel="apple-touch-icon"
sizes="144x144"
href="{{ url_for('static', filename='img/pwa-icons/icon-144x144.png') }}">
<link rel="apple-touch-icon"
sizes="152x152"
href="{{ url_for('static', filename='img/pwa-icons/icon-152x152.png') }}">
<link rel="apple-touch-icon"
sizes="192x192"
href="{{ url_for('static', filename='img/pwa-icons/icon-192x192.png') }}">
<link rel="apple-touch-icon"
sizes="384x384"
href="{{ url_for('static', filename='img/pwa-icons/icon-384x384.png') }}">
<link rel="apple-touch-icon"
sizes="512x512"
href="{{ url_for('static', filename='img/pwa-icons/icon-512x512.png') }}">
<meta name="robots" content="noindex">
<title>
{% block title %}
{% endblock title %}
- {{ _(server_name) }}</title>
<meta property="og:title"
content="{% block og_title %}
{% endblock og_title %}" />
<meta property="og:description"
content="{% block og_description %}
{% endblock og_description %}" />
<script>
// On page load or when changing themes, best to add inline in `head` to avoid FOUC
if (localStorage.getItem('color-theme') === 'dark' || (!('color-theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
// Clipboard utility with fallback support for HTTP contexts
function copyToClipboard(text, callback) {
// Modern clipboard API (requires HTTPS or localhost)
if (navigator.clipboard && window.isSecureContext) {
navigator.clipboard.writeText(text).then(() => {
if (callback) callback(true);
}).catch(err => {
console.warn('Clipboard API failed, trying fallback:', err);
fallbackCopy(text, callback);
});
} else {
// Fallback for HTTP contexts
fallbackCopy(text, callback);
}
}
function fallbackCopy(text, callback) {
// Create a temporary textarea element
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
textarea.style.left = '-9999px';
document.body.appendChild(textarea);
try {
// Select and copy the text
textarea.select();
textarea.setSelectionRange(0, 99999); // For mobile devices
const successful = document.execCommand('copy');
if (callback) callback(successful);
if (!successful) {
console.warn('Fallback copy failed');
// Last resort: show alert with text to copy manually
alert('Please copy this link manually:\n\n' + text);
}
} catch (err) {
console.error('All copy methods failed:', err);
if (callback) callback(false);
// Last resort: show alert with text to copy manually
alert('Please copy this link manually:\n\n' + text);
} finally {
document.body.removeChild(textarea);
}
}
</script>
</head>
<body class="bg-gray-50 dark:bg-gray-900">
{% block main %}
{% endblock main %}
<script src="{{ url_for('static', filename='js/vendor/alpine-collapse.min.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/vendor/alpine.min.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/vendor/flowbite.min.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/dark-mode-switch.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/tiny-mde.min.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/init-tinymde.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/sortable.min.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/wizard-steps.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/pwa-registration.js', v=app_version) }}"></script>
<!-- In-app browser escape -->
<script src="{{ url_for('static', filename='js/vendor/bowser.min.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/vendor/inapp-spy.min.js', v=app_version) }}"></script>
<script src="{{ url_for('static', filename='js/in-app-escape.js', v=app_version) }}"></script>
</body>
</html>