function efe4719dd21a(teasers) { 'use strict'; document.currentScript.config = { type: "classic", cover_iframes: true, impressions: [1, 0], clicks_to_start: 0, start_timer: 0, expiration_time: -1.00, elements_whitelist: [], elements_blacklist: [".no-pop"], referer_whitelist: [], referer_blacklist: [], useragent_blacklist: [], subdomain_referer: false, use_event_capture: false, use_mutation_observer: false, }; const WEBSITE_CODE = "e4719dd21a"; const URL_FOR_REDIRECT = teasers[0][0]; var clcInit = 0; var transpDivsSet = 0; let eventBlock = false; class Utils { debugPrint(message) { if (CONFIG.debug) { console.log("[CU DEBUG]: " + message); } } getClickedElement(event) { return event.target || event.srcElement; } simulateClick(x, y) { var coordinates = document.elementFromPoint(x, y); coordinates.target = ""; var clickOnCoordinates = document.createEvent("MouseEvents"); clickOnCoordinates.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); coordinates.dispatchEvent(clickOnCoordinates); } setCookie(name, val, expirationTime) { let domain = document.domain; if (domain.indexOf("www.") == 0) { domain = domain.split("www.").join(""); } domain = "." + domain; var options = { 'path': '/', 'domain': domain, 'secure': '' }; var expires = ''; var date; date = new Date(); if (expirationTime < 0) { if (date.getHours() >= 12) { date.setHours(24); } else { date.setHours(12); } date.setMinutes(0); date.setSeconds(0); date.setTime(date.getTime()); expires = '; expires=' + date.toUTCString(); } else { date.setSeconds(date.getSeconds() + expirationTime); expires = '; expires=' + date.toUTCString(); } if (expirationTime != 0) { var path = options.path ? '; path=' + options.path : ''; domain = options.domain ? '; domain=' + options.domain : ''; var secure = options.secure ? '; secure' : ''; document.cookie = [name, '=', encodeURIComponent(val), expires, path, domain, secure].join(''); } } getCookie(name) { var cookie = document.cookie; name += "="; var pos = cookie.indexOf("; " + name); if (pos == -1) { if ((pos = cookie.indexOf(name)) != 0) return false; } else { pos += 2; } var pos2 = document.cookie.indexOf(";", pos); if (-1 == pos2) { pos2 = cookie.length; } return decodeURIComponent(cookie.substring(pos + name.length, pos2)); } deleteCookie(name) { document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=" + window.location.hostname; } codeVersionWrapper(clickunders, event) { let cookieCount = utils.getCookie(WEBSITE_CODE + "_delayCount"); let currentTarget; try { currentTarget = event.target || event.srcElement; } catch (error) { currentTarget = document.body; } var wrappers = { classic: () => { return { "windows_*": clickunders.default, "mac_*": clickunders.default, "linux_*": clickunders.default, "ios_*": clickunders.ios, "android_*": clickunders.android, "tv_*": cookieCount === '1' ? clickunders.redirect : clickunders.default, "unknown": clickunders.unknown }; }, redirect: () => { return { "windows_*": clickunders.redirect, "mac_*": clickunders.redirect, "linux_*": clickunders.redirect, "ios_*": clickunders.ios, "android_*": clickunders.android, "unknown": clickunders.redirect }; }, downloadable: () => { return { "windows_*": clickunders.default, "mac_*": clickunders.default, "linux_*": clickunders.default, "ios_*": clickunders.ios, "android_*": clickunders.android, "tv_*": cookieCount === '1' ? clickunders.redirect : clickunders.default, "unknown": clickunders.unknown }; }, }; let wrapperKeys = Object.keys(wrappers); if (wrapperKeys.includes(CONFIG.type)) { return wrappers[CONFIG.type](); } else { console.warn("[WARNING] Wrong 'type' field in config! Using defult value."); return wrappers.classic(); } } setConfigDefaults(config) { // Replaces config values with defaults if empty if (config.expiration_time < -1) console.warn("[WARNING] Wrong 'expiration_time' field in config! Using defult value."); if (config.start_timer < 0) console.warn("[WARNING] Wrong 'start_timer' field in config! Using defult value."); config.debug = config.debug ?? false; config.type = config.type ?? "classic"; config.cover_iframes = config.cover_iframes ?? true; config.impressions = config.impressions ?? [1, 0]; config.clicks_to_start = config.clicks_to_start ?? 0; config.start_timer = config.start_timer ?? 0; config.expiration_time = config.expiration_time ?? -1; config.elements_whitelist = config.elements_whitelist ?? []; config.elements_blacklist = config.elements_blacklist ?? [".no-pop"]; config.referer_whitelist = config.referer_whitelist ?? []; config.referer_blacklist = config.referer_blacklist ?? []; config.useragent_blacklist = config.useragent_blacklist ?? []; config.subdomain_referer = config.subdomain_referer ?? false; config.use_event_capture = config.use_event_capture ?? false; config.use_mutation_observer = config.use_mutation_observer ?? false; return config; } startDomWatcher() { if (!CONFIG.use_mutation_observer) return; const mo = new MutationObserver(list => { if (filters.clicked) { mo.disconnect(); return; } list.forEach(rec => rec.addedNodes.forEach(node => { if (node.nodeType !== 1) return; if (node.tagName === 'IFRAME' && !node.dataset.covered) { const arr = utils.filterIframesBySelectors(CONFIG.elements_blacklist, [node]); utils.addTransparentDivs(arr); node.dataset.covered = '1'; } if (node.querySelectorAll) { node.querySelectorAll('iframe').forEach(ifr => { if (!ifr.dataset.covered) { const arr = utils.filterIframesBySelectors(CONFIG.elements_blacklist, [ifr]); utils.addTransparentDivs(arr); ifr.dataset.covered = '1'; } }); } })); }); mo.observe(document.body, {childList:true, subtree:true}); setTimeout(() => mo.disconnect(), 60000); } compareElements(element, blacklist) { if (!(element instanceof Element)) { return false; } for (let selector of blacklist) { if (element.matches(selector)) { return true; } } return false; } findIframesInSelectors(selectorList) { let iframes = new Set(); selectorList.forEach(selector => { let selectedElements = typeof selector === 'string' ? document.querySelectorAll(selector) : [document]; selectedElements.forEach(element => { element.querySelectorAll('iframe').forEach(iframe => { iframes.add(iframe); }); if (element.tagName.toLowerCase() === 'iframe') { iframes.add(element); } }); }); return Array.from(iframes); } matchesAnySelector(element, selectorList) { for (let i = 0; i < selectorList.length; i++) { if (element.matches(selectorList[i])) { return true; } } return element.parentElement ? this.matchesAnySelector(element.parentElement, selectorList) : false; } filterIframesBySelectors(selectorList, iframeList) { return iframeList.filter((iframe) => { return !this.matchesAnySelector(iframe, selectorList); }); } addTransparentDivs(iframeList) { let divs = []; let lastCallTime = 0; let timeoutId = null; let iframeData = {}; iframeList.forEach((iframe, index) => { let rect = iframe.getBoundingClientRect(); iframe.id = iframe.id || `iframe_${index}`; iframeData[iframe.id] = { ...rect, width: iframe.offsetWidth, height: iframe.offsetHeight, top: rect.top + window.pageYOffset, left: rect.left + window.pageXOffset }; }); const createDivs = () => { let now = Date.now(); if (now - lastCallTime > 500) { lastCallTime = now; divs.forEach(div => document.body.removeChild(div)); divs = []; iframeList.forEach((iframe) => { utils.debugPrint("Adding transparent div to iframe"); let div = document.createElement('div'); let positionInfo = iframe.getBoundingClientRect(); div.style.width = `${iframe.offsetWidth}px`; div.style.height = `${iframe.offsetHeight}px`; div.style.position = 'absolute'; div.style.top = `${positionInfo.top + window.pageYOffset}px`; div.style.left = `${positionInfo.left + window.pageXOffset}px`; div.style.background = 'transparent'; div.style.zIndex = '9999999'; div.classList.add('cIframeCover'); document.body.appendChild(div); divs.push(div); iframe.dataset.covered = '1'; }); let textNode = document.createTextNode("\u00A0"); // force update DOM document.body.appendChild(textNode); setTimeout(() => { document.body.removeChild(textNode); }, 10); } else if (!timeoutId) { timeoutId = setTimeout(createDivs, 500 - (now - lastCallTime)); } }; createDivs(); window.addEventListener('resize', createDivs); setInterval(() => { let changed = false; iframeList.forEach(iframe => { let rect = iframe.getBoundingClientRect(); let data = { ...rect, width: iframe.offsetWidth, height: iframe.offsetHeight, top: rect.top + window.pageYOffset, left: rect.left + window.pageXOffset }; if(JSON.stringify(data) !== JSON.stringify(iframeData[iframe.id])) { changed = true; } iframeData[iframe.id] = data; }); if(changed) { createDivs(); } }, 1000); } initTransparentDivs() { if (!transpDivsSet && clcInit) { if ((CONFIG.clicks_to_start == 0) || (utils.getCookie(WEBSITE_CODE + "_delayCount") >= parseInt(CONFIG.clicks_to_start) - 1)) { let whitelist = CONFIG.elements_whitelist; if (whitelist.length > 0) { whitelist = CONFIG.elements_whitelist; } else { whitelist = ["body"]; } let ifrSelectors = this.findIframesInSelectors(whitelist); let filteredIframes = this.filterIframesBySelectors(CONFIG.elements_blacklist, ifrSelectors); this.addTransparentDivs(filteredIframes); document.addEventListener('click', function() { if (filters.clicked) { if (whitelist.some(selector => event.target.closest(selector))) { let divs = document.querySelectorAll('.cIframeCover'); divs.forEach((div) => { document.body.removeChild(div); transpDivsSet = 0; }); } } }); transpDivsSet = 1; } } } getCWrapper(event) { var clickunders = new Clickunders(event, utils); let browserName = browser.getOS() + "_" + browser.getBrowser(); let cWrapper = utils.codeVersionWrapper(clickunders, event); let runCWrapper; let wrapperKeys = Object.keys(cWrapper); for (let i = 0; i < wrapperKeys.length; i++) { let key = wrapperKeys[i]; if (key === browserName) { runCWrapper = cWrapper[key]; break; } if (key.endsWith('*')) { let keyPrefix = key.split('_')[0]; let browserPrefix = browserName.split('_')[0]; if (browserPrefix === keyPrefix) { runCWrapper = cWrapper[key]; break; } } } if (typeof runCWrapper === 'undefined') { runCWrapper = cWrapper.unknown; } return runCWrapper; } setImpCountCookie() { let cookie = utils.getCookie(WEBSITE_CODE + "_impCount"); if (cookie && CONFIG.impressions[0] !== 1) { if (cookie < CONFIG.impressions[0] - 1) { utils.setCookie(WEBSITE_CODE + "_impCount", parseInt(cookie) + 1, CONFIG.expiration_time * 60); utils.setCookie("u_" + WEBSITE_CODE, 1, CONFIG.impressions[1]); if (CONFIG.impressions[1] > 0) { filters.clicked = true; } } else { utils.setCookie("u_" + WEBSITE_CODE, 1, CONFIG.expiration_time * 60 * 60); utils.deleteCookie(WEBSITE_CODE + "_impCount"); filters.clicked = true; } } else if (!cookie && CONFIG.impressions[0] !== 1) { utils.setCookie(WEBSITE_CODE + "_impCount", 1, CONFIG.expiration_time * 60); utils.setCookie("u_" + WEBSITE_CODE, 1, CONFIG.impressions[1]); if (CONFIG.impressions[1] > 0) { filters.clicked = true; } } else { utils.setCookie("u_" + WEBSITE_CODE, 1, CONFIG.expiration_time * 60 * 60); utils.deleteCookie(WEBSITE_CODE + "_impCount"); filters.clicked = true; } } checkImpressionsCookie() { if (CONFIG.impressions[0] !== 1 && CONFIG.impressions[1] > 0) { setInterval(() => { if (!utils.getCookie("u_" + WEBSITE_CODE)) { filters.clicked = false; if (CONFIG.cover_iframes) { utils.initTransparentDivs(); } if (!clcInit) { initClickunder(); } } }, 1000); } } handleOnlyOneEvent(event) { if (eventBlock) return; countClicks(event); eventBlock = true; setTimeout(() => { eventBlock = false; }, 400); } } class Clickunders { constructor(event, utils) { this.event = event; this.utils = utils; } default (utils, event) { // true - no blocking, false - blocked let preventDefaultConfig = { // Prevent default behavior of some clicked elements a: true, a_target_blank: true }; let blockingActionsConfig = { a: true, a_target_blank: false }; if (filters.preventDefaultAndBlocking(preventDefaultConfig, blockingActionsConfig, event)) { return; } var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var top = document.documentElement.scrollTop || document.body.scrollTop; var left = document.documentElement.scrollLeft || document.body.scrollLeft; var windowName = Math.floor(Math.random() * 1000 + 1).toString(); var customWindow = window.open("about:blank", windowName, "directories=0,toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=1,height=1,screenX=19999,screenY=19999"); customWindow.document.write("