feat: gestion événements — historique, export ZIP, filtre galerie
This commit is contained in:
@@ -801,120 +801,4 @@ async function loadBrightnessConfig() {
|
||||
document.getElementById('toggle-auto-brightness').checked = auto;
|
||||
document.getElementById('auto-brightness-status').textContent = auto
|
||||
? '✅ Auto-flash actif — le flash s\'adapte à l\'ambiance'
|
||||
: '⏸ Auto-flash désactivé — luminosité flash fixe à 100 %';
|
||||
} catch(e) { console.warn('loadBrightnessConfig:', e); }
|
||||
}
|
||||
|
||||
async function previewBrightness() {
|
||||
const v = parseInt(document.getElementById('brightness-slider').value);
|
||||
await api('PUT', `/api/leds/brightness?value=${v}&save=false`);
|
||||
showToast(`Luminosité ${v}/255 appliquée`, 'info');
|
||||
}
|
||||
|
||||
async function saveBrightness() {
|
||||
const v = parseInt(document.getElementById('brightness-slider').value);
|
||||
const status = document.getElementById('brightness-status');
|
||||
try {
|
||||
await api('PUT', `/api/leds/brightness?value=${v}&save=true`);
|
||||
status.textContent = '✅ Sauvegardé';
|
||||
showToast(`Luminosité ${v}/255 sauvegardée`, 'success');
|
||||
} catch(e) {
|
||||
status.textContent = '❌ Erreur';
|
||||
showToast('Erreur : ' + e.message, 'error');
|
||||
}
|
||||
setTimeout(() => { status.textContent = ''; }, 3000);
|
||||
}
|
||||
|
||||
async function setAutoBrightness(enabled) {
|
||||
const statusEl = document.getElementById('auto-brightness-status');
|
||||
try {
|
||||
await api('PUT', `/api/leds/auto-brightness?enabled=${enabled}&save=true`);
|
||||
statusEl.textContent = enabled
|
||||
? '✅ Auto-flash actif — le flash s\'adapte à l\'ambiance'
|
||||
: '⏸ Auto-flash désactivé — luminosité flash fixe à 100 %';
|
||||
showToast(enabled ? '✅ Auto-luminosité activée' : '⏸ Auto-luminosité désactivée', 'success');
|
||||
} catch(e) {
|
||||
showToast('Erreur : ' + e.message, 'error');
|
||||
document.getElementById('toggle-auto-brightness').checked = !enabled;
|
||||
}
|
||||
}
|
||||
|
||||
loadBrightnessConfig();
|
||||
|
||||
// ════════════════════════════════════════════════════════════════════════════
|
||||
// Flash LED
|
||||
// ════════════════════════════════════════════════════════════════════════════
|
||||
async function loadFlashConfig() {
|
||||
try {
|
||||
const effects = await api('GET', '/api/leds/effects');
|
||||
const cap = effects.capture;
|
||||
if (!cap) return;
|
||||
document.getElementById('flash-r').value = cap.color[0] ?? 255;
|
||||
document.getElementById('flash-g').value = cap.color[1] ?? 200;
|
||||
document.getElementById('flash-b').value = cap.color[2] ?? 80;
|
||||
document.getElementById('flash-duration').value = cap.flash_duration ?? 0.30;
|
||||
document.getElementById('flash-dur-val').textContent = parseFloat(cap.flash_duration ?? 0.30).toFixed(2);
|
||||
document.getElementById('flash-count').value = cap.flashes ?? 2;
|
||||
updateFlashPreview();
|
||||
} catch(e) { console.warn('loadFlashConfig:', e); }
|
||||
}
|
||||
|
||||
function updateFlashPreview() {
|
||||
const r = parseInt(document.getElementById('flash-r').value) || 0;
|
||||
const g = parseInt(document.getElementById('flash-g').value) || 0;
|
||||
const b = parseInt(document.getElementById('flash-b').value) || 0;
|
||||
document.getElementById('flash-preview').style.background = `rgb(${r},${g},${b})`;
|
||||
['flash-r','flash-g','flash-b'].forEach(id =>
|
||||
document.getElementById(id).addEventListener('input', updateFlashPreview, {once:true})
|
||||
);
|
||||
}
|
||||
|
||||
function colorPickerToRgb(hex) {
|
||||
const r = parseInt(hex.slice(1,3),16);
|
||||
const g = parseInt(hex.slice(3,5),16);
|
||||
const b = parseInt(hex.slice(5,7),16);
|
||||
document.getElementById('flash-r').value = r;
|
||||
document.getElementById('flash-g').value = g;
|
||||
document.getElementById('flash-b').value = b;
|
||||
updateFlashPreview();
|
||||
}
|
||||
|
||||
function setFlashPreset(r, g, b, dur, flashes) {
|
||||
document.getElementById('flash-r').value = r;
|
||||
document.getElementById('flash-g').value = g;
|
||||
document.getElementById('flash-b').value = b;
|
||||
document.getElementById('flash-duration').value = dur;
|
||||
document.getElementById('flash-dur-val').textContent = dur.toFixed(2);
|
||||
document.getElementById('flash-count').value = flashes;
|
||||
updateFlashPreview();
|
||||
}
|
||||
|
||||
async function previewFlash() {
|
||||
await api('POST', '/api/leds/effect?effect=capture');
|
||||
showToast('Flash test declenche', 'info');
|
||||
}
|
||||
|
||||
async function saveFlash() {
|
||||
const r = parseInt(document.getElementById('flash-r').value);
|
||||
const g = parseInt(document.getElementById('flash-g').value);
|
||||
const b = parseInt(document.getElementById('flash-b').value);
|
||||
const dur = parseFloat(document.getElementById('flash-duration').value);
|
||||
const flashes = parseInt(document.getElementById('flash-count').value);
|
||||
try {
|
||||
await api('PUT', `/api/leds/effect/capture?r=${r}&g=${g}&b=${b}&flash_duration=${dur}&flashes=${flashes}&save=true`);
|
||||
showToast('Flash sauvegarde', 'success');
|
||||
updateFlashPreview();
|
||||
} catch(e) { showToast('Erreur : ' + e.message, 'error'); }
|
||||
}
|
||||
|
||||
// Liaison input -> preview
|
||||
['flash-r','flash-g','flash-b'].forEach(id => {
|
||||
document.getElementById(id).addEventListener('input', updateFlashPreview);
|
||||
});
|
||||
|
||||
loadFlashConfig();
|
||||
|
||||
// Init dots
|
||||
showDots(0);
|
||||
</script>
|
||||
{% endblock %}
|
||||
: '⏸ Auto-flash désactivé — lumi
|
||||
Reference in New Issue
Block a user