52 lines
2.3 KiB
JavaScript
52 lines
2.3 KiB
JavaScript
/* ALFRED_REPONSE_CLOSE_V1 — Boutons visibles dans la scène, sans modifier Hermes. */
|
||
(() => {
|
||
'use strict';
|
||
const stage = document.getElementById('stage');
|
||
const main = document.getElementById('alfredMainV1');
|
||
const returnButton = document.getElementById('avBack');
|
||
if (!stage || !main || !returnButton) {
|
||
console.warn('[Dona] Fermeture réponse : éléments Glass V2 manquants.');
|
||
return;
|
||
}
|
||
if (stage.dataset.alfredReplyCloseV1 === 'ready') return;
|
||
stage.dataset.alfredReplyCloseV1 = 'ready';
|
||
|
||
// La V1 crée le bouton « Retour à l’accueil » DANS #alfredMainV1 (z-index 1),
|
||
// alors que la scène #stage est un frère au-dessus (z-index 8).
|
||
// On déplace le bouton D'ORIGINE : son écouteur de clic et son id restent intacts.
|
||
const bar = document.createElement('div');
|
||
bar.className = 'av-reponse-actions';
|
||
bar.setAttribute('role', 'group');
|
||
bar.setAttribute('aria-label', 'Navigation dans la réponse');
|
||
|
||
const closeButton = document.createElement('button');
|
||
closeButton.type = 'button';
|
||
closeButton.className = 'av-reponse-close';
|
||
closeButton.setAttribute('aria-label', 'Fermer la réponse et revenir à l’accueil');
|
||
closeButton.title = 'Fermer la réponse';
|
||
closeButton.innerHTML = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M5 5l14 14M19 5 5 19"/></svg>';
|
||
|
||
returnButton.classList.add('av-reponse-home');
|
||
returnButton.removeAttribute('style');
|
||
returnButton.title = 'Fermer cette réponse et revenir à l’accueil';
|
||
bar.append(returnButton, closeButton);
|
||
stage.insertBefore(bar, stage.firstChild);
|
||
|
||
const goHome = () => {
|
||
// Utilise le gestionnaire déjà attaché à #avBack par Glass V1 :
|
||
// focusScene(false) + éventuel AlfredViews.goHome().
|
||
returnButton.click();
|
||
};
|
||
closeButton.addEventListener('click', goHome);
|
||
|
||
document.addEventListener('keydown', event => {
|
||
if (event.key !== 'Escape' || event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey) return;
|
||
// Les boîtes de dialogue (caméra, ComfyUI, etc.) gardent leur propre Escape.
|
||
if (document.querySelector('dialog[open], [role="dialog"][aria-modal="true"]')) return;
|
||
if (main.classList.contains('is-focused')) {
|
||
event.preventDefault();
|
||
goHome();
|
||
}
|
||
});
|
||
})();
|