PageSourceSearch

https://pvundso.de/wp-content/plugins/flavor-claims/assets/js/legal-guarantee.js?ver=1.6.13

js pvundso.de collected 2026-10-02 19:32:09 UTC 10,463 bytes, 218 lines download raw bytes

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.