Administration native sur le Mac, réencodage sélectif et aide intégrée
- admin.sh : RTG lancé directement sur le Mac (plus de conteneur), nginx joint l'interface par host.docker.internal:8765 ; variante conteneur conservée (admin-docker.sh, docker-compose-conteneur.yml) - Compression : réglages lus dans les fichiers (CRF, codec), refaire seulement le 1080p ou le 720p, seulement si les réglages ont changé ; réglages vidéo propres à chaque voyage ; « Compression actuelle » affichée - Plus d'arrêt automatique après 2 h d'inactivité (--arret-inactif, 0 par défaut) ; arrêt propre qui attend la fin des encodages en cours - Aide contextuelle dans l'interface (rtg/interface/aide) ; README centré sur l'installation et la mise en place - Cœurs attribués au conteneur détectés (cgroup) et signalés Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
This commit is contained in:
1 parent
b54ae69b19
commit
ada3d76f50
38 files changed
+1067
-264
No files matched your search
@@ -185,3 +185,37 @@ progress.global { height: 4px; opacity: .7; }
|
||||
.editeur-panneau { max-height: none; }
|
||||
.editeur-carte { height: 60vh; }
|
||||
}
|
||||
|
||||
/* Compression des vidéos (onglet Générer) */
|
||||
.encart.compression table { background: transparent; border: none; margin-bottom: 6px; }
|
||||
.encart.compression td div { margin: 2px 0; }
|
||||
|
||||
/* Aide */
|
||||
.bouton-aide { font-size: 13px; font-weight: 700; padding: 1px 8px; border-radius: 99px; vertical-align: middle;
|
||||
color: var(--accent); border-color: var(--accent); background: transparent; }
|
||||
.onglet-aide { display: flex; justify-content: flex-end; margin: -6px 0 4px; }
|
||||
.onglet-aide .bouton-aide { font-weight: 600; }
|
||||
.aide-panneau { position: fixed; top: 0; right: 0; bottom: 0; width: min(460px, 100%); z-index: 2500;
|
||||
background: var(--carte); border-left: 1px solid var(--bord); box-shadow: -8px 0 24px rgba(0,0,0,.15);
|
||||
overflow-y: auto; padding: 14px 22px 30px; }
|
||||
.aide-panneau[hidden] { display: none; }
|
||||
.aide-fermer { position: sticky; top: 0; float: right; z-index: 1; }
|
||||
.aide-texte { line-height: 1.55; }
|
||||
.aide-texte h1 { font-size: 21px; margin-top: 4px; }
|
||||
.aide-texte h2 { font-size: 16px; margin: 22px 0 6px; }
|
||||
.aide-texte table { font-size: 13px; margin: 8px 0; }
|
||||
.aide-texte th, .aide-texte td { padding: 5px 8px; }
|
||||
.aide-texte pre { background: var(--code); padding: 8px 10px; border-radius: 8px; overflow-x: auto; font-size: 12px; }
|
||||
.aide-texte pre code { background: none; padding: 0; }
|
||||
.aide-texte li { margin: 3px 0; }
|
||||
.aide-pied { border-top: 1px solid var(--bord); margin-top: 20px; padding-top: 10px; font-size: 13px; }
|
||||
.page-aide { display: grid; grid-template-columns: 240px 1fr; gap: 28px; align-items: start; }
|
||||
.aide-sommaire { position: sticky; top: 70px; background: var(--carte); border: 1px solid var(--bord); border-radius: 10px; padding: 4px 14px 10px; }
|
||||
.aide-sommaire h2 { font-size: 15px; margin: 10px 0 6px; }
|
||||
.aide-sommaire ul { list-style: none; padding: 0; margin: 0; font-size: 14px; }
|
||||
.aide-sommaire li a { display: block; padding: 4px 6px; border-radius: 6px; text-decoration: none; color: var(--texte); }
|
||||
.aide-sommaire li a.actif { background: var(--neutre-fond); font-weight: 600; }
|
||||
.page-aide .aide-texte { background: var(--carte); border: 1px solid var(--bord); border-radius: 10px; padding: 6px 26px 20px; max-width: 760px; }
|
||||
@media (max-width: 800px) { .page-aide { grid-template-columns: 1fr; } .aide-sommaire { position: static; } }
|
||||
|
||||
@media (min-width: 1200px) { body.aide-ouverte main, body.aide-ouverte footer { margin-right: 470px; } }
|
||||
@@ -83,6 +83,29 @@
|
||||
});
|
||||
document.addEventListener("keydown", e => { if (e.key === "Escape") fermer(); });
|
||||
|
||||
// --- Aide contextuelle (panneau à droite) --------------------------------
|
||||
function aideOuverte(oui) {
|
||||
const a = document.getElementById("aide");
|
||||
if (!a) return;
|
||||
a.hidden = !oui;
|
||||
document.body.classList.toggle("aide-ouverte", oui);
|
||||
}
|
||||
function fermerAide() { aideOuverte(false); }
|
||||
document.addEventListener("click", e => {
|
||||
if (e.target.closest("[data-ouvrir-aide]")) aideOuverte(true);
|
||||
if (e.target.closest("[data-fermer-aide]")) fermerAide();
|
||||
});
|
||||
// Panneau ouvert : il suit l'onglet affiché.
|
||||
document.addEventListener("rtg:onglet", e => {
|
||||
const a = document.getElementById("aide");
|
||||
const b = document.querySelector("#onglet-" + e.detail + " [data-ouvrir-aide]");
|
||||
if (a && !a.hidden && b && window.htmx) htmx.ajax("GET", b.getAttribute("hx-get"), "#aide-contenu");
|
||||
});
|
||||
document.addEventListener("keydown", e => { if (e.key === "Escape") fermerAide(); });
|
||||
document.addEventListener("htmx:afterSwap", e => {
|
||||
if (e.detail.target.id === "aide-contenu") e.detail.target.parentElement.scrollTop = 0;
|
||||
});
|
||||
|
||||
// Les messages (erreurs) s'effacent d'eux-mêmes.
|
||||
document.addEventListener("htmx:afterSwap", e => {
|
||||
if (e.detail.target.id === "messages") {
|
||||
|
||||
Reference in new issue
Block a user