/* ALFRED_GLASS_V2 — mise en page uniquement ; logique V1 et extensions conservees. */ (() => { 'use strict'; const main = document.getElementById('alfredMainV1'); if (!main || main.dataset.glassV2 === 'ready') return; main.dataset.glassV2 = 'ready'; const logo = main.querySelector('.av-logo'); const name = document.getElementById('avName'); const subtitle = document.getElementById('avVoiceSubtitle'); if (!logo || !name) return; let assistantName = String(name.textContent || '').trim() || 'Alfred'; const cleanName = value => { if(typeof value !== 'string')return ''; const s = value.trim(); return s.length >= 2 && s.length <= 30 ? s : ''; }; function setName(value) { const s = cleanName(value); if(!s) return; assistantName=s; name.textContent=s; const first=Array.from(s)[0] || 'A'; logo.textContent=first.toLocaleUpperCase('fr-FR'); logo.setAttribute('aria-label',`Initiale de ${s}`); // La V1 conserve son nom initial dans la phrase de veille : mise a jour apres chaque evenement. const title=document.getElementById('avVoiceTitle'); if(title && subtitle && (title.textContent === 'En veille' || title.textContent === 'En attente')) { subtitle.textContent=`Dites « ${s} » puis votre demande`; } } setName(assistantName); async function fetchName(){ try{ const r=await fetch('/api/state',{cache:'no-store'}); if(!r.ok)return; const d=await r.json(); setName(d.assistant_name || d.title || ''); } catch(_){ /* La page reste utilisable si /api/state est indisponible. */ } } fetchName(); setInterval(()=>{if(!document.hidden)fetchName();},20000); window.addEventListener('focus',fetchName); window.alfredSocket?.on('alfred_state',state=>{ setName(state?.assistant_name || state?.title || assistantName); }); // Le menu ··· ouvre les options de la V1 au lieu de naviguer directement vers /config. const oldMenu=main.querySelector('.av-head-actions > a[href="/config"]'); if(oldMenu){ const btn=document.createElement('button'); btn.type='button';btn.id='avTopMenu';btn.className=oldMenu.className; btn.setAttribute('data-av-action','more'); btn.setAttribute('aria-label','Ouvrir le menu principal'); btn.title='Menu : Configuration, Surveillance, Journaux'; btn.innerHTML=oldMenu.innerHTML; oldMenu.replaceWith(btn); } const grid=document.querySelector('#avMoreDialog .av-more-grid'); if(grid&&!grid.querySelector('a[href="/logs"]')){ const link=document.createElement('a'); link.href='/logs';link.textContent='Journaux et historiques'; link.setAttribute('aria-label','Ouvrir les journaux'); const svg=document.createElementNS('http://www.w3.org/2000/svg','svg'); svg.setAttribute('viewBox','0 0 24 24');svg.setAttribute('class','a-icon');svg.setAttribute('fill','none'); svg.setAttribute('stroke','currentColor');svg.setAttribute('stroke-width','1.8'); const d=document.createElementNS('http://www.w3.org/2000/svg','path'); d.setAttribute('d','M6 3h9l4 4v14H6a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2zM14 3v5h5M8 12h8M8 16h8'); svg.appendChild(d);link.prepend(svg);grid.append(link); } // Rail et historique restes en DOM : les scripts des Listes et de la V1 les utilisent. // Ne pas les supprimer au risque de casser les evenements ou le rafraichissement. })();