docker.videokonverter/video-konverter/app/templates/tv/base.html
data 00d8f6b982 feat: VideoKonverter v5.5 - Tizen Remote-Logging, Login D-Pad, Cookie-Fix
Tizen-App v5.5.0:
- Remote-Logging: Console-Override + XHR an /api/tizen-log alle 3s
- Debug-Panel: Gruene Taste toggled scrollbares Log-Panel (unten)
- window.onerror Handler fuer uncaught Errors
- Alle v5.4.2 Features erhalten (Connecting-Overlay, Timeout, IME-Fixes)

Server (tv_api.py):
- POST/GET /api/tizen-log Endpunkte (DB-Tabelle tizen_logs)
- Cookie SameSite-Fix: Tizen iframe bekommt kein SameSite (Lax blockiert)

Login (login.html):
- D-Pad Navigation per postMessage (vknative_keyevent)
- ArrowUp/Down zwischen Feldern, Enter auf Button

Sonstiges:
- base.html: vk_app_loaded postMessage Signal
- sw.js: Cache v14 -> v15
- Altes Docker-Export entfernt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:05:22 +01:00

63 lines
3.1 KiB
HTML

<!DOCTYPE html>
<html lang="{{ user.ui_lang if user is defined and user else 'de' }}"
data-theme="{{ user.theme if user is defined and user and user.theme else 'dark' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<meta name="theme-color" content="#0f0f0f">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<link rel="manifest" href="/static/tv/manifest.json">
<link rel="apple-touch-icon" href="/static/tv/icons/icon-192.png">
<link rel="icon" href="/static/icons/favicon.ico">
<link rel="stylesheet" href="/static/tv/css/tv.css?v={{ v }}">
<title>{% block title %}VideoKonverter TV{% endblock %}</title>
</head>
<body>
{% if user is defined and user %}
<nav class="tv-nav" id="tv-nav">
<div class="tv-nav-links">
<a href="/tv/" class="tv-nav-item {% if active == 'home' %}active{% endif %}" data-focusable>{{ t('nav.home') }}</a>
{% if user.can_view_series %}
<a href="/tv/series" class="tv-nav-item {% if active == 'series' %}active{% endif %}" data-focusable>{{ t('nav.series') }}</a>
{% endif %}
{% if user.can_view_movies %}
<a href="/tv/movies" class="tv-nav-item {% if active == 'movies' %}active{% endif %}" data-focusable>{{ t('nav.movies') }}</a>
{% endif %}
<a href="/tv/search" class="tv-nav-item {% if active == 'search' %}active{% endif %}" data-focusable>{{ t('nav.search') }}</a>
<a href="/tv/watchlist" class="tv-nav-item {% if active == 'watchlist' %}active{% endif %}" data-focusable>{{ t('nav.watchlist') }}</a>
</div>
<div class="tv-nav-right">
<a href="/tv/profiles" class="tv-nav-profile" data-focusable title="{{ t('profiles.switch') }}">
<span class="tv-avatar" style="background:{{ user.avatar_color or '#64b5f6' }}">
{{ (user.display_name or user.username)[:1]|upper }}
</span>
</a>
<a href="/tv/settings" class="tv-nav-item {% if active == 'settings' %}active{% endif %}" data-focusable>&#9881;</a>
<a href="/tv/logout" class="tv-nav-item tv-nav-logout" data-focusable>{{ t('nav.logout') }}</a>
</div>
</nav>
{% endif %}
<main class="tv-main">
{% block content %}{% endblock %}
</main>
<script src="/static/tv/js/tv.js?v={{ v }}"></script>
{% block scripts %}{% endblock %}
<script>
// Tizen iframe: Parent signalisieren dass die App geladen hat
if (window.parent !== window) {
try { window.parent.postMessage({type: "vk_app_loaded"}, "*"); } catch(e) {}
}
// PWA Service Worker registrieren
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/static/tv/sw.js', {scope: '/tv/'})
.catch(() => {});
}
</script>
</body>
</html>