/* Insert ad slots into article */
document.addEventListener('DOMContentLoaded', function () {
if (document.querySelector('.article-content.post-body')) {
const postBodyContentBlocks = document.querySelectorAll('.post-body > *');
let wordCount = 0;
let eligiblePositions = [];
let prevBlock = null;
postBodyContentBlocks.forEach(block => {
wordCount += block.innerText.trim().split(/\s+/).length;
if (prevBlock !== null) {
if (
prevBlock.tagName === 'P' ||
prevBlock.tagName === 'UL' ||
prevBlock.tagName === 'BLOCKQUOTE' ||
prevBlock.tagName === 'FIGURE' ||
prevBlock.tagName === 'DIV'
) {
eligiblePositions.push(block);
}
}
prevBlock = block;
});
const numAdsToRender = Math.ceil(wordCount / 300);
let firstPosition = false;
let secondPosition = false;
let thirdPosition = false;
if (numAdsToRender === 1) {
firstPosition = Math.floor(eligiblePositions.length / 2);
} else if (numAdsToRender === 2) {
firstPosition = Math.floor(eligiblePositions.length / 3);
secondPosition = eligiblePositions.length - firstPosition;
} else {
firstPosition = Math.floor(eligiblePositions.length / 5);
secondPosition = Math.floor(eligiblePositions.length / 2);
thirdPosition = eligiblePositions.length - firstPosition;
}
function adMarkup(slotNumber) {
return (
'
'
);
}
if (firstPosition) {
const ad1 = document.createElement('aside');
ad1.innerHTML = adMarkup(1);
document.querySelector('.post-body').insertBefore(ad1, eligiblePositions[firstPosition]);
}
if (secondPosition) {
const ad2 = document.createElement('aside');
ad2.innerHTML = adMarkup(2);
document.querySelector('.post-body').insertBefore(ad2, eligiblePositions[secondPosition]);
}
if (thirdPosition) {
const ad3 = document.createElement('aside');
ad3.innerHTML = adMarkup(3);
document.querySelector('.post-body').insertBefore(ad3, eligiblePositions[thirdPosition]);
}
}
makeAdCalls();
});
/* End insert ad slots into article */
function makeAdCalls() {
window.googletag = window.googletag || {
cmd: [],
};
window.stv_gam_data = window.stv_gam_data || {};
googletag.cmd.push(function () {
googletag.pubads().enableSingleRequest();
googletag.enableServices();
});
function uuid() {
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {
return (c ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16);
});
}
function loadAdvert(slotEl) {
const slotType = slotEl.dataset.adslot;
const slotCat = slotEl.dataset.category;
if (!('slotnumber' in slotEl.dataset)) {
window.stv_gam_data.enableDebugging && console.log('No slot number from article-inline, assuming 1.');
var slotNo = 1;
} else {
var slotNo = slotEl.dataset.slotnumber;
}
var slotId = 'ad-' + uuid();
var slotDiv = document.createElement('div');
slotDiv.id = slotId;
slotEl.appendChild(slotDiv);
googletag.cmd.push(function () {
var mapping1 = googletag
.sizeMapping() // premium-top - top and section pages
.addSize([0, 0], ['fluid', [300, 250]])
.addSize([1001, 0], ['fluid', [200, 200]])
.addSize([1151, 0], ['fluid', [250, 250]])
.addSize([1301, 0], ['fluid', [300, 250]])
.build();
var mapping2 = googletag
.sizeMapping() // premium-mid - top and section pages
.addSize([0, 0], [])
.addSize([1001, 0], ['fluid', [728, 90], [970, 90]])
.addSize([1280, 800], ['fluid', [728, 90], [970, 90], [970, 250]])
.build();
var mapping3 = googletag
.sizeMapping() // slider-inline, slider-inline-lower - top page
.addSize([0, 0], ['fluid', [300, 100], [300, 250]])
.addSize([501, 0], ['fluid', [468, 60]])
.addSize(
[1001, 0],
[
[300, 250],
[300, 600],
],
)
.build();
var mapping4 = googletag
.sizeMapping()
.addSize([0, 0], ['fluid', [300, 250], [300, 100], [320, 480]])
.addSize([501, 0], ['fluid', [300, 250], [320, 480], [468, 60]])
.addSize([1001, 0], ['fluid', [300, 250], [320, 480]])
.addSize([1361, 0], ['fluid', [300, 250], [320, 480], [728, 90]])
.build();
if (slotType == 'premium-top') {
googletag
.defineSlot('/1055753/stv.tv/premium-top', [[300, 250], [250, 250], [200, 200], 'fluid'], slotId)
.defineSizeMapping(mapping1)
.addService(googletag.pubads());
}
if (slotType == 'premium-mid') {
googletag
.defineSlot('/1055753/stv.tv/premium-mid', [[970, 250], [970, 90], [728, 90], 'fluid'], slotId)
.defineSizeMapping(mapping2)
.addService(googletag.pubads());
}
if (slotType == 'slider-inline') {
googletag
.defineSlot('/1055753/stv.tv/slider-inline', [[300, 600], [300, 250], [468, 60], [300, 100], 'fluid'], slotId)
.defineSizeMapping(mapping3)
.addService(googletag.pubads());
}
if (slotType.includes('home-category-')) {
const id = slotType.replace('home-category-', '');
googletag
.defineSlot(
'/1055753/stv.tv/home-category-' + id,
[[300, 600], [300, 250], [468, 60], [300, 100], 'fluid'],
slotId,
)
.defineSizeMapping(mapping1)
.setTargeting('section', slotCat)
.addService(googletag.pubads());
}
if (slotType == 'slider-inline-lower') {
googletag
.defineSlot(
'/1055753/stv.tv/slider-inline-lower',
[[300, 600], [300, 250], [468, 60], [300, 100], 'fluid'],
slotId,
)
.defineSizeMapping(mapping3)
.addService(googletag.pubads());
}
if (slotType == 'slider-article') {
googletag
.defineSlot(
'/1055753/stv.tv/slider-article',
[[300, 600], [300, 250], [468, 60], [300, 100], 'fluid'],
slotId,
)
.defineSizeMapping(mapping3)
.addService(googletag.pubads());
}
if (slotType == 'article-inline') {
var maps = [[300, 250], [1, 1], 'fluid'];
if (slotNo == 1) {
maps = [[300, 250], [320, 480], [1, 1], 'fluid'];
}
googletag
.defineSlot('/1055753/stv.tv/article-inline-' + slotNo, maps, slotId)
.defineSizeMapping(mapping4)
.addService(googletag.pubads());
}
window.stv_gam_data.enableDebugging &&
console.log(
'✅ Generated element ID ' + slotId + ' for slot type ' + slotType + ' and injected ad into the DOM.',
);
googletag
.pubads()
.setTargeting('section', [window.stv_gam_data.section])
.setTargeting('domain', [window.stv_gam_data.domain])
.setTargeting('url', [window.stv_gam_data.url])
.setTargeting('weatherArea', [window.stv_gam_data.weatherArea])
.setTargeting('isArticle', window.stv_gam_data.isArticle.toString())
.setTargeting('articleId', [window.stv_gam_data.articleId])
.setTargeting('platform', [window.stv_gam_data.platform])
.setTargeting('keywords', [window.stv_gam_data.keywords]);
googletag.display(slotId);
});
}
const options = {
rootMargin: '0px 0px 200px 0px',
threshold: 0,
};
const adObserver = new IntersectionObserver((slots, imgObserver) => {
slots.forEach(slot => {
if (slot.isIntersecting) {
if (!slot.target.hasChildNodes()) {
window.stv_gam_data.enableDebugging &&
console.log(`✅ Hit add slot for "${slot.target.dataset.adslot}" and it's empty, loading an ad.`);
loadAdvert(slot.target);
} else {
window.stv_gam_data.enableDebugging &&
console.log(
`🥳 Hit add slot for "${slot.target.dataset.adslot}" with id "${slot.target.firstElementChild.id}" but it already has an ad, not requesting any more.`,
);
}
}
});
}, options);
const adSlots = document.querySelectorAll('.stv-gam-slot');
if (adSlots) {
adSlots.forEach(slot => {
adObserver.observe(slot);
});
}
}