1/** 2 * Retour à l'annuaire pour les pages "proposer un contact" et "proposer une modification". 3 * 4 * Réutilise le même mécanisme localStorage que le bouton "Retour à l'annuaire" des singles 5 * (clés `back_to_archive` / `back_to_archive_title`) : 6 * 7 * - Sur l'archive contacts, un clic sur "Proposer un contact" mémorise l'URL de l'archive 8 * courante (ex : la page restreinte "Hébergements"). 9 * - Sur un single contact, un clic sur "Proposer une modification" mémorise l'annuaire 10 * parent du single (l'URL déjà résolue par le bouton #backToArchive du single). 11 * - Sur la page proposition/modification, le bouton [data-archive-return] reprend cette URL 12 * si elle existe, puis la consomme. Sinon il garde son href serveur (fallback). 13 * 14 * Scopé aux contacts pour ne pas contaminer le flux des autres CPT. 15 */ 16(function () { 17 'use strict'; 18 19 var STORAGE_KEY = 'back_to_archive'; 20 var STORAGE_TITLE_KEY = 'back_to_archive_title'; 21 22 function store(url, title) { 23 if (!url) { 24 return; 25 } 26 try { 27 localStorage.setItem(STORAGE_KEY, url); 28 if (title) { 29 localStorage.setItem(STORAGE_TITLE_KEY, title); 30 } 31 } catch (e) { 32 /* localStorage indisponible : on laisse le href serveur faire foi */ 33 } 34 } 35 36 // Mémorisation de l'origine au clic sur les CTA contacts. 37 document.addEventListener('click', function (e) { 38 if (!e.target || !e.target.closest) { 39 return; 40 } 41 42 // "Proposer un contact" depuis l'archive contacts. 43 var propositionLink = e.target.closest( 44 'section[data-cpt="contacts"]#archivePage .proposition-wrapper a' 45 ); 46 if (propositionLink) { 47 store(window.location.href, document.title); 48 return; 49 } 50 51 // "Proposer une modification" depuis un single contact : 52 // on mémorise l'annuaire déjà résolu par le bouton retour du single. 53 // La classe .contact-badge__link sert aussi aux liens tel:/mailto: de la fiche ; 54 // le lien de modification est le seul à porter ?postID= dans son href. 55 var modificationLink = e.target.closest('.contact-badge__link'); 56 if (modificationLink && /[?&]postID=/.test(modificationLink.getAttribute('href') || '')) { 57 var backBtn = document.getElementById('backToArchive'); 58 if (backBtn && backBtn.getAttribute('href')) { 59 store(backBtn.href, backBtn.getAttribute('title') || document.title); 60 } 61 } 62 }); 63 64 // Application de l'origine mémorisée sur le bouton "Retour à l'annuaire" 65 // des pages proposition / modification. 66 function applyReturn() { 67 var buttons = document.querySelectorAll('[data-archive-return]'); 68 if (!buttons.length) { 69 return; 70 } 71 72 var storedUrl = null; 73 try { 74 storedUrl = localStorage.getItem(STORAGE_KEY); 75 } catch (e) { 76 storedUrl = null; 77 } 78 79 if (!storedUrl) { 80 return; 81 } 82 83 buttons.forEach(function (btn) { 84 btn.href = storedUrl; 85 }); 86 87 try { 88 localStorage.removeItem(STORAGE_KEY); 89 localStorage.removeItem(STORAGE_TITLE_KEY); 90 } catch (e) { 91 /* rien à nettoyer */ 92 } 93 } 94 95 if (document.readyState === 'loading') { 96 document.addEventListener('DOMContentLoaded', applyReturn); 97 } else { 98 applyReturn(); 99 } 100})();
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.