1/** 2 * Fenêtre de connexion sur place (auth sheet) â connexion sans friction. 3 * 4 * Au clic sur une formule (visiteur DÃCONNECTÃ), au lieu d'envoyer sur /connexion, 5 * on ouvre une fenêtre par-dessus la page avec Google / Apple / Facebook (1 clic, 6 * sans mot de passe). La formule choisie est mémorisée (sessionStorage 7 * `senego_after_login`) : account.js redirige vers le paiement après connexion. 8 * 9 * Si la fenêtre n'est pas dans le DOM (sécurité), on retombe sur /connexion. 10 */ 11(function () { 12 'use strict'; 13 14 function sheet() { return document.getElementById('senegoAuthSheet'); } 15 16 var lastFocus = null; 17 18 function openSheet() { 19 var s = sheet(); 20 if (!s) return false; 21 lastFocus = document.activeElement; 22 s.classList.add('is-open'); 23 s.setAttribute('aria-hidden', 'false'); 24 document.documentElement.style.overflow = 'hidden'; 25 // Focus sur le 1er bouton actionnable (le bouton Google est un iframe : on vise Apple). 26 var f = s.querySelector('.oauth-btn'); 27 if (f) { try { f.focus({ preventScroll: true }); } catch (e) {} } 28 return true; 29 } 30 31 function closeSheet() { 32 var s = sheet(); 33 if (!s) return; 34 s.classList.remove('is-open'); 35 s.setAttribute('aria-hidden', 'true'); 36 document.documentElement.style.overflow = ''; 37 if (lastFocus && lastFocus.focus) { try { lastFocus.focus({ preventScroll: true }); } catch (e) {} } 38 } 39 40 // Exposé pour réutilisation éventuelle (ex : un bouton « Se connecter » sur la page offre). 41 window.senegoOpenAuthSheet = openSheet; 42 window.senegoCloseAuthSheet = closeSheet; 43 44 function isLoggedIn() { 45 var st = (window.SenegoAccount && window.SenegoAccount.state) || {}; 46 return !!st.loggedin; 47 } 48 49 function ready(fn) { 50 if (document.readyState !== 'loading') fn(); 51 else document.addEventListener('DOMContentLoaded', fn); 52 } 53 54 ready(function () { 55 var s = sheet(); 56 57 // Fermeture : fond, bouton Ã, touche Ãchap. 58 if (s) { 59 s.addEventListener('click', function (e) { 60 if (e.target && e.target.closest && e.target.closest('[data-sas-close]')) { closeSheet(); } 61 }); 62 } 63 document.addEventListener('keydown', function (e) { 64 if (e.key === 'Escape') closeSheet(); 65 }); 66 67 // Interception du clic sur une formule (lien avec ?plan=â¦). 68 // CAPTURE pour passer avant la navigation du lien. 69 document.addEventListener('click', function (e) { 70 var link = e.target && e.target.closest ? e.target.closest('a[href*="plan="]') : null; 71 if (!link) return; 72 if (isLoggedIn()) return; // connecté â lien normal vers le paiement 73 var dest = link.getAttribute('href'); 74 // Mémorise la destination (le paiement avec la formule) pour l'après-connexion. 75 try { sessionStorage.setItem('senego_after_login', dest); } catch (er) {} 76 if (openSheet()) { 77 e.preventDefault(); 78 } else { 79 // Filet : pas de fenêtre dans le DOM â page de connexion classique. 80 e.preventDefault(); 81 window.location.href = '/connexion/?return_to=' + encodeURIComponent(dest); 82 } 83 }, true); 84 }); 85})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.