Réglages: base_url documentée, boutons copier pour les URLs Tasker, saisie horaire native

Documente la clé base_url (schéma/domaine) déjà supportée par config.json pour les
liens email et URLs de présence, et ajoute un bouton "Copier" à côté de chaque URL
arrivée/départ. Passe aussi les champs horaires du tableau hebdomadaire en <input
type="time"> et journalise l'IP source des appels de présence Tasker.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Antoine
2026-08-20 17:13:18 +02:00
parent 3162968bfb
commit c1c063da51
4 changed files with 88 additions and 16 deletions

View File

@ -138,11 +138,13 @@
<div id="presence-urls">
<div class="settings-urlrow">
<span class="settings-urllabel">Arrivée</span>
<code class="settings-url">{{ arrivee_url }}</code>
<code class="settings-url" id="url-arrivee">{{ arrivee_url }}</code>
<button type="button" class="settings-copy-btn" data-copy-target="url-arrivee">Copier</button>
</div>
<div class="settings-urlrow">
<span class="settings-urllabel">Départ</span>
<code class="settings-url">{{ depart_url }}</code>
<code class="settings-url" id="url-depart">{{ depart_url }}</code>
<button type="button" class="settings-copy-btn" data-copy-target="url-depart">Copier</button>
</div>
</div>
<p class="settings-hint">
@ -252,6 +254,26 @@
.settings-regen-btn:hover:not([disabled]) {
background: var(--neg-bg);
}
.settings-copy-btn {
font-family: var(--mono);
font-size: 10px;
letter-spacing: .04em;
color: var(--accent);
background: none;
border: 1px solid var(--rule);
padding: .35rem .6rem;
cursor: pointer;
flex-shrink: 0;
transition: border-color .15s, background .15s;
}
.settings-copy-btn:hover {
border-color: var(--accent);
background: rgba(47,95,160,.06);
}
.settings-copy-btn.settings-copy-btn--done {
color: var(--pos);
border-color: var(--pos);
}
#ntfy-test-result {
flex: 1;
min-width: 0;
@ -266,4 +288,46 @@
line-height: 1.45;
}
</style>
<script>
(function () {
// Délégation sur document : #presence-urls est remplacé par un swap OOB
// htmx quand le token est régénéré, les boutons "Copier" doivent continuer
// à fonctionner après ce remplacement.
document.addEventListener("click", function (e) {
var btn = e.target.closest(".settings-copy-btn");
if (!btn) return;
var target = document.getElementById(btn.dataset.copyTarget);
if (!target) return;
var text = target.textContent;
var onDone = function (ok) {
var previous = btn.textContent;
btn.textContent = ok ? "Copié !" : "Échec";
btn.classList.toggle("settings-copy-btn--done", ok);
setTimeout(function () {
btn.textContent = previous;
btn.classList.remove("settings-copy-btn--done");
}, 1500);
};
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(text).then(
function () { onDone(true); },
function () { onDone(false); }
);
} else {
var textarea = document.createElement("textarea");
textarea.value = text;
textarea.style.position = "fixed";
textarea.style.opacity = "0";
document.body.appendChild(textarea);
textarea.select();
var ok = false;
try { ok = document.execCommand("copy"); } catch (err) { ok = false; }
document.body.removeChild(textarea);
onDone(ok);
}
});
})();
</script>
{% endblock %}