let adsInitialized=false;
let inlineAdIndex=0;
export function initInlineAds(ads){
if(adsInitialized){
console.warn('Inline ads already initialized');
return;
}
adsInitialized=true;
const infiniteLoadWrapperEl=document.getElementById('single-post-infinite');
const mainPostWrapper=infiniteLoadWrapperEl.querySelector('.single-post-outer:first-of-type');
if(!infiniteLoadWrapperEl||!mainPostWrapper){
return;
}
insertAndLoadInContentAds(mainPostWrapper, ads);
const observer=new MutationObserver(mutations=> {
mutations.forEach(mutation=> {
if(mutation.type!=='childList'||!mutation.addedNodes.length){
return;
}
for (const node of mutation.addedNodes){
if(node.nodeType!==Node.ELEMENT_NODE){
continue;
}
insertAndLoadInContentAds(node, ads);
}});
});
observer.observe(infiniteLoadWrapperEl, { childList: true });
}
function insertAndLoadInContentAds(node, ads){
const pEls=node.querySelectorAll('article.post .entry-content p:not(:empty)');
if(!pEls?.length){
return;
}
for (let i=0; i < pEls.length; i++){
const ad=ads.find(config=> config.displayAfterNthParagraphs.includes(i + 1));
if(!ad){
continue;
}
const adDivId=`gpt-inline-ad-${++inlineAdIndex}`;
pEls[i].insertAdjacentHTML('afterend', `
<div class="ad-wrap">
<span class="ad-description is-meta">&mdash; Advertisement &mdash;</span>
<div id="${adDivId}" style="min-width: 300px; min-height: 90px;"></div>
</div>
`);
googletag.cmd.push(function(){
const slot=googletag.defineSlot(ad.adUnitPath, [[300, 250], [336, 280], 'fluid'], adDivId);
if(!slot){
console.warn(`Failed to define ad slot for ${ad.adUnitPath}`);
return;
}
slot.defineSizeMapping(googletag.sizeMapping()
.addSize([1049, 450], [[300, 250], [336, 280], 'fluid'])
.addSize([769, 400], [[300, 250], [336, 280], 'fluid'])
.addSize([10, 10], [[300, 250], [336, 280], 'fluid'])
.build()
);
slot.addService(googletag.pubads());
googletag.display(slot);
});
}};