module.siteConfigOptions = {"disableRefresh":false,"explicitContent":false,"disableApstagLoad":false,"disablePrebidLoad":false,"networkCode":"138855687"}; module.enablePrebidLoad = !(module.disableAds === "yes") && !false; if (window.location.hash === "#debug-ads") { module.logs = { log: console.log.bind(console, "%c[PUBLICIDAD]", "color:green"), error: console.error.bind(console, "%c[PUBLICIDAD]", "color:green"), group: console.group.bind(console), groupEnd: console.groupEnd.bind(console), }; } else { const nothingToDo = () => {}; module.logs = { log: nothingToDo, error: nothingToDo, group: nothingToDo, groupEnd: nothingToDo, }; } let app = window.app || {}; app.utils = ((module) => { module.getCookie = (name) => { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) { return parts.pop().split(";").shift(); } }; module.setCookie = (name, value, options) => { let updatedCookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; options = options || {}; Object.keys(options).forEach((optionKey) => { const optionValue = options[optionKey]; updatedCookie += `; ${optionKey}${optionValue !== true ? `=${optionValue}` : ""}`; }); document.cookie = updatedCookie; }; module.URLSearchParams = window.URLSearchParams || (() => ({ has: () => false, })); module.getViewportHeight = () => Math.max(document.documentElement.clientHeight, window.innerHeight || 0); module.getViewportWidth = () => Math.max(document.documentElement.clientWidth, window.innerWidth || 0); module.getScreenWidth = (def) => (screen ? screen.width : def || 0); return module; })(app.utils || {}); const slotTargetings = { footer: "cpm_mf", header: "cpm_m", }; let footerAdId = undefined; let headerAdId = undefined; const initializePubadsEventListeners = () => { googletag.pubads().addEventListener("slotVisibilityChanged", (event) => { if (event.isEmpty) return; const targeting = event.slot.getTargeting("p")[0]; if (targeting === slotTargetings.footer && event.inViewPercentage > 50) { let closeButtonPc = document.querySelector('[data-actas="close-sticky-desktop"]'); if (closeButtonPc) { closeButtonPc.addEventListener("click", () => { closeButtonPc.parentElement.parentElement && (closeButtonPc.parentElement.parentElement.style.display = "none"); hideFooterAd = true; }); setTimeout(() => { closeButtonPc.style.display = "inline-flex"; }, 1500); } let closeButtonMobile = document.querySelector('[data-actas="close-sticky-mobile"]'); if (closeButtonMobile) { closeButtonMobile.addEventListener("click", () => { closeButtonMobile.parentElement.parentElement && (closeButtonMobile.parentElement.parentElement.style.display = "none"); hideFooterAd = true; }); setTimeout(() => { closeButtonMobile.style.display = "inline-flex"; }, 1500); } } }); if (headerAdId && footerAdId) { const headerAd = document.getElementById(headerAdId); const footerAd = document.getElementById(footerAdId); if (headerAd) { observer.observe(headerAd); } if (footerAd) { observer.observe(footerAd); } } }; let hideFooterAd = false; let showFooterAd = false; let isHeaderVisible = false; const handleIntersectionAds = (entries, observer) => { let footerAdElement = document.getElementById(footerAdId); entries.forEach((entry) => { if (entry.target.id === headerAdId && !hideFooterAd) { isHeaderVisible = entry.isIntersecting || entry.boundingClientRect.y > 0; if (!showFooterAd && !isHeaderVisible) { showFooterAd = true; pbjs.que.push(() => { pbjs.refreshAds([footerAdId]); }); } footerAdElement?.parentElement?.parentElement?.parentElement && (footerAdElement.parentElement.parentElement.parentElement.style.visibility = isHeaderVisible ? "hidden" : "visible"); } }); }; const optionsIntersectionAds = { root: null, rootMargin: "0px", threshold: 0 }; const observer = new IntersectionObserver(handleIntersectionAds, optionsIntersectionAds); module.screenWidth = app.utils.getScreenWidth(); module.device = module.screenWidth < 768 ? "mobile" : "desktop"; module.lazyLoadSensibility = (module.screenWidth < 501 ? module.adMap?.config?.lazyLoadSensibilityMobile : module.adMap?.config?.lazyLoadSensibilityDesktop) || 0; module.lazyLoadSensibilityPx = module.lazyLoadSensibility ? (module.lazyLoadSensibility + 1) * app.utils.getViewportHeight() : 0; module.isPositionActive = (position) => { return (position.config?.enabledForBitMask & module.user.type) === module.user.type; }; const buildPositionOffsetGetterFunction = (elementId) => { const element = document.getElementById(elementId); if (!element) { return () => ({ absoluteTop: 0, renderAt: 0 }); } return () => { const box = element.getBoundingClientRect(); const absoluteTop = box.top + window.scrollY; const renderAt = absoluteTop - module.lazyLoadSensibilityPx; return { absoluteTop, renderAt }; }; }; module.handleLazyLoadedPosition = (slot) => { const elementId = slot.getSlotElementId(); const getPositionOffset = buildPositionOffsetGetterFunction(elementId); const offset = getPositionOffset().renderAt; if (offset < 1 || document.body.scrollTop > offset || document.documentElement.scrollTop > offset) { module.logs.log( `La posición ${elementId} debería cargarse perezosamente, pero su offset es menor que la sensibilidad configurada:`, offset, ); if (!module.siteConfigOptions.disablePrebidLoad) { module.logs.log("Pintando slot with refreshAds: ", elementId); pbjs.que.push(() => { pbjs.refreshAds([elementId]); }); } } else { module.logs.log(`La posición ${elementId} será cargada perezosamente a ${offset}px`); module.handleScrolledPosition(slot, getPositionOffset); } }; module.handleScrolledPosition = (slot, getPositionOffset) => { const listener = () => { const positionBox = getPositionOffset(); const renderPositionAt = positionBox.renderAt; const scrollY = document.body.scrollTop || document.documentElement.scrollTop; if (scrollY > renderPositionAt) { module.logs.group(`Se ha llegado al scroll necesario para pintar ${slot.getSlotElementId()}`); module.logs.log(` - El slot se encuentra a ${positionBox.absoluteTop}px de altura.`); module.logs.log(` - La sensibilidad del lazy load es ${module.lazyLoadSensibility} viewport(s),`); module.logs.log(` la altura del viewport es ${app.utils.getViewportHeight()}px, `); module.logs.log( ` por lo que la posición se debería cargar ${module.lazyLoadSensibilityPx}px antes de que entre en el viewport.`, ); module.logs.log(` - Es decir, la posición se debería cargar en el scroll ${renderPositionAt}`); module.logs.log(` - El scroll actual es ${scrollY}px`); module.logs.groupEnd(); if (!module.siteConfigOptions.disablePrebidLoad) { module.logs.log("Pintando slot: ", slot.getSlotElementId()); pbjs.que.push(() => { pbjs.refreshAds([slot.getSlotElementId()]); }); } document.removeEventListener("scroll", listener, true); } }; document.addEventListener("scroll", listener, true); }; module.log = console.log.bind(console, "%c[USER]", "color:darkorange"); let userTypes = { NONE: 0, ANONYMOUS: 1, REGISTERED: 2, SUBSCRIBER: 4, }; let userInfo = { type: userTypes.ANONYMOUS, u: null }; if (typeof app.utils.getCookie("__tac") != "undefined" && app.utils.getCookie("__tac").length > 0) { if (!module.premiumEnabled) { userInfo.type = userTypes.REGISTERED; userInfo.u = "r"; } else { userInfo.type = userTypes.SUBSCRIBER; userInfo.u = "s"; } } else if (typeof app.utils.getCookie("__utp") != "undefined" && app.utils.getCookie("__utp").length > 0) { userInfo.type = userTypes.REGISTERED; userInfo.u = "r"; } userInfo.hasAccess = !module.isPremiumContent || userInfo.type > (module.premiumEnabled ? userTypes.REGISTERED : userTypes.ANONYMOUS); module.user = userInfo; const startBiddingProcess = () => { if (module.user.type === userTypes.SUBSCRIBER) { module.enablePrebidLoad = false; module.logs.log("Se omite la carga de pb.js y apstag debido a que el usuario es suscriptor."); return; } if (module.enablePrebidLoad) { window.pbjs = window.pbjs || { que: [] }; const deviceHbEpi = module.device ?? (screen.width < 768 ? "mobile" : "device"); window.hb_epi = `${module.media.toLowerCase()}_${deviceHbEpi}${module.target}`; module.logs.log("Iniciando el proceso de pujas con hb_epi: ", hb_epi); const pbwrapper = "https://trafico.prensaiberica.es/adm/min/pb_wrapper/pbwrapper.js"; const prebid = "https://trafico.prensaiberica.es/adm/min/pb_wrapper/prebid.js"; let pbwrapperScripts = document.createElement("script"); pbwrapperScripts.type = "text/javascript"; pbwrapperScripts.src = pbwrapper; pbwrapperScripts.async = true; document.head.appendChild(pbwrapperScripts); let prebidScripts = document.createElement("link"); prebidScripts.rel = "preload"; prebidScripts.href = prebid; prebidScripts.as = "script"; prebidScripts.fetchpriority = "high"; prebidScripts.async = true; document.head.appendChild(prebidScripts); } else { module.logs.log("Se omite la carga de pb.js porque así fue indicado en el AdMap o que la página no tiene prebid."); } }; let searchParams = new URLSearchParams(window.location.search.slice(1)); if (searchParams.has("tagepi")) { if (module.tagepi) { module.tagepi.push(searchParams.get("tagepi")); } } const setTargetingByLocalStorage = (targeting, item) => { const storage = localStorage.getItem(item); if (storage) { googletag.pubads().setTargeting(targeting, storage); } }; const initializeTargeting = () => { module.logs.log("Ejecutando inicialización de GAM."); /* setTargeting cxense */ try { setTargetingByLocalStorage("CxSegments", "pisegs"); setTargetingByLocalStorage("r1", "_mo_r1"); setTargetingByLocalStorage("r2", "_mo_r2"); if (window._mo?.urlknow?.bs) googletag.pubads().setTargeting("bs", window._mo.urlknow.bs); } catch (e) {} try { let strDat = localStorage.getItem("_mo_ipdata"); let objDat; if (strDat) { objDat = JSON.parse(strDat); if (objDat?.cit) googletag.pubads().setTargeting("cc", objDat.cit); if (objDat?.zip) googletag.pubads().setTargeting("cz", objDat.zip); } strDat = localStorage.getItem("_mo_profile"); if (strDat) { objDat = JSON.parse(strDat); if (objDat?.geo?.cit) googletag.pubads().setTargeting("bc", objDat.geo.cit); if (objDat?.geo?.zip) googletag.pubads().setTargeting("bz", objDat.geo.zip); } } catch (e) {} if (module.tagepi.length) window.googletag.pubads().setTargeting("tagepi", module.tagepi); googletag.pubads().setTargeting("hiperlocalepi", []); if (module.adMap.adMapId) googletag.pubads().setTargeting("page", module.pageId); if (module.user.u) googletag.pubads().setTargeting("u", module.user.u); if (!module.user.hasAccess) googletag.pubads().setTargeting("tipopagina", "pintermedia"); googletag.pubads().setTargeting("compliant", module.compliant); }; let initialSlots = []; const positionsContentsToSlot = (positions, device) => { positions.forEach((positionsContent) => { if (positionsContent) { positionsContent.forEach((positionContent) => { const slotBitMask = positionContent.slotBitMask; const dataSlot = positionContent.data?.slot; let positionId = `${device}-div-gpt-ad_${slotBitMask}`; let element = document.getElementById(positionId); if (element && module.isPositionActive(positionContent)) { positionId = positionId.replace(slotBitMask, dataSlot); element.id = positionId; let sizeMapping = window.googletag.sizeMapping(); positionContent.data?.mapping?.forEach((map) => { if (map.key && map.value) { sizeMapping.addSize(JSON.parse(map.key), JSON.parse(map.value)); } }); let slot = window.googletag.defineSlot( `/${module.siteConfigOptions.networkCode}/${positionContent.data?.type}-${module.adUnits?.main}`, JSON.parse(positionContent.data?.sizes), positionId, ); if (slot) { module.logs.group( `Inicializando ${dataSlot} para usuarios ${positionContent.config?.enabledForBitMask} en dispositivo ${device}`, ); slot.defineSizeMapping(sizeMapping.build()); module.logs.log("Añadido sizeMapping a slot", positionContent.data?.mapping); positionContent.data?.targeting?.forEach((targeting) => { slot.setTargeting(targeting.key, targeting.value); }); module.logs.log("Añadido targeting a slot", positionContent.data?.targeting); if (slot.getTargeting("p")[0] === slotTargetings.footer) { footerAdId = positionId; module.logs.log("Añadido targeting a footer", footerAdId); } if (slot.getTargeting("p")[0] === slotTargetings.header) { headerAdId = positionId; module.logs.log("Añadido targeting a header", headerAdId); } slot.addService(window.googletag.companionAds()).addService(window.googletag.pubads()); window.googletag.display(slot); if (positionContent.config?.delay === true) { module.logs.log("La posición se pintará al hacer scroll ", positionContent.config); } else if (positionContent.config?.lazyLoad && module.lazyLoadSensibilityPx) { module.handleLazyLoadedPosition(slot); module.logs.log("La posición se pintará perezosamente"); } else { initialSlots.push(slot.getSlotElementId()); module.logs.log("La posición se pintará inmediatamente"); } module.logs.log("Posición inicializada correctamente", positionContent); } } else { module.logs.log("No hemos encontrado el div con id", positionId, positionContent); } }); } }); }; startBiddingProcess(); if (module.disableAds === "no") { document.addEventListener("DOMContentLoaded", function() { window.googletag = window.googletag || { cmd: [] }; window.googletag.cmd.push(() => { window.googletag.pubads().disableInitialLoad(); window.googletag.pubads().enableSingleRequest(); const positionsPC = [ module.adMap?.positions?.header, module.adMap?.positions?.footer, module.adMap?.positions?.pageStealers?.all, module.adMap?.positions?.pageStealers?.simple, module.adMap?.positions?.columns?.right, module.adMap?.positions?.banners?.horizontal, module.adMap?.positions?.skies?.left, module.adMap?.positions?.skies?.right, ]; const positionsMobile = [ module.adMap?.positions?.header, module.adMap?.positions?.footer, module.adMap?.positions?.pageStealers?.all, module.adMap?.positions?.pageStealers?.simple, module.adMap?.positions?.columns?.right, ]; if (app.utils.getScreenWidth(800) < 768) { positionsContentsToSlot(positionsMobile, "movil"); } else { positionsContentsToSlot(positionsPC, "pc"); } loadInitialSlots(); initializePubadsEventListeners(); initializeTargeting(); window.googletag.enableServices(); if (!module.siteConfigOptions.disableRefresh && !module.hasPrebid) { window.googletag.pubads().refresh(); } }); }); } const loadInitialSlots = () => { if (!module.siteConfigOptions.disablePrebidLoad && module.hasPrebid) { module.logs.log("Pintando initialSlots: ", initialSlots); window.googletag.cmd.push(() => { pbjs.que.push(() => { pbjs.loadAds(initialSlots); initialSlots = []; }); }); } };