1(function(){ 2 'use strict'; 3 4 var cfg=window.FlavorLegalGuarantee||{}; 5 var modal=null,backdrop=null,close=null,img=null; 6 var observer=null,observerTimer=null; 7 8 function language(){ 9 if(cfg.languageMode==='de'||cfg.languageMode==='en')return cfg.languageMode; 10 var lang=(document.documentElement.getAttribute('lang')||navigator.language||'en').toLowerCase(); 11 return lang.indexOf('de')===0?'de':'en'; 12 } 13 14 function urlFor(el){ 15 var lang=language(); 16 return (lang==='de'?el.getAttribute('data-legal-guarantee-de'):el.getAttribute('data-legal-guarantee-en')) || (lang==='de'?cfg.de:cfg.en); 17 } 18 19 function syncImages(root){ 20 (root||document).querySelectorAll('[data-legal-guarantee-auto="1"]').forEach(function(el){ 21 var src=urlFor(el); 22 if(!src)return; 23 if(el.tagName==='IMG'&&el.getAttribute('src')!==src)el.setAttribute('src',src); 24 if(el.tagName==='A'&&el.getAttribute('href')!==src)el.setAttribute('href',src); 25 }); 26 } 27 28 function ensureModal(){ 29 if(modal)return; 30 backdrop=document.createElement('div'); 31 backdrop.className='flavor-legal-guarantee-modal__backdrop'; 32 backdrop.hidden=true; 33 34 modal=document.createElement('div'); 35 modal.className='flavor-legal-guarantee-modal'; 36 modal.hidden=true; 37 modal.setAttribute('role','dialog'); 38 modal.setAttribute('aria-modal','true'); 39 40 close=document.createElement('button'); 41 close.type='button'; 42 close.className='flavor-legal-guarantee-modal__close'; 43 close.setAttribute('aria-label',cfg.close||'Close'); 44 close.textContent='Ã'; 45 46 img=document.createElement('img'); 47 img.className='flavor-legal-guarantee-modal__image'; 48 img.alt=cfg.alt||'Legal guarantee notice'; 49 50 modal.appendChild(close); 51 modal.appendChild(img); 52 document.body.appendChild(backdrop); 53 document.body.appendChild(modal); 54 close.addEventListener('click',closeModal); 55 backdrop.addEventListener('click',closeModal); 56 } 57 58 function openSrc(src,alt){ 59 if(!src)return; 60 ensureModal(); 61 img.src=src; 62 img.alt=alt||cfg.alt||'Legal guarantee notice'; 63 backdrop.hidden=false; 64 modal.hidden=false; 65 document.documentElement.classList.add('flavor-legal-guarantee-modal-open'); 66 requestAnimationFrame(function(){backdrop.classList.add('is-open');modal.classList.add('is-open');}); 67 } 68 69 function openModal(trigger){openSrc(urlFor(trigger),cfg.alt);} 70 71 function closeModal(){ 72 if(!modal)return; 73 backdrop.classList.remove('is-open'); 74 modal.classList.remove('is-open'); 75 document.documentElement.classList.remove('flavor-legal-guarantee-modal-open'); 76 window.setTimeout(function(){if(!modal.classList.contains('is-open')){backdrop.hidden=true;modal.hidden=true;}},160); 77 } 78 79 function bind(root){ 80 root=root||document; 81 syncImages(root); 82 83 root.querySelectorAll('.flavor-legal-guarantee-link__trigger').forEach(function(trigger){ 84 var label=trigger.querySelector('.flavor-legal-guarantee-link__label strong'); 85 if(label)label.textContent=language()==='de'?(cfg.labelDe||'Gewährleistung'):(cfg.labelEn||'Legal guarantee'); 86 if(trigger.dataset.flavorBound)return; 87 trigger.dataset.flavorBound='1'; 88 trigger.addEventListener('click',function(e){e.preventDefault();openModal(trigger);}); 89 }); 90 91 root.querySelectorAll('[data-flavor-legal-guarantee-popup] .flavor-legal-guarantee-popup__trigger').forEach(function(trigger){ 92 if(trigger.dataset.flavorBound)return; 93 trigger.dataset.flavorBound='1'; 94 trigger.addEventListener('click',function(e){e.preventDefault();openModal(trigger.querySelector('img')||trigger);}); 95 }); 96 97 root.querySelectorAll('.flavor-cart-garan-badge__trigger').forEach(function(trigger){ 98 if(trigger.dataset.flavorBound)return; 99 trigger.dataset.flavorBound='1'; 100 trigger.addEventListener('click',function(e){e.preventDefault();openSrc(trigger.getAttribute('data-garan-full')||'','GARAN');}); 101 }); 102 } 103 104 function createSmallLegal(){ 105 var wrap=document.createElement('span'); 106 wrap.className='flavor-legal-guarantee-popup flavor-legal-guarantee-popup--cart-item'; 107 wrap.setAttribute('data-flavor-legal-guarantee-popup',''); 108 var button=document.createElement('button'); 109 button.type='button';button.className='flavor-legal-guarantee-popup__trigger';button.setAttribute('aria-expanded','false'); 110 var image=document.createElement('img'); 111 image.src=language()==='de'?cfg.de:cfg.en; 112 image.alt=cfg.alt||'Legal guarantee notice'; 113 image.setAttribute('data-legal-guarantee-de',cfg.de||'');image.setAttribute('data-legal-guarantee-en',cfg.en||''); 114 if(cfg.languageMode==='auto')image.setAttribute('data-legal-guarantee-auto','1'); 115 button.appendChild(image);wrap.appendChild(button);return wrap; 116 } 117 118 function createSmallGaran(item){ 119 if(!item||!item.garan||!item.garanNested||!item.garanFull)return null; 120 var wrap=document.createElement('span');wrap.className='flavor-cart-garan-badge'; 121 var button=document.createElement('button');button.type='button';button.className='flavor-cart-garan-badge__trigger';button.setAttribute('data-garan-full',item.garanFull); 122 var image=document.createElement('img');image.src=item.garanNested;image.alt='GARAN'; 123 button.appendChild(image);wrap.appendChild(button);return wrap; 124 } 125 126 127 function relocateClassicCartBadges(){ 128 document.querySelectorAll('td.product-name .flavor-cart-compliance-badges').forEach(function(box){ 129 var cell=box.closest('td.product-name'); 130 if(cell&&cell.lastElementChild!==box)cell.appendChild(box); 131 }); 132 } 133 134 function relocateCheckoutWcBadges(){
135 if(cfg.pageContext!=='checkout')return; 136 137 document.querySelectorAll('.cfw-cart-table .cart-item-row,.cfw-cart-table .cfw-cart-item-row,.cfw-cart-table [class*="cart-item-row"]').forEach(function(row){ 138 var desc=row.querySelector('.cfw-cart-item-description'); 139 if(!desc)return; 140 141 var serverBadge=row.querySelector('.flavor-cart-compliance-badges--checkout'); 142 if(serverBadge&&serverBadge.parentNode!==desc){ 143 desc.appendChild(serverBadge); 144 }else if(serverBadge&&desc.lastElementChild!==serverBadge){ 145 desc.appendChild(serverBadge); 146 } 147 }); 148 } 149 150 function ensureCheckoutWcItems(){ 151 if(cfg.pageContext!=='checkout')return; 152 var rows=document.querySelectorAll('.cfw-cart-table .cart-item-row,.cfw-cart-table .cfw-cart-item-row,.cfw-cart-table [class*="cart-item-row"]'); 153 if(!rows.length)return; 154 var items=Array.isArray(cfg.cartItems)?cfg.cartItems:[]; 155 rows.forEach(function(row,index){ 156 var desc=row.querySelector('.cfw-cart-item-description'); 157 if(!desc)return; 158 159 var existing=row.querySelector('.flavor-cart-compliance-badges'); 160 if(existing){ 161 if(existing.parentNode!==desc||desc.lastElementChild!==existing)desc.appendChild(existing); 162 return; 163 } 164 var item=null; 165 var link=row.querySelector('a[href*="/product/"]'); 166 if(link){ 167 var href=link.getAttribute('href')||''; 168 item=items.find(function(candidate){ 169 return candidate&&candidate.productUrl&&href.indexOf(candidate.productUrl)!==-1; 170 })||null; 171 } 172 if(!item)item=items[index]||null; 173 var g=createSmallGaran(item); 174 var legalAllowed=!!(cfg.cartItemPopup&&item&&item.legalEligible!==false); 175 if(!legalAllowed&&!g)return; 176 var box=document.createElement('div');box.className='flavor-cart-compliance-badges flavor-cart-compliance-badges--cfw'; 177 if(legalAllowed)box.appendChild(createSmallLegal()); 178 if(g)box.appendChild(g); 179 desc.appendChild(box); 180 }); 181 } 182 183 function ensureCheckoutDirectNotice(){ 184 if(!cfg.directCheckout||!cfg.hasPhysicalCheckout||cfg.pageContext!=='checkout')return; 185 if(document.querySelector('.flavor-legal-guarantee--checkout-block,.flavor-legal-guarantee--checkout-cfw'))return; 186 187 var cfw=document.querySelector('.cfw-cart-table'); 188 if(cfw){ 189 var box=document.createElement('div');box.className='flavor-legal-guarantee flavor-legal-guarantee--checkout flavor-legal-guarantee--checkout-cfw'; 190 var p=document.createElement('p');p.className='flavor-legal-guarantee__intro';p.textContent=cfg.checkoutIntro||''; 191 var image=document.createElement('img');image.className='flavor-legal-guarantee__image';image.alt=cfg.alt||''; 192 image.setAttribute('data-legal-guarantee-de',cfg.de||'');image.setAttribute('data-legal-guarantee-en',cfg.en||''); 193 if(cfg.languageMode==='auto')image.setAttribute('data-legal-guarantee-auto','1'); 194 image.src=language()==='de'?cfg.de:cfg.en;box.appendChild(p);box.appendChild(image); 195 cfw.parentNode.insertBefore(box,cfw.nextSibling);return; 196 } 197 198 var button=document.querySelector('.wc-block-components-checkout-place-order-button,.wc-block-checkout__actions .wc-block-components-button,.wp-block-woocommerce-checkout-actions-block .wc-block-components-button'); 199 if(!button)return; 200 var box2=document.createElement('div');box2.className='flavor-legal-guarantee flavor-legal-guarantee--checkout flavor-legal-guarantee--checkout-block'; 201 var p2=document.createElement('p');p2.className='flavor-legal-guarantee__intro';p2.textContent=cfg.checkoutIntro||''; 202 var image2=document.createElement('img');image2.className='flavor-legal-guarantee__image';image2.alt=cfg.alt||''; 203 image2.setAttribute('data-legal-guarantee-de',cfg.de||'');image2.setAttribute('data-legal-guarantee-en',cfg.en||'');if(cfg.languageMode==='auto')image2.setAttribute('data-legal-guarantee-auto','1'); 204 image2.src=language()==='de'?cfg.de:cfg.en;box2.appendChild(p2);box2.appendChild(image2); 205 var actions=button.closest('.wc-block-checkout__actions,.wp-block-woocommerce-checkout-actions-block');var target=actions||button.parentNode;target.parentNode.insertBefore(box2,target); 206 } 207 208 function refreshDynamic(){bind(document);relocateClassicCartBadges();relocateCheckoutWcBadges();ensureCheckoutWcItems();ensureCheckoutDirectNotice();} 209 210 document.addEventListener('DOMContentLoaded',function(){ 211 refreshDynamic();
212 if(cfg.pageContext==='cart'||cfg.pageContext==='checkout'){ 213 observer=new MutationObserver(function(){clearTimeout(observerTimer);observerTimer=setTimeout(refreshDynamic,120);}); 214 observer.observe(document.body,{childList:true,subtree:true}); 215 } 216 }); 217 document.addEventListener('keydown',function(e){if(e.key==='Escape')closeModal();}); 218}());
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.