1 2document.addEventListener("DOMContentLoaded", function () { 3 4 const burgerprofielTemplate = document.getElementById("burgerprofiel-settings-template"); 5 if (burgerprofielTemplate !== null) { 6 const jsonText = burgerprofielTemplate.innerHTML.trim(); 7 try { 8 var Burgerprofiel = JSON.parse(jsonText); 9 } catch (error) { 10 console.error("Error parsing JSON:", error); 11 } 12 } 13 14 if (typeof (Burgerprofiel) !== "undefined") { 15 // const containerDiv = document.createElement('div'); 16 var ghp = document.getElementById("global-header-placeholder"); 17 var mountTarget = ghp.querySelector('.lcp-loader'); 18 var success = window.globalHeaderClient.mount(mountTarget); 19 20 function appendStyle(shadowRoot) { 21 if (shadowRoot.querySelector('style[data-burgerprofiel-fix]')) { 22 return; // al toegevoegd 23 } 24 const style = document.createElement('style'); 25 style.setAttribute('data-burgerprofiel-fix', ''); 26 style.textContent = '.app { position: var(--vlw-burgerprofiel-display, fixed) !important; }'; 27 const stylesheetLinks = shadowRoot.querySelectorAll('link[rel="stylesheet"]'); 28 const lastLink = stylesheetLinks[stylesheetLinks.length - 1]; 29 if (lastLink) { 30 lastLink.after(style); 31 } else {
32 shadowRoot.prepend(style); 33 } 34 } 35 36 // Zoekt in ghp (en al zijn nakomelingen, ook binnen shadow roots) naar een 37 // shadow root die '.app' bevat. We weten niet vooraf welk element de widget 38 // als shadow host gebruikt, dus we scannen breed i.p.v. één vaste referentie. 39 function findAndApply(root) { 40 const walker = [root, ...root.querySelectorAll('*')]; 41 for (const el of walker) { 42 if (el.shadowRoot) { 43 if (el.shadowRoot.querySelector('.app')) { 44 appendStyle(el.shadowRoot); 45 return true; 46 } 47 if (findAndApply(el.shadowRoot)) { 48 return true; 49 } 50 } 51 } 52 return false; 53 } 54 55 const observedShadowRoots = new WeakSet(); 56 const activeObservers = []; 57 let timeoutId; 58 59 function stopObserving() { 60 activeObservers.forEach(o => o.disconnect()); 61 activeObservers.length = 0; 62 clearTimeout(timeoutId); 63 } 64 65 // Observeert `root` (document of een shadow root) op nieuwe elementen. 66 // Zodra '.app' gevonden is via findAndApply, stoppen alle observers. 67 // Nieuw ontdekte shadow roots worden ook (recursief) geobserveerd, want 68 // een MutationObserver ziet geen mutaties binnen shadow roots die hij 69 // zelf niet observeert. 70 function observeTree(root) { 71 if (findAndApply(ghp)) { 72 stopObserving(); 73 return; 74 } 75 const observer = new MutationObserver(() => { 76 if (findAndApply(ghp)) { 77 stopObserving(); 78 return; 79 } 80 for (const el of [root, ...root.querySelectorAll('*')]) { 81 if (el.shadowRoot && !observedShadowRoots.has(el.shadowRoot)) { 82 observedShadowRoots.add(el.shadowRoot); 83 observeTree(el.shadowRoot); 84 } 85 } 86 }); 87 observer.observe(root, { childList: true, subtree: true }); 88 activeObservers.push(observer); 89 } 90 91 timeoutId = setTimeout(() => { 92 stopObserving(); 93 console.warn('[burgerprofiel-v2] geen shadow root met .app gevonden binnen ' + ghp.id, ghp); 94 }, 10000); 95 96 observeTree(ghp); 97 // if (success) { } 98 const globalHeaderClient = window.globalHeaderClient; 99 var websiteHasAuthenticatedSession = Burgerprofiel.isAuthenticated; 100 globalHeaderClient.accessMenu.setProfile({ 101 active: websiteHasAuthenticatedSession, 102 loginUrl: '/login', 103 logoutUrl: '/sso/logout?returnurl=%2F', 104 idpData: { 105 user: { 106 firstName: Burgerprofiel.firstName ? Burgerprofiel.firstName : '', 107 name: Burgerprofiel.lastName ? Burgerprofiel.lastName : '' 108 } 109 } 110 111 }); 112 113 } else { 114 console.log('Burgerprofiel not loaded.'); 115 } 116});
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.