initial commit
This commit is contained in:
301
templates/admin.html
Normal file
301
templates/admin.html
Normal file
@@ -0,0 +1,301 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PC Monitor - Admin</title>
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/admin.css') }}">
|
||||
<!-- SortableJS pour le drag & drop -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/sortablejs@1.15.0/Sortable.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>âš™ï¸ Configuration PC Monitor</h1>
|
||||
<div class="header-actions">
|
||||
<a href="/dashboard" class="btn btn-secondary">📊 Dashboard</a>
|
||||
<button id="save-btn" class="btn btn-primary">💾 Sauvegarder</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="content">
|
||||
<!-- Navigation des sections -->
|
||||
<nav class="sections-nav">
|
||||
<button class="section-tab active" data-section="plugin">🔌 Source</button>
|
||||
<button class="section-tab" data-section="sensors">📡 Capteurs</button>
|
||||
<button class="section-tab" data-section="order">â†•ï¸ Ordre</button>
|
||||
<button class="section-tab" data-section="tabs">📑 Onglets</button>
|
||||
<button class="section-tab" data-section="media">🎵 Média</button>
|
||||
<button class="section-tab" data-section="apps">🚀 Applications</button>
|
||||
<button class="section-tab" data-section="theme">🎨 Thème</button>
|
||||
</nav>
|
||||
|
||||
<!-- Section Plugin -->
|
||||
<section id="section-plugin" class="config-section active">
|
||||
<h2>Source de monitoring</h2>
|
||||
<p class="help-text">Choisissez le logiciel de monitoring à utiliser</p>
|
||||
|
||||
<div class="plugin-selector" id="plugin-selector">
|
||||
<!-- Généré dynamiquement -->
|
||||
</div>
|
||||
|
||||
<div class="plugin-config" id="plugin-config">
|
||||
<h3>âš™ï¸ Configuration de la connexion</h3>
|
||||
|
||||
<div class="config-group">
|
||||
<label>🌠Hôte</label>
|
||||
<input type="text" id="plugin-host" value="127.0.0.1" placeholder="127.0.0.1">
|
||||
</div>
|
||||
|
||||
<div class="config-group">
|
||||
<label>🔢 Port</label>
|
||||
<input type="number" id="plugin-port" value="8085" placeholder="8085">
|
||||
</div>
|
||||
|
||||
<div class="plugin-actions">
|
||||
<button id="test-connection-btn" class="btn btn-secondary">🔠Tester la connexion</button>
|
||||
<span id="connection-status"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="plugin-info" id="plugin-info">
|
||||
<!-- Info sur le plugin sélectionné -->
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Section Capteurs -->
|
||||
<section id="section-sensors" class="config-section">
|
||||
<h2>Sélection des capteurs</h2>
|
||||
<p class="help-text">Cochez les capteurs que vous souhaitez afficher sur le dashboard</p>
|
||||
|
||||
<div class="sensors-container">
|
||||
<div id="sensors-loading">Chargement des capteurs...</div>
|
||||
<div id="sensors-list" style="display: none;"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Section Ordre des capteurs -->
|
||||
<section id="section-order" class="config-section">
|
||||
<h2>Ordre des capteurs</h2>
|
||||
<p class="help-text">Glissez-déposez les capteurs pour changer leur ordre d'affichage</p>
|
||||
|
||||
<div id="order-tabs-container">
|
||||
<!-- Généré dynamiquement -->
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Section Onglets -->
|
||||
<section id="section-tabs" class="config-section">
|
||||
<h2>Gestion des onglets</h2>
|
||||
<p class="help-text">Créez et organisez vos onglets personnalisés</p>
|
||||
|
||||
<div class="tabs-manager">
|
||||
<div class="tabs-list" id="tabs-list"></div>
|
||||
|
||||
<button id="add-tab-btn" class="btn btn-primary">âž• Ajouter un onglet</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Section Applications -->
|
||||
|
||||
<!-- Section Média (Plexamp) -->
|
||||
<section id="section-media" class="config-section">
|
||||
<h2>🎵 Lecteur Média</h2>
|
||||
<p class="help-text">Configurez Plexamp pour afficher le lecteur sur le dashboard</p>
|
||||
|
||||
<div class="plugin-card">
|
||||
<div class="plugin-header">
|
||||
<label class="plugin-toggle">
|
||||
<input type="checkbox" id="plexamp-enabled">
|
||||
<span class="toggle-slider"></span>
|
||||
</label>
|
||||
<div class="plugin-title">
|
||||
<h3>Plexamp</h3>
|
||||
<p>Lecteur Plex (via serveur Plex)</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="plugin-config" id="plexamp-config">
|
||||
<div class="config-group">
|
||||
<label>🖥️ Serveur Plex (IP)</label>
|
||||
<input type="text" id="plexamp-host" value="192.168.1.235" placeholder="192.168.1.235">
|
||||
</div>
|
||||
|
||||
<div class="config-group">
|
||||
<label>🔢 Port</label>
|
||||
<input type="number" id="plexamp-port" value="32400" placeholder="32400">
|
||||
</div>
|
||||
|
||||
<div class="config-group">
|
||||
<label>🔑 Token Plex</label>
|
||||
<input type="password" id="plexamp-token" placeholder="Votre token Plex">
|
||||
<small>Trouvez-le dans Plexamp → Paramètres → Dépannage → Copier le token</small>
|
||||
</div>
|
||||
|
||||
<div class="plugin-actions">
|
||||
<button id="plexamp-test-btn" class="btn btn-secondary">🔍 Tester</button>
|
||||
<button id="plexamp-save-btn" class="btn btn-primary">💾 Sauvegarder</button>
|
||||
<span id="plexamp-status"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="section-apps" class="config-section">
|
||||
<h2>Applications lancables</h2>
|
||||
<p class="help-text">Configurez les applications que vous voulez lancer depuis le dashboard</p>
|
||||
|
||||
<div class="config-group" style="margin-bottom: 20px;">
|
||||
<label>📑 Afficher les applications dans l'onglet :</label>
|
||||
<select id="apps-tab-select">
|
||||
<option value="">-- Section séparée (en bas) --</option>
|
||||
<!-- Options générées dynamiquement -->
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="apps-list" id="apps-list"></div>
|
||||
|
||||
<button id="add-app-btn" class="btn btn-primary">âž• Ajouter une application</button>
|
||||
</section>
|
||||
|
||||
<!-- Section Thème -->
|
||||
<section id="section-theme" class="config-section">
|
||||
<h2>Apparence</h2>
|
||||
<p class="help-text">Personnalisez le thème de l'interface</p>
|
||||
|
||||
<div class="theme-selector">
|
||||
<label>
|
||||
<input type="radio" name="theme" value="dark" checked>
|
||||
<div class="theme-option">
|
||||
<div class="theme-preview theme-dark"></div>
|
||||
<span>Sombre</span>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<input type="radio" name="theme" value="light">
|
||||
<div class="theme-option">
|
||||
<div class="theme-preview theme-light"></div>
|
||||
<span>Clair</span>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<input type="radio" name="theme" value="blue">
|
||||
<div class="theme-option">
|
||||
<div class="theme-preview theme-blue"></div>
|
||||
<span>Bleu</span>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal de configuration capteur -->
|
||||
<div id="sensor-config-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h3>âš™ï¸ Configuration du capteur</h3>
|
||||
<button class="modal-close">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="config-group">
|
||||
<label>📠Taille de la carte</label>
|
||||
<select id="config-card-size">
|
||||
<option value="tiny">Minuscule (½ colonne) - Mobile</option>
|
||||
<option value="xs">Très petit (1 colonne) - Mobile</option>
|
||||
<option value="small">Petit (1.5 colonnes)</option>
|
||||
<option value="medium" selected>Moyen (2 colonnes)</option>
|
||||
<option value="large">Grand (3 colonnes)</option>
|
||||
<option value="xl">Très grand (4 colonnes)</option>
|
||||
</select>
|
||||
|
||||
<label style="margin-top: 10px;">🔤 Police de caractères</label>
|
||||
<select id="config-font-family">
|
||||
<option value="system" selected>System (par défaut)</option>
|
||||
<option value="roboto">Roboto</option>
|
||||
<option value="opensans">Open Sans</option>
|
||||
<option value="lato">Lato</option>
|
||||
<option value="montserrat">Montserrat</option>
|
||||
<option value="poppins">Poppins</option>
|
||||
<option value="inter">Inter</option>
|
||||
<option value="mono">Monospace (technique)</option>
|
||||
<option value="digital">Digital (LCD)</option>
|
||||
</select>
|
||||
|
||||
<label style="margin-top: 10px;">
|
||||
<input type="checkbox" id="config-font-bold" checked>
|
||||
Texte en gras (bold)
|
||||
</label>
|
||||
|
||||
<label style="margin-top: 10px;">📱 Taille de police</label>
|
||||
<select id="config-font-size">
|
||||
<option value="tiny">Minuscule (8px nom, 14px valeur) - Ultra compact</option>
|
||||
<option value="xs">Très petit (9px nom, 16px valeur) - Compact</option>
|
||||
<option value="small" selected>Petit (10px nom, 18px valeur) - Par défaut</option>
|
||||
<option value="medium">Moyen (11px nom, 20px valeur) - Confortable</option>
|
||||
<option value="large">Grand (12px nom, 22px valeur) - Large</option>
|
||||
</select>
|
||||
|
||||
<label style="margin-top: 10px;">
|
||||
<input type="checkbox" id="config-hide-value-mobile">
|
||||
Masquer la valeur sur mobile (plus d'espace pour le graphique)
|
||||
</label>
|
||||
|
||||
<label style="margin-top: 10px;">
|
||||
<input type="checkbox" id="config-show-type-badge" checked>
|
||||
Afficher le badge de type (temperature, frequency, etc.)
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="config-group" id="gauge-options-group" style="display: none;">
|
||||
<h4>🎯 Options de la jauge</h4>
|
||||
|
||||
<label>
|
||||
<input type="checkbox" id="config-gauge-show-value" checked>
|
||||
Afficher la valeur au centre
|
||||
</label>
|
||||
|
||||
<label>Taille de la jauge</label>
|
||||
<select id="config-gauge-size">
|
||||
<option value="tiny">Minuscule (60px) - Mobile</option>
|
||||
<option value="xs">Très petit (90px) - Mobile</option>
|
||||
<option value="small">Petit (120px)</option>
|
||||
<option value="medium" selected>Moyen (180px)</option>
|
||||
<option value="large">Grand (240px)</option>
|
||||
</select>
|
||||
|
||||
<label>Style de la jauge</label>
|
||||
<select id="config-gauge-style">
|
||||
<option value="arc" selected>Arc (3/4 cercle)</option>
|
||||
<option value="semicircle">Demi-cercle</option>
|
||||
<option value="circle">Cercle complet</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="config-group" id="chart-options-group" style="display: none;">
|
||||
<h4>📈 Options du graphique</h4>
|
||||
|
||||
<label>Hauteur du graphique</label>
|
||||
<select id="config-chart-height">
|
||||
<option value="tiny">Minuscule (50px) - Mobile</option>
|
||||
<option value="xs">Très petit (70px) - Mobile</option>
|
||||
<option value="small">Petit (90px)</option>
|
||||
<option value="medium" selected>Moyen (120px)</option>
|
||||
<option value="large">Grand (180px)</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-secondary modal-cancel">Annuler</button>
|
||||
<button class="btn btn-primary modal-save">Appliquer</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="notification" class="notification"></div>
|
||||
|
||||
<script src="{{ url_for('static', filename='js/admin.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
93
templates/dashboard.html
Normal file
93
templates/dashboard.html
Normal file
@@ -0,0 +1,93 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>PC Monitor - Dashboard</title>
|
||||
<!-- Google Fonts -->
|
||||
<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=Inter:wght@400;500;600;700&family=Lato:wght@400;700&family=Montserrat:wght@400;500;600;700&family=Open+Sans:wght@400;600;700&family=Poppins:wght@400;500;600;700&family=Roboto:wght@400;500;700&family=Orbitron:wght@400;500;700&family=Share+Tech+Mono&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/dashboard.css') }}">
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1 id="dashboard-title">📊 PC Monitor</h1>
|
||||
<div class="header-actions">
|
||||
<span id="last-update">-</span>
|
||||
<a href="/admin" class="btn btn-secondary">âš™ï¸</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Onglets -->
|
||||
<nav class="tabs-nav" id="tabs-nav" style="display: none;">
|
||||
<!-- Généré dynamiquement par JS -->
|
||||
</nav>
|
||||
|
||||
<!-- Contenu des onglets -->
|
||||
<div class="tabs-content" id="tabs-content">
|
||||
<!-- Généré dynamiquement par JS -->
|
||||
</div>
|
||||
|
||||
<!-- Widget Plexamp -->
|
||||
<div class="plexamp-widget" id="plexamp-widget" style="display: none;">
|
||||
<div class="plexamp-artwork">
|
||||
<img id="plexamp-cover" src="" alt="Album cover">
|
||||
<div class="plexamp-no-music" id="plexamp-no-music">
|
||||
<span>🎵</span>
|
||||
<p>Aucune lecture</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="plexamp-info">
|
||||
<div class="plexamp-track">
|
||||
<div class="plexamp-title" id="plexamp-title">-</div>
|
||||
<div class="plexamp-artist" id="plexamp-artist">-</div>
|
||||
<div class="plexamp-album" id="plexamp-album">-</div>
|
||||
</div>
|
||||
<div class="plexamp-progress">
|
||||
<div class="plexamp-progress-bar">
|
||||
<div class="plexamp-progress-fill" id="plexamp-progress-fill"></div>
|
||||
</div>
|
||||
<div class="plexamp-times">
|
||||
<span id="plexamp-time-current">0:00</span>
|
||||
<span id="plexamp-time-total">0:00</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="plexamp-controls">
|
||||
<button class="plexamp-btn" id="plexamp-prev" title="Précédent">⏮️</button>
|
||||
<button class="plexamp-btn plexamp-btn-play" id="plexamp-playpause" title="Play/Pause">▶️</button>
|
||||
<button class="plexamp-btn" id="plexamp-next" title="Suivant">⏭️</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Section Applications -->
|
||||
<div class="apps-section" id="apps-section" style="display: none;">
|
||||
<h3>🚀 Applications</h3>
|
||||
<div class="apps-grid" id="apps-grid">
|
||||
<!-- Généré dynamiquement par JS -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Message quand aucun capteur n'est configuré -->
|
||||
<div id="empty-state" class="empty-state">
|
||||
<div class="empty-icon">📊</div>
|
||||
<h2>Aucun capteur configuré</h2>
|
||||
<p>Rendez-vous dans la page d'administration pour configurer vos capteurs</p>
|
||||
<a href="/admin" class="btn btn-primary">âš™ï¸ Configuration</a>
|
||||
</div>
|
||||
|
||||
<!-- Erreur de connexion -->
|
||||
<div id="error-state" class="error-state" style="display: none;">
|
||||
<div class="error-icon">âš ï¸</div>
|
||||
<h2>Erreur de connexion</h2>
|
||||
<p id="error-message">Impossible de se connecter à LibreHardwareMonitor</p>
|
||||
<button onclick="location.reload()" class="btn btn-primary">🔄 Réessayer</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="{{ url_for('static', filename='js/dashboard.js') }}"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user