PageSourceSearch

https://senego.com/wp-content/plugins/senego-account/assets/js/auth-sheet.js?ver=3.32.21

js senego.com collected 2026-09-24 09:33:24 UTC 3,123 bytes, 85 lines download raw bytes

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.