Files
Alfredv2/alfred/app/static/js/alfred-mode-icons.js
T
2026-10-24 17:55:05 +02:00

36 lines
1.4 KiB
JavaScript

/* Icônes de statut : compatible avec alfred.js existant, sans le remplacer. */
(() => {
'use strict';
const el = document.getElementById('mode');
if (!el) return;
const icons = {
idle: ['🛏️', 'Repos'], repos: ['🛏️', 'Repos'],
listening: ['👂', 'Écoute'], thinking: ['🧠', 'Réflexion'],
speaking: ['🔊', 'Parole'], error: ['⚠️', 'Erreur']
};
let current = 'idle';
function apply(raw) {
const key = String(raw || '').trim().toLowerCase();
if (!icons[key]) return;
current = key;
const [icon, label] = icons[key];
if (el.textContent !== icon) el.textContent = icon;
el.title = label;
el.setAttribute('aria-label', label);
el.dataset.mode = key;
}
// L'ancien alfred.js écrit le nom du mode dans #mode.
// L'observateur le convertit immédiatement en icône, sans modifier ce script.
const observer = new MutationObserver(() => {
const value = el.textContent.trim();
if (icons[value.toLowerCase()]) apply(value);
});
observer.observe(el, { childList: true, characterData: true, subtree: true });
apply(el.textContent);
// Récupère également l'état actuel après un rafraîchissement de page.
fetch('/api/state', { cache: 'no-store' })
.then(r => { if (!r.ok) throw new Error('État indisponible'); return r.json(); })
.then(data => { if (data && data.mode) apply(data.mode); })
.catch(() => {});
})();