9f85908ff3
- Modernized the frontend with HTMX for server-driven UI and Alpine.js for client state. - Refactored anime, player, and recommendation logic into modular routers. - Updated README.md to reflect the latest project state and technologies (v2.4). - Added Plyr.io for an improved streaming experience. - Improved project structure with componentized templates. - Added Playwright and Vitest configuration for frontend testing.
65 lines
2.6 KiB
HTML
65 lines
2.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Ohm Stream Downloader</title>
|
|
|
|
<!-- CSS -->
|
|
<link rel="stylesheet" href="/static/css/style.css">
|
|
<link rel="stylesheet" href="https://cdn.plyr.io/3.7.8/plyr.css" />
|
|
|
|
<!-- External Libraries -->
|
|
<script src="https://unpkg.com/htmx.org@1.9.10"></script>
|
|
<script src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
|
|
<script src="https://cdn.plyr.io/3.7.8/plyr.polyfilled.js"></script>
|
|
|
|
<style>
|
|
[x-cloak] { display: none !important; }
|
|
</style>
|
|
|
|
<!-- Legacy JavaScript (Refactored to HTMX/Alpine) -->
|
|
<script src="/static/js/auth.js?v=1.10" defer></script>
|
|
<script src="/static/js/api.js?v=1.11" defer></script>
|
|
<script src="/static/js/utils.js?v=1.11" defer></script>
|
|
<script src="/static/js/downloads.js?v=1.11" defer></script>
|
|
<!-- <script src="/static/js/anime.js?v=1.11" defer></script> -->
|
|
<!-- <script src="/static/js/anime-details.js?v=1.12" defer></script> -->
|
|
<!-- <script src="/static/js/series-search.js?v=1.11" defer></script> -->
|
|
<!-- <script src="/static/js/recommendations.js?v=1.11" defer></script> -->
|
|
<script src="/static/js/watchlist.js?v=1.11" defer></script>
|
|
<!-- <script src="/static/js/watchlist-ui.js?v=1.11" defer></script> -->
|
|
<script src="/static/js/main.js?v=1.11" defer></script>
|
|
</head>
|
|
<body x-data="globalAppState">
|
|
{% include "components/toast_container.html" %}
|
|
<div class="container">
|
|
{% block content %}{% endblock %}
|
|
</div>
|
|
|
|
<script>
|
|
// Global State initialized when Alpine is ready
|
|
document.addEventListener('alpine:init', () => {
|
|
console.log('Alpine.js initializing...');
|
|
Alpine.data('globalAppState', () => ({
|
|
activeTab: 'home',
|
|
isAuthenticated: true,
|
|
username: '',
|
|
init() {
|
|
console.log('Global app state ready');
|
|
window.addEventListener('auth-success', (e) => {
|
|
console.log('Alpine auth-success received');
|
|
this.isAuthenticated = true;
|
|
this.username = e.detail.username;
|
|
});
|
|
window.addEventListener('set-tab', (e) => {
|
|
console.log('Alpine set-tab received:', e.detail.tab);
|
|
this.activeTab = e.detail.tab;
|
|
});
|
|
}
|
|
}));
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|