PageSourceSearch

https://www.bonusfinder.com/wp-content/cache/min/1/wp-content/them…/js/data_layer_events.js?ver=1790070200

js bonusfinder.com collected 2026-09-25 18:46:27 UTC 13,259 bytes, 32 lines download raw bytes

1class DataLayerEvents{static DEBUG=new URLSearchParams(window.location.search).get('debug')==='1';constructor(){this.isReviewPage=document.querySelector('.review-wrapper')!==null;this.bindFloatingCtaLocation();this.bindExitClickLogging();this.bindBonusCodeClick();this.bindReviewLinkClick();this.bindOfferClick();DataLayerEvents.log('DataLayerEvents initialized')}
2static log(...args){if(DataLayerEvents.DEBUG){console.log('%c[OplistClick]','color: #0d60c5; font-weight: bold;',...args)}}
3static deferNonCritical(fn){if(typeof window!=='undefined'&&typeof window.requestIdleCallback==='function'){window.requestIdleCallback(fn,{timeout:500})}else{setTimeout(fn,0)}}
4bindFloatingCtaLocation(){const updateFloatingLocation=()=>{const floatingOffer=document.querySelector('.bottom-float');if(!floatingOffer){return}
5const ctaLink=floatingOffer.querySelector('a.cta');if(ctaLink){const location=window.innerWidth<768?'floating_bottom':'floating_top';ctaLink.setAttribute('data-ctalocation',location)}};window.addEventListener('resize',updateFloatingLocation)}
6bindExitClickLogging(){document.addEventListener('click',(e)=>{const exitLink=e.target.closest('.exit-page-link');if(!exitLink){return}
7const ctalocation=exitLink.getAttribute('data-ctalocation')||'unknown';const operatorItem=exitLink.closest('.operator-item');const operatorList=exitLink.closest('.operator-list');const isComparisonDrawerCta=exitLink.classList.contains('comparison-drawer-cta')||!!exitLink.closest('#comparison-drawer-overlay');const href=exitLink.getAttribute('href')||'';let floatingListId='';let exitPopupListId='';let singleCtaListId='';let singleCtaOfferText='';let floatingOfferText='';if(ctalocation==='floating_top'){try{const parsedUrl=new URL(href,window.location.origin);floatingListId=parsedUrl.searchParams.get('listid')||''}catch(err){floatingListId=''}
8const floatingOffer=document.querySelector('.bottom-float.operator-list.active #bottomFloatText');floatingOfferText=floatingOffer?floatingOffer.textContent.trim():''}
9if(ctalocation==='exit_popup'){try{const parsedUrl=new URL(href,window.location.origin);exitPopupListId=parsedUrl.searchParams.get('listid')||''}catch(err){exitPopupListId=''}}
10if(ctalocation==='single-cta'||ctalocation==='single_cta'){try{const parsedUrl=new URL(href,window.location.origin);singleCtaListId=parsedUrl.searchParams.get('listid')||''}catch(err){singleCtaListId=''}
11const normalizeText=(text)=>text.replace(/\s+/g,' ').trim();const offersContainer=operatorItem?operatorItem.querySelector('.offers'):null;const offerItems=offersContainer?Array.from(offersContainer.querySelectorAll('.offer-item')):[];const offerTexts=offerItems.map((item)=>normalizeText(item.textContent||'')).filter(Boolean);singleCtaOfferText=offerTexts.join(', ')}
12const data={event:'exit_click_'+ctalocation,cta_location:ctalocation,page_url:window.location.href,href,operator:exitLink.getAttribute('data-operator')||(operatorItem?operatorItem.getAttribute('data-operator')||'':''),product:exitLink.getAttribute('data-product')||(operatorItem?operatorItem.getAttribute('data-product')||'':''),position:exitLink.getAttribute('data-position')||(operatorItem?operatorItem.getAttribute('data-position')||'':''),offer:exitLink.getAttribute('data-offer')||(operatorItem?operatorItem.getAttribute('data-offer')||'':''),list_type:exitLink.getAttribute('data-listtype')||(operatorList?operatorList.getAttribute('data-listtype')||'':''),list_id:exitLink.getAttribute('data-listid')||(operatorList?operatorList.getAttribute('data-listid')||'':''),single_cta:exitLink.getAttribute('data-single_cta')||'0',cta_id:exitLink.getAttribute('data-cta_id')||'',};if(ctalocation==='floating_top'){if(floatingListId){data.list_id=floatingListId}
13if(!data.offer&&floatingOfferText){data.offer=floatingOfferText}}
14if(ctalocation==='exit_popup'&&exitPopupListId){data.list_id=exitPopupListId}
15if(ctalocation==='single-cta'||ctalocation==='single_cta'){if(singleCtaListId){data.list_id=singleCtaListId}
16if(singleCtaOfferText){data.offer=singleCtaOfferText}}
17const isReviewPage=this.isReviewPage;const isExitClickCta=data.event==='exit_click_cta'||ctalocation==='cta'||ctalocation==='_cta';if(isReviewPage&&isExitClickCta){const appendSuffix=(value,suffix)=>{if(!value){return suffix.replace(/^_/,'')}
18return value.endsWith(suffix)?value:value+suffix};data.cta_location=appendSuffix(data.cta_location,'_review');try{const parsedUrl=new URL(href,window.location.origin);const reviewListId=parsedUrl.searchParams.get('listid')||'';if(reviewListId){data.list_id=reviewListId}}catch(err){}
19const normalizeText=(text)=>text.replace(/\s+/g,' ').trim();const offersContainer=operatorItem?operatorItem.querySelector('.offers'):null;const offerItems=offersContainer?Array.from(offersContainer.querySelectorAll('.offer-item')):[];const offerTexts=offerItems.map((item)=>
19normalizeText(item.textContent||'')).filter(Boolean);if(offerTexts.length>0){data.offer=offerTexts.join(', ')}}
20if(isComparisonDrawerCta){const appendSuffix=(value,suffix)=>{if(!value){return suffix.replace(/^_/,'')}
21return value.endsWith(suffix)?value:value+suffix};data.cta_location=appendSuffix(data.cta_location,'_comparison_drawer');data.list_type=appendSuffix(data.list_type,'_comparison_drawer');const drawerColumn=exitLink.closest('.comparison-drawer-column');if(drawerColumn){const columns=Array.from(document.querySelectorAll('#comparison-drawer-columns .comparison-drawer-column:not(.comparison-drawer-column-empty)'));const drawerIdx=columns.indexOf(drawerColumn);if(drawerIdx!==-1){const drawerPosition=String(drawerIdx+1);data.position=data.position?data.position+'_drawer_position_'+drawerPosition:'drawer_position_'+drawerPosition}}}
22window.dataLayer=window.dataLayer||[];window.dataLayer.push(data);DataLayerEvents.log('Exit click →',ctalocation,data)})}
23bindBonusCodeClick(){document.addEventListener('click',(e)=>{const bonuscode=e.target.closest('.bonuscode');if(!bonuscode){return}
24const operatorItem=bonuscode.closest('.bonus-item.operator-item');const operatorList=bonuscode.closest('.operator-list');const ctaButton=operatorItem?operatorItem.querySelector('.button.cta-button.cta.exit-page-link.ab-test-cta'):null;const operatorName=operatorItem?operatorItem.getAttribute('data-operator')||'':'';const code=bonuscode.textContent.trim();const isSingleCta=ctaButton&&ctaButton.getAttribute('data-single_cta')==='1';const singleCta=isSingleCta?'1':'0';const oplistItemId=operatorItem?operatorItem.getAttribute('data-operator_item_id')||'':'';const listType=operatorList?operatorList.getAttribute('data-listtype')||'':'';const isReviewPage=this.isReviewPage;const reviewSuffix=isReviewPage?'_casino_review':'';const promoCodeBaseLocation=isSingleCta?'promo_code_single_item_oplist':(listType?'promo_code_'+listType+'_oplist':'promo_code_oplist');const promoCodeLocation=promoCodeBaseLocation+reviewSuffix;const data={event:'bonus_code_click',category:'Bonus Code',action:'Click',page_url:window.location.href,label:code,operator:operatorName,location:promoCodeLocation,single_cta:singleCta,oplist_item_id:oplistItemId,};DataLayerEvents.deferNonCritical(()=>{window.dataLayer=window.dataLayer||[];window.dataLayer.push(data);DataLayerEvents.log('Bonus code click →',code,data)});const ctaLink=operatorItem?operatorItem.querySelector('a.cta.exit-page-link[href]'):null;if(ctaLink){const href=ctaLink.getAttribute('href');document.body.classList.add('bonuscode-redirecting');setTimeout(()=>{window.dataLayer=window.dataLayer||[];window.dataLayer.push({event:'exit_click_bonus_code',cta_location:'bonus_code',page_url:window.location.href,href,operator:operatorName,oplist_item_id:oplistItemId,list_type:listType,single_cta:singleCta,});DataLayerEvents.log('Bonus code redirect →',href);window.location.href=href},2000)}})}
25bindOfferClick(){document.addEventListener('click',(e)=>{if(e.target.closest('.bonuscode')){return}
26const normalizeText=(text)=>text.replace(/\s+/g,' ').trim();const exitPopupOffer=e.target.closest('.exit-popup.page.exit-popup-slider.active .swiper-slide.operator-item.swiper-slide-active .toplist-card-offer');if(exitPopupOffer){const operatorItem=exitPopupOffer.closest('.swiper-slide.operator-item.swiper-slide-active');const offerTitleEl=exitPopupOffer.querySelector('.offer-title');const offerText=normalizeText(offerTitleEl?offerTitleEl.textContent||'':exitPopupOffer.textContent||'');const operatorName=operatorItem?operatorItem.getAttribute('data-operator')||'':'';const oplistItemId=operatorItem?operatorItem.getAttribute('data-operator_item_id')||'':'';const data={event:'offer_click',category:'Offer',action:'Click',page_url:window.location.href,label:offerText,operator:operatorName,location:'offer_exit_popup_oplist',single_cta:'0',oplist_item_id:oplistItemId,};window.dataLayer=window.dataLayer||[];window.dataLayer.push(data);DataLayerEvents.log('Offer click →',operatorName,data);return}
27const bottomFloatText=e.target.closest('.bottom-float.operator-list.active #bottomFloatText');if(bottomFloatText){const operatorItem=bottomFloatText.closest('.container.operator-item, .operator-item');const ctaButton=bottomFloatText.closest('.bottom-float.operator-list.active')?.querySelector('.cta.exit-page-link, a.cta');const operatorName=operatorItem?operatorItem.getAttribute('data-operator')||'':'';const oplistItemId=operatorItem?operatorItem.getAttribute('data-operator_item_id')||'':'';const isReviewPage=this.isReviewPage;const reviewSuffix=isReviewPage?'_casino_review':'';const data={event:'offer_click',category:'Offer',action:'Click',page_url:window.location.href,label:normalizeText(bottomFloatText.textContent||''),operator:operatorName,location:'offer_promo_banner'+reviewSuffix,single_cta:ctaButton?ctaButton.getAttribute('data-single_cta')||'0':'0',oplist_item_id:oplistItemId,};window.dataLayer=window.dataLayer||[];window.dataLayer.push(data);DataLayerEvents.log('Offer click →',operatorName,data);return}
28const offers=e.target.closest('.offers');if(!offers){return}
29const operatorItem=offers.closest('.bonus-item.operator-item, .container.operator-item, .swiper-slide.operator-item');const operatorList=offers.closest('.operator-list');const exitLink=offers.closest('.exit-page-link');const ctaButton=operatorItem?operatorItem.querySelector('.button.cta-button.cta.exit-page-link.ab-test-cta'):null;const operatorName=operatorItem?operatorItem.getAttribute('data-operator')||'':'';const offerItems=Array.from(offers.querySelectorAll('.offer-item')).map((item)=>
29normalizeText(item.textContent||'')).filter(Boolean);const offerText=offerItems.length>0?offerItems.join(', '):normalizeText(offers.textContent||'');const listType=operatorList?operatorList.getAttribute('data-listtype')||'':'';const isExitPopup=!!offers.closest('.exit-popup.page.exit-popup-slider.active .swiper-slide.operator-item.swiper-slide-active');const isPromoBanner=!!offers.closest('.bottom-float.operator-list.active');const isSingleCta=ctaButton&&ctaButton.getAttribute('data-single_cta')==='1';const isReviewPage=this.isReviewPage;const reviewSuffix=isReviewPage?'_casino_review':'';const eventSuffix=isExitPopup?'exit_popup':(isPromoBanner?'promo_banner':(isSingleCta?'single_item_oplist':(listType.includes('secondary')?'secondary_oplist':'primary_oplist')));const offerLocation='offer_'+eventSuffix+reviewSuffix;const singleCta=isSingleCta?'1':(offers.getAttribute('data-single_cta')||(exitLink?exitLink.getAttribute('data-single_cta')||'0':'0'));const oplistItemId=operatorItem?operatorItem.getAttribute('data-operator_item_id')||'':'';const data={event:'offer_click',category:'Offer',action:'Click',page_url:window.location.href,label:offerText,operator:operatorName,location:offerLocation,single_cta:singleCta,oplist_item_id:oplistItemId,};window.dataLayer=window.dataLayer||[];window.dataLayer.push(data);DataLayerEvents.log('Offer click →',operatorName,data)})}
30bindReviewLinkClick(){document.addEventListener('click',(e)=>{const reviewLink=e.target.closest('.review-link-wrapper .link-underline');if(!reviewLink){return}
31const operatorItem=reviewLink.closest('.bonus-item.operator-item');const operatorList=reviewLink.closest('.operator-list');const ctaButton=operatorItem?operatorItem.querySelector('.button.cta-button.cta.exit-page-link.ab-test-cta'):null;const operatorName=operatorItem?operatorItem.getAttribute('data-operator')||'':'';const href=reviewLink.getAttribute('href')||'';const listType=operatorList?operatorList.getAttribute('data-listtype')||'':'';const isSingleCta=ctaButton&&ctaButton.getAttribute('data-single_cta')==='1';const reviewLocation=isSingleCta?'review_single_item_oplist':(listType?'review_'+listType+'_oplist':'review_oplist');const singleCta=isSingleCta?'1':'0';const oplistItemId=operatorItem?operatorItem.getAttribute('data-operator_item_id')||'':'';const data={event:'review_link_click',category:'Review Link',action:'Click',page_url:window.location.href,label:operatorName,review_url:href,location:reviewLocation,single_cta:singleCta,oplist_item_id:oplistItemId,};window.dataLayer=window.dataLayer||[];window.dataLayer.push(data);DataLayerEvents.log('Review link click →',operatorName,data)})}}
32if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',()=>new DataLayerEvents())}else{new DataLayerEvents()}

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.