window.adsconfig = {}; window.Times = window.Times || {}; window.CPD = {}; window.CPD.slots = []; window._dfpObj = window._dfpObj || {}; //********************************************************** //window._dfpObj.excludeHB -- No HeaderBidding for across all units // ['1x1','1X1','innov'] : No HeaderBidding for 1st fold units - Header bidding will be active in below view port ad units only -- Lazyloading On -- Do not use this option // belowFold : No HeaderBidding for below fold units - Header bidding will be active in first view port ad units only -- Lazyloading off // AdCode: No HeaderBidding for individual ad unit. //Any parameter except the abobe or blank will activate headerbidding by default //********************************************************** window._dfpObj.excludeHB = ['1x1','1X1','innov'] window._dfpObj.excludeBidder = ['criteo']; window._dfpObj.primeSlots = ["masthead","mrec","bottomoverlay","atf","gutter", "topBand"]; window._dfpObj.floorPrice = { "WEB": { "T1" : 1.40, "GCC" : 0.65, "Rest": 0.55, }, "MWEB":{ "T1" : 1.00, "GCC" : 0.85, "Rest": 0.50, } } window._dfpObj.ctnSlot = { "WEB": { "300x250": 546107, //"120x600" : 137228353, "980x200": 546106, "728x90": 546106, }, "MWEB":{ "300x250": 546105, "320x50": 546104, //"300x600" : 847133588, } } window._dfpObj.medianetSlot = { "WEB": { "970x250" : 338746210, "728x90" : 338746210, "300x600" : 464524268, "120x600" : 137228353, "300x250" : 534558642, }, "MWEB":{ "300x250" : 476204824, "320x50" : 645450016, "320x100" : 498941464, "300x600" : 847133588, } } window._dfpObj.rubiconSiteId = { "WEB" : 641523, "MWEB": 641449 } window._dfpObj.rubiconSlot = { "WEB": { "970x250" : 4147005, "728x90" : 4147005, "300x600" : 4146901, "120x600" : 4147007, "300x250" : 4146901 }, "MWEB":{ "300x250" : 4146533, "320x50" : 4147009, "320x100" : 4147009, "300x600" : 4146533, "320x480" : 4147011 } } window._dfpObj.kargo = { "WEB": { "970x250" : '_xJsH7CixCg', "728x90" : '_xJsH7CixCg', "300x600" : '_akk09mck4e', "300x250" : '_k1bQOQ3zek', }, "MWEB":{ "300x250" : '_ailf7yLUNA', "320x50" : '_gmA2vxWNo8', } } window._dfpObj.openXSlot = { "WEB": { "970x250" : 561028712, "728x90" : 561028712, "120x600" : 561028714, "300x600" : 561028713, "300x250" : 561028715, }, "MWEB":{ "300x250" : 561028716, "320x50" : 561028717, } } window._dfpObj.inmobi = { "WEB": { "970x250" : 10000311898, "728x90" : 10000311898, "120x600" : 10000311900, "300x600" : 10000311899, "300x250" : 10000311899, }, "MWEB":{ "300x250" : 10000311902, "320x50" : 10000311901, } } window._dfpObj.teads = { "WEB": { "970x250" : '{"placementId":182800,"pageId":167932}', "728x90" : '{"placementId":182800,"pageId":167932}', "120x600" : '{"placementId":182800,"pageId":167932}', "300x600" : '{"placementId":182802,"pageId":112525}', "300x250" : '{"placementId":182802,"pageId":112525}', }, "MWEB":{ "300x250" : '{"placementId":182802,"pageId":112525}', "320x50" : '{"placementId":182800,"pageId":167932}', } } window._dfpObj.taboola = 1781433; //window._dfpObj.criteo = (window._dfpObj.isMobile()) ? 114248 : 114247; window._dfpObj.pubmatic = { "WEB":'7085923', "MWEB":'7085939' } window._dfpObj.isETPage = 1; window._dfpObj.adasta = { "WEB": { "970x250" : '35942933', "728x90" : '35942933', "120x600" : '35942935', "300x600" : '35942930', "300x250" : '35942930', }, "MWEB":{ "300x250" : '35942938', "320x50" : '35942936', } } window._dfpObj.ix = { "WEB": { "970x250" : '1279518', "728x90" : '1279518', "120x600" : '1279519', "300x600" : '1279517', "300x250" : '1279517', }, "MWEB":{ "300x250" : '1279521', "320x50" : '1279520', } } // ********************************************* // ************ Configuration Start ************ // ********************************************* window._dfpObj.isPerpetualNewAd = true; // ********************************************* // ************ Configuration END ************** // ********************************************* window._dfpObj = window._dfpObj || {}; window._dfpObj.hbCtr = 0; window.Times = window.Times || {}; window._dfpObj.business = ''; window.Times.pageLoadAdsArr = window.Times.pageLoadAdsArr || []; window._dfpObj.idNameMapper = window._dfpObj.idNameMapper || {}; window.apstag = window.apstag || {}; window.googletag = window.googletag || {}; window.googletag.cmd = window.googletag.cmd || []; window.geoinfo = window.geoinfo || {}; window.geoinfo.Continent = window.geoinfo.Continent || ''; window.geoinfo.CountryCode = window.geoinfo.CountryCode || ''; window.geoinfo.city = window.geoinfo.city || ''; window.geoinfo.region_code = window.geoinfo.region_code || ''; window._dfpObj.PREBID_TIMEOUT = window._dfpObj.PREBID_TIMEOUT || 1200; window._dfpObj.FAILSAFE_TIMEOUT = window._dfpObj.FAILSAFE_TIMEOUT || 1500; window._dfpObj.loadSingleTimes = true; window._dfpObj.excludeHB = window._dfpObj.excludeHB || ['1x1','1X1','innov','_195','_ref_atf', '_ref_mrec1']; window._dfpObj.renderedSlots = []; window._dfpObj.definedSlots = []; window._dfpObj.hardRefreshArr = []; window._dfpObj.hardDestroyArr = []; window._dfpObj.periodicRefresh = []; window._dfpObj.filterLazyLoad = []; window._dfpObj.lazyLoadSlots = []; //window._dfpObj.observerConfig = { root: null, rootMargin: '800px', threshold: 0.1 }; window._dfpObj.primeSlots = window._dfpObj.primeSlots || ["masthead","mrec","bottomoverlay","atf","gutter", "lhs", "rhs", "comment_atf"]; window._dfpObj.isAsTmpl = window.location.pathname.match('/articleshow/'); window._dfpObj.isBusinessAs = window._dfpObj.isAsTmpl && window.location.pathname.match('/business/'); window._dfpObj.isWorldAs = window._dfpObj.isAsTmpl && window.location.pathname.match('/world/'); window._dfpObj.isCityAs = window._dfpObj.isAsTmpl && window.location.pathname.match('/city/'); window._dfpObj.isMobile = function(agentString){ var check = false; // check for ismobile on server if (typeof window === 'undefined' && typeof global === 'object' && global.isMobileUserAgent ) return true; (function(a) { if ( /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test( a ) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test( a.substr(0, 4) ) ) check = true; })(agentString || navigator.userAgent || navigator.vendor || window.opera); return check; }; window.debugLogs = window.debugLogs || function (logStr, val) { try { if ( typeof window === 'object' && window.location.href.indexOf('debugLogs=1') > -1 ) { console.info(logStr, val); } } catch (e) { //console.log(e); } }; window._dfpObj.docReady = function (fn) { // see if DOM is already available if (document.readyState === "complete" || document.readyState === "interactive") { // call on next available tick setTimeout(fn, 1); } else { document.addEventListener("DOMContentLoaded", fn); } }; window._dfpObj.setPPS = function() { try { window.Times = window.Times || {}; window.Times.pps = { audience: [], // If adsKeys.iab is already a valid IAB Content Taxonomy ID content: window.Times.adsKeys && window.Times.adsKeys.iab ? [window.Times.adsKeys.iab] : [] }; var pps = window.Times && window.Times.pps ? window.Times.pps : {}; var taxonomies = {}; if ( Array.isArray(pps.audience) && pps.audience.length ) { taxonomies.IAB_AUDIENCE_1_1 = { values: pps.audience.map(String) }; } if ( Array.isArray(pps.content) && pps.content.length ) { taxonomies.IAB_CONTENT_2_2 = { values: pps.content.map(String) }; } if (!Object.keys(taxonomies).length) { return; } var config = { pps: { taxonomies: taxonomies } }; googletag.setConfig(config); window._dfpObj.ppsConfigured = true; } catch (e) { console.error("[PPS DEBUG] Error:", e); } }; window._dfpObj.traceLog = function(t, cat, e, lbl){ window.dataLayer = window.dataLayer || []; var obj = { 'event' : e || 'user_shown', 'type' : t, }; return function(l, c) { c = c || cat; l = l || lbl; if(l) { obj.label = l; } if(c) { obj.category = c; } dataLayer.push(obj); } }; window._dfpObj.getCcaudData = function() { var _auds = ''; if (typeof colaud !== 'undefined') { _auds = window.colaud.aud; } else if ( typeof localStorage !== 'undefined' && typeof localStorage.getItem('colaud') !== 'undefined' && localStorage.getItem('colaud') !== null ) { _auds = localStorage.getItem('colaud'); } return _auds; } window._dfpObj._parseCookieValue = function(s){ var tempS = s; if (tempS.indexOf('"') === 0) { // This is a quoted cookie as according to RFC2068, unescape... tempS = tempS .slice(1, -1) .replace(/\\"/g, '"') .replace(/\\\\/g, '\\'); } try { // If we can't decode the cookie, ignore it, it's unusable. // Replace server-side written pluses with spaces. return decodeURIComponent(tempS.replace(/\+/g, ' ')); } catch (e) { // console.log(e) } return undefined; } window._dfpObj.setCookie = function(name, value, minutes) { var date = new Date(); date.setTime(date.getTime() + (minutes * 60 * 1000)); var hDom = (window.location.host.indexOf('.indiatimes.com')>-1) ? 'indiatimes.com' : document.domain; document.cookie = name + "=" + value + ';expires=' + date.toUTCString() + ';path=/;domain=.' + hDom; } window._dfpObj.delete_cookie = function(name, domain) { var hDom = (window.location.host.indexOf('.indiatimes.com')>-1) ? 'indiatimes.com' : document.domain; hDom = domain; document.cookie = name +'=;path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=.' + hDom; } window._dfpObj.getCookie = function(name) { var result = name ? undefined : {}; var cookies = typeof document !== 'undefined' && document.cookie ? document.cookie.split('; ') : []; for (var i = 0, l = cookies.length; i < l; i += 1) { var parts = cookies[i].split('='); if (parts[1] !== undefined && name === parts[1].trim()) { result = decodeURIComponent(parts[1]); break; } var nameK = decodeURIComponent(parts.shift()); var cookie = parts.join('='); cookie = window._dfpObj._parseCookieValue(cookie); if (name && name === nameK) { result = cookie; break; } if (!name && cookie !== undefined) { result[nameK] = cookie; } } return result; } window._dfpObj.setAdConfig = function(key, value) { if (!key) return; googletag.cmd.push(function() { var targeting = {}; targeting[key] = value; googletag.setConfig({ targeting: targeting }); }); }; window._dfpObj.getAdConfig = function(key) { var config = googletag.getConfig("targeting"); var targeting = config && config.targeting ? config.targeting : {}; if (!key) { return targeting; } return Object.prototype.hasOwnProperty.call(targeting, key) ? targeting[key] : null; }; window._dfpObj.isUS = function(){ if( typeof window.geoinfo != "undefined" && window.geoinfo.hasOwnProperty('CountryCode') && window.geoinfo.CountryCode === 'US' ) return true; } window._dfpObj.isEU = function(){ if( typeof window.geoinfo != "undefined" && window.geoinfo.hasOwnProperty('Continent') && window.geoinfo.Continent === 'EU' //window.geoinfo.hasOwnProperty('CountryCode') && //(window.geoinfo.Continent === 'EU' && !(window.geoinfo.CountryCode === 'UK' || window.geoinfo.CountryCode === 'GB')) ) return true; } window._dfpObj.isFirstFold = function(slot) { /*if ( window.geoinfo && window.geoinfo.CountryCode === 'IN' && slot.adCode && (slot.adCode.indexOf('ETIMES_MWEB') > -1 || slot.adCode.indexOf('TOI_MWEB') > -1) && slot.adCode.indexOf('_MREC_2') > -1 ) { return true; }*/ if (slot.name) { return window._dfpObj.primeSlots.indexOf(slot.name.toLowerCase()) !== -1; } if (slot.adCode) { return window._dfpObj.primeSlots.some(function(item) { var adCode = slot.adCode.toLowerCase(); return adCode.indexOf(item, adCode.length - item.length) !== -1; }); } return false; }; window._dfpObj.hardRefresh = function(){ window.googletag.cmd.push(function(){googletag.pubads().refresh(window._dfpObj.hardRefreshArr);}) } window._dfpObj.hardDestroy = function(type){ if(type === 'all'){ if (window._dfpObj.definedSlots.length === 0) return; var arrCopy = []; window._dfpObj.filterLazyLoad = []; window._dfpObj['observer'].disconnect(); window._dfpObj.definedSlots.forEach(function (item) {arrCopy.push(item);}); arrCopy.forEach(function (item) {window._dfpObj.destroySlots(item);}); }else{ if (window._dfpObj.hardDestroyArr.length === 0) return; window._dfpObj.hardDestroyArr.forEach(window._dfpObj.destroySlots); } } window._dfpObj.destroyAndRefresh = function(event) { var slot = event.slot; var config = slot.getConfig('targeting'); var slotTargeting = config && config.targeting || {}; var id = slot.getSlotElementId(); var name = slotTargeting['name']; var reloadCounter = parseInt(slotTargeting['reloadCounter'] || 0, 10); var sz = slotTargeting['size'] ? JSON.parse(slotTargeting['size']) : null; if (!name) return; if (reloadCounter > 4) return; if (!sz) return; var ad = window._dfpObj.isMobile() ? window._dfpObj.refreshSlot.MWEB[name] : window._dfpObj.refreshSlot.WEB[name]; if (!ad) return; setTimeout(function() { window._dfpObj.destroySlots(id); window.displayAllAdsInArray([{ adCode: ad, divId: id, size: sz, name: name, reloadCounter: reloadCounter + 1 }]); }, 30000); }; window._dfpObj.destroySlots = function(divId){ var index = window._dfpObj.renderedSlots.indexOf(divId); if(index > -1) window._dfpObj.renderedSlots.splice(index, 1); index = window._dfpObj.definedSlots.indexOf(divId); if(index > -1) window._dfpObj.definedSlots.splice(index, 1); index = window._dfpObj.filterLazyLoad.indexOf(divId); if(index > -1) window._dfpObj.filterLazyLoad.splice(index, 1); pbjs.que.push(function () { var slot = window.googletag .pubads() .getSlots() .filter( function(slot){ return divId.indexOf(slot.getSlotElementId()) > -1 } ); if(slot) window.googletag.cmd.push(function(){googletag.destroySlots(slot)}) }) return true; } window._dfpObj.filterSlots = function(val, type){ if(type === 'renderedSlots'){ return val.filter( function(slot){ return window._dfpObj.renderedSlots.indexOf(slot.getSlotElementId()) === -1 } ); } if(type === 'defineSlots'){ return window._dfpObj.definedSlots.indexOf(val) > -1 } if(type === 'filterLazyLoad'){ return window._dfpObj.filterLazyLoad.indexOf(val) > -1 } } window._dfpObj._once = function(target, evt, fn) { function handler(e) { target.removeEventListener(evt, handler); fn(e); } target.addEventListener(evt, handler); }; window._dfpObj.loadJS = function(url, async, callback, scriptId, errorCallback) { var dfp = window._dfpObj; function loadScript() { if (scriptId && document.getElementById(scriptId)) return; var s = document.createElement('script'); s.src = url; s.type = 'text/javascript'; s.async = !!async; if (scriptId) s.id = scriptId; if (typeof callback === 'function') s.addEventListener('load', callback); if (typeof errorCallback === 'function') { dfp._once(s, 'error', function(e) { errorCallback(e, s); }); } document.body.appendChild(s); } document.body ? loadScript() : dfp._once(document, 'DOMContentLoaded', loadScript); }; window._dfpObj.isInnov = function(adCode){ if (typeof adCode === 'string' || adCode instanceof String){ return adCode.toLowerCase().indexOf('innov') > -1 ? true : false; }else{ return adCode.getAdUnitPath().toLowerCase().indexOf('innov') > -1 ? true : false; } } window._dfpObj.changeStyleInnov = function(){ var style = document.createElement('style'); style.type = 'text/css'; var css = '.abs_gutter_ad { position: absolute !important;}'; style.appendChild(document.createTextNode(css)); document.querySelector('body').appendChild(style); if(document.querySelector('#TOI_appgutter_left')) document.querySelector('#TOI_appgutter_left').classList.add('abs_gutter_ad'); if(document.querySelector('#TOI_appgutter_right')) document.querySelector('#TOI_appgutter_right').classList.add('abs_gutter_ad'); } window._dfpObj.failOverExecute = function(slot, empty) { // Helper: get slot config targeting value function getSlotTargeting(key) { var config = slot.getConfig('targeting'); return config && config.targeting && config.targeting[key]; } var failover = getSlotTargeting('failover'); if (!failover) return true; var NewAdObject = JSON.parse(failover); var firstFailAD = window._dfpObj.isToiPage === 'react' && NewAdObject && NewAdObject.length && NewAdObject[0]; if (firstFailAD && !firstFailAD.divId) { NewAdObject.forEach(function(adi, i) { var key = i === 1 ? 'right' : 'left'; adi.divId = adi.divId || 'TOI_appgutter_' + key; adi.size = [[125, 600], [160, 600], [120, 600]]; adi.perpetualRefresh = 1; }); } var _ex = function(_slot, _NewAdObject) { googletag.pubads().clear([_slot]); googletag.destroySlots([_slot]); window._dfpObj.renderAds(_NewAdObject); return true; }; var match = getSlotTargeting('match'); if (match) { var html = slot.getHtml(); if (typeof html === 'string' && html.toLowerCase().indexOf(JSON.parse(match)) === -1) { _ex(slot, NewAdObject); } } else if (empty) { _ex(slot, NewAdObject); } return true; }; window._dfpObj.observerConfig = { root: null, rootMargin: window._dfpObj.isMobile() ? "500px 0px" : "400px 0px", threshold: 0.1 }; window._dfpObj['observer'] = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if(entry.isIntersecting){ var slot = window._dfpObj.lazyLoadSlots[entry.target.id] debugLogs('XSLT #### LazyLoad',slot.adCode); window._dfpObj.renderAds([slot]); window._dfpObj['observer'].unobserve(entry.target) } }); }, window._dfpObj.observerConfig); window._dfpObj.containsAny = function(str, substrings) { if (substrings === undefined || substrings.length === 0) return false; str = str+'$'; if (str.indexOf('toi_mweb_fixed_atf$') != -1) return null for (var i = 0; i != substrings.length; i++) { var substring = substrings[i].toLowerCase()+'$'; if (str.indexOf(substring) != -1) { return substring; } } return null; } window._dfpObj.checkJarvis = function(adObj){ // Jarvis Configuration checking if(adObj.hasOwnProperty('checkJarvisIsAdActive') && typeof window.checkJarvisIsAdActive === 'function') { if(!window.adsconfig.hasOwnProperty(adObj.checkJarvisIsAdActive)) return true; if(window.checkJarvisIsAdActive(window.adsconfig[adObj.checkJarvisIsAdActive]) !== 1) return true; } return false; } window._dfpObj._notEligibleForHB = function(adObj){ var adCode = adObj.adCode; if(window._dfpObj.containsAny(adCode.toLowerCase(), window._dfpObj.excludeHB)) return true; if(window._dfpObj.excludeHB.indexOf('excludeAll') > -1) return true; if(window._dfpObj.excludeHB.indexOf('aboveFold') > -1 && adObj.name && window._dfpObj.primeSlots.indexOf(adObj.name.toLowerCase()) > -1) return true; if(window._dfpObj.excludeHB.indexOf('belowFold') > -1 && adObj.name && window._dfpObj.primeSlots.indexOf(adObj.name.toLowerCase()) === -1) return true; if(adObj.hasOwnProperty('checkJarvisIsAdActive')) return true; if( window._dfpObj.containsAny(adCode.toLowerCase(), window.CPD['slots']) && typeof window.geoinfo === 'object' && window.geoinfo.CountryCode==='IN') return true; if(adCode.indexOf('_INNOV') > -1) return true; if(adCode.indexOf('1x1') > -1 || adCode.indexOf('1X1') > -1) return true; // || (adObj.hasOwnProperty('prebid') && adObj.prebid === false); if(adCode.indexOf('_195') > -1) return true; if(adCode.indexOf('_Tracker') > -1) return true; if(adCode.indexOf('_AFF_') > -1) return true; if(adObj.skipbid) return true; //if(adCode.indexOf('_P1') > -1) return true; return false; } window._dfpObj.callWhenBrowserIsIdle = function (fn) { if (typeof requestIdleCallback === 'function') { requestIdleCallback(fn, { timeout: 10000 }); } else { setTimeout(fn, 0); } }; window._dfpObj.callIfInputNotPendingOrIdle = function (fn) { if(navigator && navigator.scheduling && navigator.scheduling.isInputPending && navigator.scheduling.isInputPending() ){ window._dfpObj.callWhenBrowserIsIdle(fn); } else { fn(); } }; // ─── Bootstrap IIFE ─────────────────────────────────────────────────────── (function() { try { var raw = window._dfpObj.getCookie('__uid2_advertising_token'); if (raw) { var parsed = JSON.parse(raw); var plainToken = parsed.latestToken || parsed.originalToken; if (plainToken) { // ✅ ONLY write the cookie — setConfig happens in pbjs.myConfig below window._dfpObj.setCookie('__uid2_adv_tok', plainToken, 60); } } } catch(e) {} })(); // ********************************************** // ************ Prebid Configuration - Start **** // ********************************************** window.pbjs = window.pbjs || {}; pbjs.myConfig = {}; window.pbjs.getConsentStatus = false; window.pbjs.getConsent = function() { if (window.pbjs.getConsentStatus) return; if (typeof __tcfapi !== 'function') return; pbjs.que.push(function() { if (typeof pbjs.mergeConfig !== 'function') return; // ✅ mergeConfig — adds consent only, leaves floors/userIds/uid2 untouched pbjs.mergeConfig({ consentManagement: { usp: { cmpApi: 'iab', timeout: 3000 }, gdpr: { cmpApi: 'iab', timeout: 3000, defaultGdprScope: true } // gpp: { cmpApi: 'iab', timeout: 3000 } } }); window.pbjs.getConsentStatus = true; debugLogs('XSLT #### EU consent applied via mergeConfig'); }); }; window._dfpObj._getSlotPos = function(slot) { var adUnitElement = document.getElementById(slot.divId); if (window._dfpObj.isFirstFold(slot)){ return { fold: 'above', pos: 1 }; } if (!adUnitElement) { return { fold: 'above', pos: 1 }; } var rect = adUnitElement.getBoundingClientRect(); var viewportH = window.innerHeight || document.documentElement.clientHeight; // ✅ Use <= not < so that top === viewportH is also treated as below fold var isAboveFold = rect.top < (viewportH - 50); return { fold: isAboveFold ? 'above' : 'below', pos: isAboveFold ? 1 : 3 // ✅ pos:3 = below fold }; }; pbjs.que = pbjs.que || []; window._dfpObj.floorPrice = window._dfpObj.floorPrice || { "WEB": { "T1" : 1.00, "GCC" : 0.60, "Rest": 0.25, }, "MWEB":{ "T1" : 1.00, "GCC" : 0.85, "Rest": 0.30, } } window._dfpObj.videoFloorPrice = window._dfpObj.videoFloorPrice || { "WEB": { "T1" : 2.02, "GCC" : 1.50, "Rest": 0.70, }, "MWEB":{ "T1" : 1.55, "GCC" : 1.40, "Rest": 0.70, } } pbjs.bidPrice = window._dfpObj.isMobile() ? window._dfpObj.floorPrice.MWEB.Rest : window._dfpObj.floorPrice.WEB.Rest; pbjs.videoBidPrice = window._dfpObj.isMobile() ? window._dfpObj.videoFloorPrice.MWEB.Rest : window._dfpObj.videoFloorPrice.WEB.Rest; pbjs.que.push(function () { if( typeof window.geoinfo != "undefined" && window.geoinfo.hasOwnProperty('CountryCode') && ['US', 'CA', 'UK', 'AU', 'FR', 'SE', 'NO', 'DE', 'BE', 'PT', 'AT', 'ES', 'DK', 'IT', 'GR'].indexOf(window.geoinfo.CountryCode) > -1) { pbjs.bidPrice = window._dfpObj.isMobile() ? window._dfpObj.floorPrice.MWEB.T1 : window._dfpObj.floorPrice.WEB.T1; pbjs.videoBidPrice = window._dfpObj.isMobile() ? window._dfpObj.videoFloorPrice.MWEB.T1 : window._dfpObj.videoFloorPrice.WEB.T1; } if( typeof window.geoinfo != "undefined" && window.geoinfo.hasOwnProperty('CountryCode') && ['SA','AE','QA','KW','OM','BH'].indexOf(window.geoinfo.CountryCode) > -1) { pbjs.bidPrice = window._dfpObj.isMobile() ? window._dfpObj.floorPrice.MWEB.GCC : window._dfpObj.floorPrice.WEB.GCC; pbjs.videoBidPrice = window._dfpObj.isMobile() ? window._dfpObj.videoFloorPrice.MWEB.GCC : window._dfpObj.videoFloorPrice.WEB.GCC; } var siteNameMeta = document.querySelector('meta[property="og:site_name"]'); var siteName = siteNameMeta ? siteNameMeta.getAttribute('content') : location.hostname; pbjs.myConfig = { debug: location.search.indexOf('prebidDebugLogs=1')>-1 ? true:false, enableTIDs: true, enableSendAllBids: true, useBidCache: true, deviceAccess: true, bidderTimeout: window._dfpObj.PREBID_TIMEOUT, //timeoutBuffer: 400, //disableAjaxTimeout: false, priceGranularity: "dense", cache: { url: "https://prebidcache.timesofindia.com/cache" }, floors: { currency: 'USD', enforcement: { enforceJS: false }, skipRate: 5, modelVersion: 'Model', schema: { fields: [ 'mediaType'] }, values: { banner: Number(pbjs.bidPrice) || 0.01, video: Number(pbjs.videoBidPrice) || 0.70 } }, userSync: { syncEnabled: true, syncsPerBidder: 1, auctionDelay: 0, filterSettings: { iframe: { bidders: "*", filter: "include" } }, userIds: [ { name: "unifiedId", params: { partner: "kg9dznt", } }, { name: 'id5Id', params: { partner: 593, pd: window._dfpObj.emhash || window._dfpObj.phhash || undefined }, storage: { type: 'html5', name: 'id5id', expires: 90 } }, { name: "lotamePanoramaId", }, { name: 'taboolaId', storage: { name: 'taboolaId', type: 'html5', expires: 365 } }, { name: "sharedId", storage: { type: "cookie", name: "_sharedid", expires: 365 } } ], }, ortb2: { cur: ["USD"], site: { name: siteName, domain: location.hostname, page: location.href, ref: document.referrer || location.origin, keywords: Times && Times.adsKeys && Times.adsKeys.Meta_Keywords ? Times.adsKeys.Meta_Keywords : "", publisher: { name: "Times Internet" }, content: { title: document.title, language: document.documentElement.lang || "en" } } }, contxtful: { version: "v1", customer: "TOIP250305" }, realTimeData: { dataProviders: [ { name: "contxtful", waitForIt: true, params: { version: "v1", customer: "TOIP250305", bidders: ["contxtful"], adServerTargeting: true } } ] } }; if(Times.hasOwnProperty('adsKeys') && Times.adsKeys.hasOwnProperty('iab') && Times.adsKeys.iab != '' && Times.adsKeys.iab != 'empty'){ pbjs.myConfig.ortb2.site.content['cat'] = [Times.adsKeys.iab] } if (window.location.host.indexOf('timesofindia') > -1 || window.location.host.indexOf('economictimes') > -1 || window.location.host.indexOf('toispastg') > -1){ pbjs.myConfig.s2sConfig = [{ accountId: "TILS2S", endpoint: "https://prebid.timesofindia.com/openrtb2/auction", //syncEndpoint: "https://prebid.timesofindia.com/cookie_sync", bidders: ["oms","vdoai","mediago","adnimation"], timeout: 1200, allowUnknownBidderCodes: true, enabled: true // Add this }] }else { pbjs.myConfig.s2sConfig = [{ accountId: "TILS2S", endpoint: "https://prebid.timesofindia.com/openrtb2/auction", //syncEndpoint: "https://prebid.timesofindia.com/cookie_sync", bidders: ["ttd","inmobi","pubmatic","oms","mediago"], timeout: 1200, allowUnknownBidderCodes: true, enabled: true // Add this }] } if(typeof pbjs.setConfig === 'function'){ pbjs.setConfig(pbjs.myConfig); // floors, userIds, s2sConfig — everyone gets this } pbjs.setBidderConfig({ bidders: ['ttd'], config: { ortb2: { source: { ext: { schain: { ver: '1.0', complete: 1, nodes: [{ asi: 'indiatimes.com', sid: '1', hp: 1 }] } } } } } }); }); pbjs.bidderSettings = { ix: { storageAllowed: true }, criteo: { storageAllowed: true }, pubmatic: { storageAllowed: true }, ttd: { storageAllowed: true }, taboola: { storageAllowed: true }, colombia: { storageAllowed: true }, teads: { storageAllowed: true }, medianet: { storageAllowed: true }, sharethrough: { storageAllowed: true }, rubicon: { storageAllowed: true }, msft: { storageAllowed: true }, smilewanted: { storageAllowed: true }, openx: { storageAllowed: true }, inmobi: { storageAllowed: true }, adasta: { storageAllowed: true }, contxtful: { storageAllowed: true }, }; pbjs._getPlacementID = function(size, slotObj){ if(!size || size.length === 0) return; var sizeStr = (size[0] && size[0].length > 0) ? size.join('-').replaceAll(',','x') : size.join('x'); for(var key in slotObj){ if(sizeStr.indexOf(key) > -1) return slotObj[key]; } return 0; } pbjs.myBidder = function(slot) { var _bid = '' var appnexusPlacement_id = 33893102; if (window.location.host.indexOf('navbharattimes') > -1) appnexusPlacement_id = 34121488; if (window.location.host.indexOf('economictimes') > -1) appnexusPlacement_id = 34121281; window._dfpObj.hbCtr++; var bidderList = [ { bidder: "sharethrough", params: { pkey: "X4rDoAG09y3bLrKdTOaGk50D", } }, { bidder: 'ttd', params: { supplySourceId: 'timesinternet', publisherId: "1", bidfloor: pbjs.bidPrice } }, { bidder: 'oms', params: { publisherId:21224, } }, /*{ bidder: 'monetixads', params: { networkId:1218328631, host: 'timesinternet.rtb.monetixads.com' } }, { bidder: 'adkernel', params: { host:'cpm.tyroo.com', zoneId:401525 } },*/ { bidder: 'mediago', params: { token:'76bac664c90a8895b4d695bc7025e470_9' } }, { bidder: 'adnimation', params: { cId: '6ab4ebee105a22384147df41', pId: '67wc13i392832d0041613hm9' } } ]; if(window.location.host.indexOf('economictimes') > -1 || window.location.host.indexOf('navbharattimes') > -1){ bidderList.push( { bidder: 'msft', params: { placement_id: appnexusPlacement_id, allow_smaller_sizes: true } } ) } if(window._dfpObj.criteo){ _bid = window._dfpObj.criteo; bidderList.push( { bidder: 'criteo', params: { networkId: (window._dfpObj.isUS()) ? 10299 : 10298, pubid: _bid } } ) } if(window.geoinfo.CountryCode !== 'IN'){ bidderList.push( { bidder: 'smilewanted', params: { zoneId: 'timesofindia.com_hb_display_1', } } ) } if(window._dfpObj.contxtful && (window.geoinfo.CountryCode==='US' || window.geoinfo.CountryCode==='CA')){ bidderList.push( { bidder: 'contxtful', params: { placementId: window._dfpObj.contxtful, } } ) } if(window._dfpObj.ix && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.ix.MWEB:window._dfpObj.ix.WEB)){ _bid = pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.ix.MWEB:window._dfpObj.ix.WEB); if(typeof(_bid) != "undefined"){ bidderList.push( { bidder: 'ix', params: { siteId : _bid, } } ) } } if(window.geoinfo.Continent === 'EU' || (window.geoinfo.CountryCode === 'UK' || window.geoinfo.CountryCode === 'GB')){ if(window._dfpObj.adasta && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.adasta.MWEB:window._dfpObj.adasta.WEB)){ _bid = pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.adasta.MWEB:window._dfpObj.adasta.WEB); if(typeof(_bid) != "undefined"){ bidderList.push( { bidder: 'adasta', params: { placementId : _bid, use_pmt_rule: true } } ) } } } if(window.location.host.indexOf('timesofindia') > -1 && (window.geoinfo.CountryCode==='US' || window.geoinfo.CountryCode==='CA')){ bidderList.push( { "bidder": "imds", "params": { "seatId": "timesinternet_prebid", "tagId": "102465", "bidfloor": pbjs.bidPrice } } ) } if(window._dfpObj.pubmatic && (window._dfpObj.isMobile()?window._dfpObj.pubmatic.MWEB:window._dfpObj.pubmatic.WEB)){ _bid = window._dfpObj.isMobile()?window._dfpObj.pubmatic.MWEB:window._dfpObj.pubmatic.WEB; if(typeof(_bid) != "undefined"){ bidderList.push( { bidder: 'pubmatic', params: { publisherId: '164398', adSlot: _bid, kadfloor: pbjs.bidPrice.toString() } } ) } } if(window._dfpObj.teads && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.teads.MWEB:window._dfpObj.teads.WEB)){ _bid = pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.teads.MWEB:window._dfpObj.teads.WEB); if(typeof(_bid) != "undefined"){ bidderList.push( { bidder: 'teads', params: JSON.parse(_bid) } ) } } if(window._dfpObj.jambojar && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.jambojar.MWEB:window._dfpObj.jambojar.WEB)){ _bid = pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.jambojar.MWEB:window._dfpObj.jambojar.WEB); if(typeof(_bid) != "undefined"){ bidderList.push( { bidder: 'jambojar', params: { seat: _bid.site, token: _bid.token, position: window._dfpObj.hbCtr, bidfloor: pbjs.bidPrice, } } ) } } if(window.location.host.indexOf('economictimes') === -1 && window._dfpObj.inmobi && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.inmobi.MWEB:window._dfpObj.inmobi.WEB)){ _bid = pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.inmobi.MWEB:window._dfpObj.inmobi.WEB); if(typeof(_bid) != "undefined"){ bidderList.push( { bidder: 'inmobi', params: { plc : _bid } } ) } } if(window._dfpObj.taboola){ bidderList.push( { bidder: 'taboola', params: { tagId: 'placement_'+window._dfpObj.hbCtr, publisherId: window._dfpObj.taboola, position: window._dfpObj.hbCtr, bidfloor: pbjs.bidPrice, } } ) } if(window._dfpObj.ctnSlot && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.ctnSlot.MWEB:window._dfpObj.ctnSlot.WEB) > 0){ bidderList.push( { bidder: 'colombia', params: { placementId: pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.ctnSlot.MWEB:window._dfpObj.ctnSlot.WEB), pageurl: window.location.href, keywords: Times.hasOwnProperty('adsKeys') && Times.adsKeys.hasOwnProperty('Meta_Keywords') ? Times.adsKeys.Meta_Keywords : "", category: Times.hasOwnProperty('adsKeys') && Times.adsKeys.hasOwnProperty('SCN') ? Times.adsKeys.SCN : "", pageType: Times.hasOwnProperty('adsKeys') && Times.adsKeys.hasOwnProperty('Tmpl_SCN') ? Times.adsKeys.Tmpl_SCN : "", dsmi: (window._dfpObj.getCookie("_col_uuid")) ? window._dfpObj.getCookie("_col_uuid") : 'empty', } } ) } if(window._dfpObj.openXSlot && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.openXSlot.MWEB:window._dfpObj.openXSlot.WEB) > 0){ bidderList.push( { bidder: 'openx', params: { unit:pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.openXSlot.MWEB:window._dfpObj.openXSlot.WEB), delDomain: 'timesinternet-d.openx.net', customFloor: pbjs.bidPrice, } } ) } if(window._dfpObj.medianetSlot && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.medianetSlot.MWEB:window._dfpObj.medianetSlot.WEB) > 0){ bidderList.push( { bidder: 'medianet', params: { cid: '8CUM8C0J2', crid: pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.medianetSlot.MWEB:window._dfpObj.medianetSlot.WEB), bidfloor: pbjs.bidPrice, } } ) } if(window._dfpObj.rubiconSlot && pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.rubiconSlot.MWEB:window._dfpObj.rubiconSlot.WEB) > 0){ bidderList.push( { bidder: 'rubicon', params: { accountId: 4642, siteId: window._dfpObj.isMobile()?window._dfpObj.rubiconSiteId.MWEB:window._dfpObj.rubiconSiteId.WEB, zoneId: pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.rubiconSlot.MWEB:window._dfpObj.rubiconSlot.WEB), position:window._dfpObj.isFirstFold(slot)?'atf':'btf', floor: pbjs.bidPrice, keywords: Times.adsKeys && typeof Times.adsKeys.Meta_Keywords == 'string' ? Times.adsKeys.Meta_Keywords.split(',') : [], } } ) } if(window._dfpObj.vdoai){ bidderList.push( { bidder: 'vdoai', params: { host: "ortb.vdo.ai", adUnitId: pbjs._getPlacementID(slot.size, window._dfpObj.isMobile()?window._dfpObj.vdoai.MWEB:window._dfpObj.vdoai.WEB), publisherId: window.location.host.indexOf('economictimes') > -1 ? "Economictimes-Web-Prebid":"TimesOfIndia-Web-Prebid", adUnitType: "banner", bidfloor: pbjs.bidPrice, } } ) } // *************************************************************************** // "window._dfpObj.bidderList" means Bidders allowed for HeaderBidding // *************************************************************************** if(window._dfpObj.bidderList && window._dfpObj.bidderList.length > 0){ bidderList = bidderList.filter(function(obj){if(window._dfpObj.bidderList.indexOf(obj.bidder) > -1) return true;}) } // *************************************************************************** // "window._dfpObj.excludeBidder" means Bidders not allowed for HeaderBidding // *************************************************************************** if(window._dfpObj.excludeBidder && window._dfpObj.excludeBidder.length > 0){ bidderList = bidderList.filter(function(obj){if(window._dfpObj.excludeBidder.indexOf(obj.bidder) === -1) return true;}) } return bidderList; } // ********************************************** // ************ Prebid Configuration - End ****** // ********************************************** window.googletag.cmd.push(function() { // ---- Helper: get slot config targeting value ---- function getSlotTargeting(slot, key) { var config = slot.getConfig('targeting'); return config && config.targeting && config.targeting[key]; } // ---- impressionViewable ---- window.googletag.pubads().addEventListener('impressionViewable', function(event) { var slot = event.slot; var html = slot.getHtml(); var isDirect = typeof html === 'string' && html.indexOf('!--NO_REFRESH--') > 0; if (window.adsconfig && window.adsconfig.ad_refresh && window.checkJarvisIsAdActive && window.checkJarvisIsAdActive(window.adsconfig.ad_refresh) === 1) { window._dfpObj.destroyAndRefresh(event); } // GoogleWebInterstitial Cookie drop if (getSlotTargeting(slot, 'name') === 'webInterstitial') { window._dfpObj.setCookie('webInterstitial', 1, 10); } if (window._dfpObj.adTracker && typeof window._dfpObj.adTracker.trackAdEvent === 'function' && isDirect) { window._dfpObj.adTracker.trackAdEvent('view', slot.getSlotElementId()); } }); // ---- slotRenderEnded ---- window.googletag.pubads().addEventListener('slotRenderEnded', function(event) { var slot = event.slot; var html = slot.getHtml(); var isDirect = typeof html === 'string' && html.indexOf('!--NO_REFRESH--') > 0; window._dfpObj.callBaseScript('slotRenderEnded', event); if (window._dfpObj.adTracker && typeof window._dfpObj.adTracker.trackAdEvent === 'function' && isDirect) { window._dfpObj.adTracker.trackAdEvent('render', slot.getSlotElementId()); } if (!event.isEmpty && window._dfpObj.executeFuncAfterLazyADFile) { window._dfpObj.executeFuncAfterLazyADFile('emitSlotLoadEvent', slot); } if (!event.isEmpty && window._dfpObj.showInterstitialAfterLoadEvent) { window._dfpObj.showInterstitialAfterLoadEvent(slot); } // Periodic refresh var periodicRefresh = getSlotTargeting(slot, 'periodicRefresh'); if (periodicRefresh) { setTimeout(function() { googletag.pubads().refresh([slot]); }, parseInt(periodicRefresh, 10) * 1000); } // Failover var failover = getSlotTargeting(slot, 'failover'); if (failover) { var isInnov = window._dfpObj.isInnov(slot); if (isInnov && typeof window._dfpObj._createGutterFailoverElement === 'function') { window._dfpObj._createGutterFailoverElement(); } var failoverActive = !(isInnov && window.innerWidth && window.innerWidth < 1340); if (failoverActive) { window._dfpObj.failOverExecute(slot, event.isEmpty); } } // Innov/Gutter if (window._dfpObj.isInnov(slot)) { document.body.classList.add('gutter'); document.body.classList.add('bgImg'); var leftSocial = document.getElementsByClassName('leftsocial')[0]; if (leftSocial) { leftSocial.style.visibility = 'hidden'; } if (event.isEmpty) { window._dfpObj.changeStyleInnov(); } } }); }); window._dfpObj.callBaseScript = function(action,e){ if (typeof window._loadDelayedResources === 'function' && typeof _delayedResourcesLoaded !== 'undefined' && !_delayedResourcesLoaded) { debugLogs('########## '+action+' Event fired : loading callBaseScript', (performance.now()/1000).toFixed(2)+'seconds'); window._loadDelayedResources(); } if (typeof window._baseScript === 'function' && !window.__baseScript) { debugLogs('########## '+action+' Event fired : loading callBaseScript', (performance.now()/1000).toFixed(2)+'seconds'); window._baseScript(); } if(window._dfpObj.loadSingleTimes){ window._dfpObj.loadSingleTimes = false; window.displayAllAdsInArray(window.Times.pageLoadAdsArr.filter(function(slot){ return !window._dfpObj.isFirstFold(slot); })) if(typeof window._dfpObj.executeFuncAfterFirstADCall === 'function'){ window._dfpObj.executeFuncAfterFirstADCall(0, 1); } if(window.location.host.indexOf('timesofindia') > -1 && window.location.href.indexOf('Magnite=1') > -1 && typeof addMagniteAXBeaconAd === "function") addMagniteAXBeaconAd(); } } window._dfpObj.noHBctr = 0; window._dfpObj.serviceEnabled = 0; window._dfpObj.gamFailedTriggerGa = function(_ac){ window.dataLayer = window.dataLayer || []; var cat = ''; try { var _device = window._dfpObj.device || (window._dfpObj.isMobile() ? 'mWeb':'Web'); cat = _ac.split('/').pop(); if(window.location.pathname.indexOf('.cms') > -1) { cat += window.Times && window.Times.adsKeys && window.Times.adsKeys.Tmpl_SCN; cat += '|'; cat += window.Times && window.Times.adsKeys && window.Times.adsKeys.Article_ID; } else { cat += window.location.pathname; } cat += '|'; cat += _device; cat += '|'; cat += window.geoinfo && window.geoinfo.CountryCode; cat = cat.length > 120 ? cat.slice(-120) : cat; _ac = _ac.length > 120 ? _ac.slice(-120) : _ac; } catch(e){} dataLayer.push({ 'event' : 'user_shown', 'type' : 'new_gam_failed', 'label' : _ac, 'category': cat, }); }; window._dfpObj._hasSize = function(sizes, w, h) { for (var i = 0; i < sizes.length; i++) { if (sizes[i] && sizes[i][0] === w && sizes[i][1] === h) { return true; } } return false; }; window._dfpObj.ensureMrecHeight = function(adUnitCode){ var el = document.getElementById(adUnitCode); var parent; var elements; var i; var style; var minHeight; if (!el) { debugLogs("[#### [MREC] DIV not found:", adUnitCode); return true; } parent = el.parentNode; elements = [el]; if (parent && parent.nodeType === 1) { elements.push(parent); } for (i = 0; i < elements.length; i++) { style = window.getComputedStyle ? window.getComputedStyle(elements[i], null) : elements[i].currentStyle; minHeight = style ? style.minHeight : "0px"; if ( !minHeight || minHeight === "0px" || minHeight === "0" || parseInt(minHeight, 10) === 0 ) { elements[i].style.minHeight = "250px"; } } return true; } window._dfpObj.getMrecUpdatedSize = function(slot) { var dfp = window._dfpObj; try { // Normalize: GPT size can be a single pair [300,250] or array of pairs var sizes = (typeof slot.size[0] === 'number') ? [slot.size] : slot.size.slice(); var isMrecPresent = dfp._hasSize(sizes, 300, 250); if (isMrecPresent) { var isMobileTOI = typeof dfp.isMobile === 'function' && dfp.isMobile(); window._dfpObj.ensureMrecHeight(slot.divId); var sizesToAdd = isMobileTOI ? [[300, 300], [1, 1], [250, 250], [200, 200], [336, 280]] : [[300, 300], [1, 1], [250, 250], [200, 200]]; //var sizesToAdd = [[300, 300], [1, 1], [250, 250], [200, 200], [336, 280]]; for (var i = 0; i < sizesToAdd.length; i++) { var s = sizesToAdd[i]; if (!dfp._hasSize(sizes, s[0], s[1])) { sizes.push(s); } } slot.size = sizes; slot.isMrec = 1; } } catch (e) {} return slot; }; window._dfpObj.fcFallbackSize = [[336, 280], [300, 250], [250, 250]]; window._dfpObj.supportsFcReveal = function() { var dfp = window._dfpObj; if (dfp._fcSupported === undefined) { dfp._fcSupported = typeof window.CSS === 'object' && typeof window.CSS.supports === 'function' && window.CSS.supports('animation-timeline', 'view()'); } return dfp._fcSupported; }; window._dfpObj.getFcUpdatedSize = function(slot) { try { if (slot && slot.adBehavior === 'flyingcarpet' && !window._dfpObj.supportsFcReveal()) { slot.size = window._dfpObj.fcFallbackSize.slice(); } } catch (e) {} return slot; }; window._dfpObj.renderAds = function(adsArray){ adsArray = adsArray.filter(function(slot){ if(!slot || !slot.adCode) { return true; } slot = window._dfpObj.getFcUpdatedSize(slot); slot = window._dfpObj.getMrecUpdatedSize(slot); if(window._dfpObj.idNameMapper && slot.divId){ var adName = slot.name || window._dfpObj.extractAdNamesFromPaths && window._dfpObj.extractAdNamesFromPaths(slot.adCode); if (adName){ window._dfpObj.idNameMapper[slot.divId] = adName; var skipgutter = window.Times && Times.adsKeys && Times.adsKeys.Hyp1 && Times.adsKeys.Hyp1.indexOf('nogutter') > -1; if(adName === 'gutter' && skipgutter){ return false; } } window._dfpObj.allRenderSlots = window._dfpObj.allRenderSlots || {}; window._dfpObj.allRenderSlots[slot.divId] = slot; } if( slot.adCode.indexOf('7176') > -1 && window.location.host.indexOf('timesofindia') > -1) window._dfpObj.gamFailedTriggerGa(slot.adCode); return true; }); var timeout = false; var _initAdserver = function(adsObj,force,reqFrom){ if(force === undefined && (Prebid_BidsReceived === false || TAM_BidsReceived === false))return; adsObj = window._dfpObj.filterSlots(adsObj,'renderedSlots'); adsObj.map(function(e){window._dfpObj.renderedSlots.push(e.getSlotElementId())}) if(adsObj.length === 0) return; var to = force && reqFrom ?'[ '+reqFrom+' ]':''; debugLogs('XSLT #### '+ to + ' GAM REQUEST SENT Total ('+adsObj.length+') : '+(performance.now()/1000).toFixed(2)+'seconds', JSON.stringify( adsObj.map(function(e){ var rObj = {}; rObj.code = e.getAdUnitPath(); rObj.id = e.getSlotElementId(); return rObj; }) ) ); window.googletag.cmd.push(function(){window.googletag.pubads().refresh(adsObj)}); return true; } var _getGPTSlots = function(Slots) { var slotIDs = Slots.map(function (slot) { return slot.divId ? slot.divId : slot.slotID; }); // return the slot objects corresponding to the gpt slotIDs return window.googletag .pubads() .getSlots() .filter( function(slot){ // return true if the ID of the slot object is in the gpt slotIDs array return slotIDs.indexOf(slot.getSlotElementId()) > -1 } ); } var _executeInit = function(adsObj, partner, status){ googletag.cmd.push(function(){ debugLogs('XSLT #### '+partner+' Bid Received '+status+ ': ' +(performance.now()/1000).toFixed(2)+'seconds ', adsObj.map(function(slot){ if(slot) { return slot.slotName;} })); _initAdserver(_getGPTSlots(adsObj)) }); } var _getWinner = function(bidResponses){ var veryLowNumber = -1 * Math.pow(2,32); var highestCPM = veryLowNumber; var tmpWinner = {}; //var bids = bidResponses[PREBID_CODE_KEY].bids; for(key in bidResponses){ var bids = bidResponses[key].bids; for (var i = 0; i < bids.length; i++) { if (highestCPM > bids[i].cpm) { continue; } else { highestCPM = bids[i].cpm; tmpWinner = bids[i]; } } } return tmpWinner; } var _makePrebidSlots = function(obj){ var slotsArr = [] obj.map(function(slot){ if(!slot.adCode) return; if(!slot.size) return; if(!slot.divId) return; if(slot.divId === 'NIL' ) return; if(window._dfpObj._notEligibleForHB(slot)) return; if (slot.size && slot.size.indexOf('fluid') > -1) slot.size.splice(slot.size.indexOf('fluid'), 1); var s = slot.size && slot.size[0].length > 0 ? slot.size[0].join('x') : slot.size.join('x'); //slot = window._dfpObj.getMrecUpdatedSize(slot); var foldData = window._dfpObj._getSlotPos(slot); var _mediatype = { banner: { sizes: slot.size } }; if(slot.isMrec && !(slot.hasOwnProperty('name') && slot.name === 'webInterstitial')){ _mediatype.video = { api: [1, 2, 7], context: 'outstream', linearity: 1, maxduration: 30, mimes: ["video/mp4","video/webm"], minduration: 5, plcmt: 4, playbackmethod: [1,6], playerSize: [336,280], w: 336, h: 280, renderer: { url: 'https://prebid.timesofindia.com/static/custom-outstream-renderer.js', render: function (bid) { const container = document.getElementById(bid.adUnitCode); function hasUnresolvedMacro(value) { return typeof value === 'string' && /\$\{?(AUCTION_PRICE|AUCTION_CURRENCY|AUCTION_ID|AUCTION_BID_ID|AUCTION_IMP_ID)\}?/.test(value); } if (!container) { console.error('[TiladsRenderer] Container not found:', bid.adUnitCode); return; } if (hasUnresolvedMacro(bid.vastXml) || hasUnresolvedMacro(bid.vastUrl)) { console.error('[TiladsRenderer] Blocked unresolved auction macro', { bidder: bid.bidder, adUnitCode: bid.adUnitCode, adId: bid.adId, cpm: bid.cpm, hasVastXml: !!bid.vastXml, vastUrl: bid.vastUrl }); return; } if (window.TiladsRenderer && typeof window.TiladsRenderer.renderOutstream === 'function') { window.TiladsRenderer.renderOutstream(bid, container, { autoplay: 'viewable', muted: true, skipOffset: 5 }); } else { console.error('[TiladsRenderer] Renderer not loaded'); } } }, skip: 1, skipafter: 5, pos: foldData.pos, // 1 = ATF, 3 = BTF, startdelay: 0, delivery: [1], protocols: [2,3,5,6] } } //if(slot.hasOwnProperty('name') && slot.name === 'webInterstitial') { // _mediatype.video.playerSize= [320,480]; // _mediatype.video.pos= 7; // _mediatype.video.plcmt = 3; //} var ortbObj = {}; ortbObj = { code: slot.divId, divId: slot.divId, slotName: slot.adCode, slotID: slot.divId, ortb2Imp: { ext: { gpid: slot.adCode + '#' + window._dfpObj.hbCtr, fold: foldData.fold, data: { adserver: { name: 'gam', adslot: slot.adCode } } }, banner: { pos: foldData.pos } }, mediaTypes: _mediatype, bids: pbjs.myBidder(slot) }; if(slot.hasOwnProperty('name') && slot.name === 'webInterstitial') { ortbObj.ortb2Imp.instl=1; } return slotsArr.push(ortbObj) }); return slotsArr; } var _prebidRequest = function(obj){ // ✅ Don't fire bids on hidden/backgrounded page // if (document.hidden) { // debugLogs('XSLT #### Prebid skipped — page hidden'); // Prebid_BidsReceived = true; // unblock GAM so it doesn't stall // return; // } // ✅ Add focus check — softer than hidden but still suppresses unfocused bids // if (!document.hasFocus()) { // debugLogs('XSLT #### Prebid skipped — page not focused'); // Prebid_BidsReceived = true; // return; // } // ✅ Apply EU consent once — mergeConfig won't overwrite uid2 if (window._dfpObj.isEU()) { window.pbjs.getConsent(); } obj = _makePrebidSlots(obj); pbjs.que.push(function() { pbjs.adUnits = []; pbjs.addAdUnits(obj); if(obj.length === 0) { Prebid_BidsReceived = true; return; } if(typeof pbjs.requestBids !== 'function') { Prebid_BidsReceived = true; Prebid_BidsReceived_noSDK = true; _executeInit(obj, 'Prebid', 'SDK not yet loaded'); return; } debugLogs('XSLT #### Prebid request :'+(performance.now()/1000).toFixed(2)+'seconds', obj.map(function(slot){ if(slot) { return slot.slotName;} })); pbjs.requestBids({ bidsBackHandler: function(){ googletag.cmd.push(function() { pbjs.que.push(function() { if (timeout===false){ pbjs.setTargetingForGPTAsync(); Prebid_BidsReceived = true; _executeInit(obj, 'Prebid', 'Successfully'); } }); }); }, timeout: window._dfpObj.PREBID_TIMEOUT }); }); } var _makeTAMSlots = function(obj){ var slotsArr = [] obj.map(function(slot){ if(!slot.adCode) return; if(!slot.size) return; if(!slot.divId) return; if(slot.divId === 'NIL' ) return; if(window._dfpObj._notEligibleForHB(slot)) return; if (slot.size.indexOf('fluid') > -1) slot.size.splice(slot.size.indexOf('fluid'), 1); return slotsArr.push({ slotID: slot.divId, sizes: slot.size && slot.size[0].length > 1 ? slot.size : [slot.size], slotName: slot.adCode, floor: {value: parseInt(pbjs.bidPrice*100), currency:'USD'} }); }); return slotsArr; } var _TAMRequest = function(obj){ obj = _makeTAMSlots(obj) if(obj.length === 0) { TAM_BidsReceived = true; return; } if(typeof apstag.fetchBids !== 'function') { TAM_BidsReceived = true; TAM_BidsReceived_noSDK = true; _executeInit(obj, 'TAM', 'SDK not yet loaded'); return; } debugLogs('XSLT #### TAM request :'+(performance.now()/1000).toFixed(2)+'seconds', obj.map(function(slot){ if(slot) { return slot.slotName;} })); window.apstag.init({"pubID":"5025","adServer":"googletag"}); apstag.fetchBids({ slots: obj, timeout: window._dfpObj.PREBID_TIMEOUT // Make Sure this timeout is less than or equal to OpenWrap TimeOut }, function(bids) { googletag.cmd.push(function(){ apstag.setDisplayBids(); TAM_BidsReceived = true; _executeInit(obj, 'TAM', 'Successfully'); }); }); } var TAM_BidsReceived = false; var Prebid_BidsReceived = false; var TAM_BidsReceived_noSDK = false; var Prebid_BidsReceived_noSDK = false; var _sendPrebidRequest = function(obj){ setTimeout(function () { if (typeof objTaboola !== "undefined" && objTaboola && objTaboola.loadTaboolaScript && objTaboola.renderTaboolaAd) { objTaboola.loadTaboolaScript(objTaboola.renderTaboolaAd); } _prebidRequest(obj); }, 0); setTimeout(function () {_TAMRequest(obj);}, 0); } window._dfpObj.getParameterByName = function(name, url){ url = url || window.location.href; name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } function getNavigationType() { var navigationTimingEntry = performance.getEntriesByType("navigation")[0], navigationType = navigationTimingEntry.type; if (navigationTimingEntry) { if (document.wasDiscarded) { navigationType = 'restore'; } else if (document.prerendering || navigationTimingEntry.activationStart > 0) { // Document was prerendered using Speculation Rules API: https://developer.chrome.com/docs/web-platform/prerender-pages#detect-prerender-in-javascript navigationType = "prerender"; } else if (navigationTimingEntry.deliveryType != "") { // Use deliverType to recognize whether a Navigation was cached and how (https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/deliveryType): navigationType = navigationTimingEntry.deliveryType; } } else if (navigationTimingEntry.type) { // fallback case handling default navigationTiming types: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/type navigationType = navigationTimingEntry.type.replace(/_/g, '-'); } return navigationType; } var _setTargeting = function(sectionName, adObj) { // Audience & PPID var PPIDCookieVal = window._dfpObj.getCookie('_col_uuid'); var _auds = window._dfpObj.getCcaudData() || []; // Audience & PPS window._dfpObj.setPPS(); window._dfpObj.setAdConfig('sg', _auds); window._dfpObj.setAdConfig('aud_flag', PPIDCookieVal ? 'true' : 'false'); if (PPIDCookieVal) { window._dfpObj.setAdConfig('col_key', PPIDCookieVal); window.googletag.pubads().setPublisherProvidedId(PPIDCookieVal); } // XSLT Toiprops to adskeys conversion if (typeof window._dfpObj.createKeyValueObj === 'function') { window._dfpObj.createKeyValueObj(); } // App & language flags if (window._dfpObj.frmapp) { window._dfpObj.setAdConfig('frmapp', 'yes'); } if (window.location.search.indexOf('eisamay') > -1) { window._dfpObj.setAdConfig('LANGbackToHome', 1); } // Channel: np if (window.adsconfig && window.adsconfig.channel === 'np') { window._dfpObj.setAdConfig('Channel', 'np'); if (adObj && adObj.length && adObj[0] && adObj[0].targeting) { window.Times.adsKeys = adObj[0].targeting; } else if (window.Times && window.Times.pageLoadAdsArr && window.Times.pageLoadAdsArr[0] && window.Times.pageLoadAdsArr[0].targeting) { window.Times.adsKeys = window.Times.pageLoadAdsArr[0].targeting; } } // Times adsKeys targeting if (window.Times && window.Times.adsKeys) { var adsKeys = window.Times.adsKeys; for (var targetKey in adsKeys) { if ( adsKeys.hasOwnProperty(targetKey) && typeof adsKeys[targetKey] !== 'undefined' && targetKey !== 'Meta_Keywords' ) { window._dfpObj.setAdConfig(targetKey, adsKeys[targetKey] + ''); } } window.tgtkeys = adsKeys; } // Third-party identity signals window._dfpObj.setAdConfig('id5', localStorage.getItem('id5id') ? '1' : '0'); window._dfpObj.setAdConfig('_uid2', typeof window.getUid2AdvertisingToken === 'function' && window.getUid2AdvertisingToken() ? '1' : '0'); window._dfpObj.setAdConfig('loggedin', window._dfpObj.getCookie('ssoid') ? 'yes' : 'no'); // DFP test param if (typeof window._dfpObj.getParameterByName === 'function') { var _val = window._dfpObj.getParameterByName('toi_dfp_test'); if (_val) { window._dfpObj.setAdConfig('toi_dfp_test', _val); } var _utm_s = window._dfpObj.getParameterByName('utm_source'); var _utm_m = window._dfpObj.getParameterByName('utm_medium'); var _utm_c = window._dfpObj.getParameterByName('utm_campaign'); if (_utm_s || _utm_m || _utm_c ) { window._dfpObj.setAdConfig('source_medium', _utm_s+'_'+_utm_m+'_'+_utm_c); } } }; var _defineSlot = function(adsObj) { var slotsObj = { direct: [], hb: [] }; adsObj.forEach(function(adObj) { var adObject = adObj; if (!adObject.hasOwnProperty('adCode')) return; if (adObject.adCode.indexOf('Andbeyond') > -1 && window._dfpObj.business !== 'it') return; if (adObject.adCode.indexOf('INNOV') > -1 && window.location.host.indexOf('timesofindia') > -1) return; if (window._dfpObj.checkJarvis(adObj)) return; if (typeof window._dfpObj._getAdBasedOnFlags === 'function') { adObject = window._dfpObj._getAdBasedOnFlags(adObject); } var adCode = adObject.adCode ? adObject.adCode.trim() : ''; var divId = adObject.divId; var size = adObject.size; var adCodeObj = null; var trackAdEventObj = {}; if (window._dfpObj.filterSlots(divId, 'defineSlots')) return; window._dfpObj.definedSlots.push(divId); if (size && !Array.isArray(size)) { size = JSON.parse(size); } // AdCode overrides if (adCode.toLowerCase().indexOf('_innov') > -1 && window.location.href.indexOf('gutterunfill') > -1) { adCode = '/7176/TOI/TOI_TEST/TOI_ROS_Test_Nofill_Innov1'; } if (window.location.href.indexOf('test=expando') > -1 && adCode.indexOf('_ATF') > -1) { adCode = '/7176/TOI_MWeb/TOI_MWeb_Test/TOI_Mweb_Test3_ATF'; } var isEtInnov = window._dfpObj.isETPage && window._dfpObj.isInnov(adCode); // Define slot if (adObject.hasOwnProperty('name') && adObject.name === 'webInterstitial') { adCodeObj = googletag.defineOutOfPageSlot(adCode, googletag.enums.OutOfPageFormat.INTERSTITIAL); debugLogs('XSLT #### webInterstitial', (performance.now() / 1000).toFixed(2) + 'seconds'); if (adCodeObj) { adCodeObj.addService(googletag.pubads()); debugLogs('XSLT #### webInterstitial present', (performance.now() / 1000).toFixed(2) + 'seconds'); (divId === 'NIL') ? slotsObj.direct.push(adCodeObj) : slotsObj.hb.push(adCodeObj); } } else if (adObject.hasOwnProperty('anchorAd')) { adCodeObj = window.googletag.defineOutOfPageSlot(adCode, googletag.enums.OutOfPageFormat[adObject.anchorAd]); if (adCodeObj) { adCodeObj.addService(googletag.pubads()); slotsObj.direct.push(adCodeObj); } } else if (!size || isEtInnov) { adCodeObj = window.googletag.defineOutOfPageSlot(adCode, divId).addService(googletag.pubads()); slotsObj.direct.push(adCodeObj); } else if (window._dfpObj._notEligibleForHB(adObj)) { adCodeObj = window.googletag.defineSlot(adCode, size, divId).addService(googletag.pubads()); slotsObj.direct.push(adCodeObj); } else { adCodeObj = window.googletag.defineSlot(adCode, size, divId).addService(googletag.pubads()); slotsObj.hb.push(adCodeObj); } if (!adCodeObj) return; // slot definition failed, skip targeting debugLogs((performance.now() / 1000).toFixed(2) + 'seconds -- XSLT @@@ DefineSlot ' + adCode + '----' + divId + ' : ', size); // ---- Build slot targeting object ---- var slotTargeting = {}; // Name & ad tracker segments if (adObject.hasOwnProperty('name') && adObject.name) { slotTargeting['name'] = adObject.name; if (window._dfpObj.adTracker && typeof window._dfpObj.adTracker.trackAdEvent === 'function') { trackAdEventObj = window._dfpObj.adTracker.getAdStatsLast30Days(adObject.name); if (trackAdEventObj.hasOwnProperty('avgClick') && trackAdEventObj.avgClick) { slotTargeting['click_segment'] = trackAdEventObj.avgClick; } if (trackAdEventObj.hasOwnProperty('avgView') && trackAdEventObj.avgView) { slotTargeting['view_segment'] = trackAdEventObj.avgView; } } } // Size // if (adObject.hasOwnProperty('size') && adObject.size) { // slotTargeting['size'] = JSON.stringify(size); // } // Reload counter if (adObject.hasOwnProperty('reloadCounter') && adObject.reloadCounter) { slotTargeting['reloadCounter'] = JSON.stringify(adObject.reloadCounter); } // Failover if (adObject.hasOwnProperty('failover') && adObject.failover) { slotTargeting['failover'] = JSON.stringify(adObject.failover); } // Periodic refresh overrides if (adCode.indexOf('Etimes_APV_1000x602') > -1 || adCode.indexOf('Etimes_Mweb_APV_400x461') > -1) { adObject.periodicRefresh = 15; } if (window._dfpObj.isToiPage && (adCode.indexOf('_AFF_') > -1 || adCode.indexOf('_AFF1_') > -1)) { adObject.periodicRefresh = 10; } var adProps = window.adsconfig && window.adsconfig.toiad_props; if (adProps && adProps.adRefresh && window.checkJarvisIsAdActive && window.checkJarvisIsAdActive(adProps.adRefresh) === 1) { if (adProps.adRefresh.pattern === 'primeAd' && window._dfpObj.isFirstFold(adObject)) { adObject.periodicRefresh = adProps.adRefresh.periodicRefresh || 15; } } if (adObject.hasOwnProperty('periodicRefresh') && adObject.periodicRefresh) { slotTargeting['periodicRefresh'] = adObject.periodicRefresh; } // NewsPoint hack if (window.__CLIENT__ && window.__CLIENT__.indexOf('newszop') > -1) { slotTargeting['retry'] = '-1'; if (size && size.length > 0 && size[0][0] === 320 && size[0][1] === 50) { slotTargeting['pricing-rule-active'] = true; } if (size) { slotTargeting['pos'] = 'newszop-' + size[0].join().replace(',', 'x'); } } // ✅ Single setConfig call with all slot targeting adCodeObj.setConfig({ targeting: slotTargeting }); // Hard refresh if (adObject.hasOwnProperty('hardRefresh') && adObject.hardRefresh) { window._dfpObj.hardRefreshArr.push(adCodeObj); } }); return slotsObj; }; var _sendGAMRequest = function(adsObj,noBidSDK){ var altPath = window.location.pathname.length > 0 ? window.location.pathname.split('/') : []; var pathList = window.location.pathname.split('/'); if (pathList.length === 0 || !pathList[1]) { pathList = ['default', 'home']; } var sectionName = altPath[1] || pathList[1]; if (adsObj && adsObj.length === 0) return; _setTargeting(sectionName, adsObj); var ds = _defineSlot(adsObj); if(ds.direct.length === 0 && ds.hb.length === 0) {timeout = false; return;} // Enable SRA and services. if(!window._dfpObj.serviceEnabled){ googletag.pubads().enableSingleRequest(); googletag.enableServices(); googletag.pubads().disableInitialLoad(); window.debugLogs("Setting the autorefresh false"); // Setting the autorefresh false in case of the BackForwardCache as google started itself refreshing the adcode but we have another logic for this. googletag.setConfig({ autoRefresh: { backForwardCache: false } }); window._dfpObj.serviceEnabled = 1; } // if (window._dfpObj.isEU()) { // window.googletag.pubads().setRequestNonPersonalizedAds(1); // } if(ds.direct.length > 0){ _initAdserver(ds.direct, true, 'Direct'); } if(ds.hb.length > 0 && (typeof pbjs.requestBids === 'function' || typeof apstag.fetchBids === 'function') && noBidSDK !== 'noBidSDK'){ setTimeout(function(){ _initAdserver(ds.hb, true, 'failover'); }, window._dfpObj.FAILSAFE_TIMEOUT); }else{ _initAdserver(ds.hb, true, 'noSDK'); } } var _sendRequest = function(obj){ setTimeout(function () { _sendPrebidRequest(obj); googletag.cmd.push(function() { _sendGAMRequest(obj); }) }, 0); } if(!window._dfpObj.isEU()){ _sendRequest(adsArray); }else{ if (typeof __tcfapi === 'function') { _sendRequest(adsArray); }else{ setTimeout(function () { _sendRequest(adsArray); debugLogs((typeof __tcfapi === 'function')+' XSLT #### '+(performance.now()/1000).toFixed(2)+'seconds'); }, 1000); } } } window._dfpObj._isdfplazyAd = function(slot) { var adProps = window.adsconfig && window.adsconfig.toiad_props; if(adProps && adProps.skipLazyAd &&window.checkJarvisIsAdActive && window.checkJarvisIsAdActive(adProps.skipLazyAd) === 1){ slot.skipLazy = 1; } if(slot && slot.name === 'atf' && slot.articleIndex > 0 ){ var perpectuallazySection = window.location.pathname.match('/city/|/sports/|/world/'); var jcond = window.adsconfig && window.adsconfig.global_config && window.adsconfig.global_config.isCPDATF; if(!jcond && perpectuallazySection) { return true; } return false; } return false; } window.displayAllAdsInArray = function(adsArray) { //***** LazyLoad ********* var executeNow = []; if(typeof _updateArr === 'function') adsArray = _updateArr(adsArray); // if(typeof window._dfpObj.modifyAdsArray === 'function') adsArray = window._dfpObj.modifyAdsArray(adsArray); try { adsArray.map( function(slot){ //if(window.location.host.indexOf('timesofindia') > -1 && window.location.pathname === '/') slot.skipLazy = 1; // if(window.location.host.indexOf('timesofindia') > -1) slot.skipLazy = 1; if(!slot.adCode) return; if(slot.adCode.indexOf('Newspoint') > -1) slot.skipLazy = 1; if(window._dfpObj.filterSlots(slot.divId, 'defineSlots')) return; if(window._dfpObj.filterSlots(slot.divId, 'filterLazyLoad')) return; var isLazy = window._dfpObj._isdfplazyAd(slot); if(isLazy || slot.adCode && slot.size && slot.adCode.indexOf('1x1') === -1 && slot.skipLazy !== 1 && slot.adCode.toLowerCase().indexOf('interstitial') === -1 && slot.adCode.toLowerCase().indexOf('topband') === -1 && slot.adCode.toLowerCase().indexOf('cube') === -1 && !slot.hasOwnProperty('force') && !window._dfpObj.isFirstFold(slot) && !window._dfpObj._notEligibleForHB(slot) ){ slot = typeof window._dfpObj.lazyactualUnitCode === 'function' ? window._dfpObj.lazyactualUnitCode(slot) : slot; var div1 = document.getElementById(slot.divId); if(div1){ window._dfpObj['observer'].observe(div1); window._dfpObj.lazyLoadSlots[slot.divId] = slot; window._dfpObj.filterLazyLoad.push(slot.divId); } }else{ slot = typeof window._dfpObj.lazyactualUnitCode === 'function' ? window._dfpObj.lazyactualUnitCode(slot) : slot; //window._dfpObj.renderAds([slot]) executeNow.push(slot) } } ); if(executeNow.length > 0) window._dfpObj.renderAds(executeNow) } catch(e){ console.log(e); } } //***** First Fold Slots ********* window._dfpObj.device = window._dfpObj.isMobile() ? 'mWeb':'Web'; window._dfpObj.geoCountry = window._dfpObj.getCookie("geo_country"); function execute_ads(){ if (window.Times.pageLoadAdsArr.length === 0) return; window._dfpObj.geoCountry = window._dfpObj.getCookie("geo_country"); window._dfpObj.renderAds(window.Times.pageLoadAdsArr.filter(function(slot){ if(slot.force) return true; debugLogs('XSLT isFirstFold #### '+(performance.now()/1000).toFixed(2)+'seconds', slot.adCode); return window._dfpObj.isFirstFold(slot); })); } if (typeof window.geoCallback === 'function'){ window.geoCallback(execute_ads); } else { execute_ads(); } (function() { window.Times = window.Times || {}; var excssAdded = 0; var resizeObserver; var updateTrabnslateState = function (e){ window.Times.translateState = window.Times.translateState || []; window.Times.translateState.forEach(function(func){ func(e); }); var isActive = window.Times.translateState && window.Times.translateState.length > 0; if (!resizeObserver && isActive) { resizeObserver = new ResizeObserver(function() { window.Times.translateState[0](); }); var elems = [document.querySelector('.topBand_adwrapper')] elems.forEach(function(rz) { resizeObserver.observe(rz); }); } } window.Times.lazyElementTranslate = function(){ if(!window.Times.translateheight){ return; } if(window._dfpObj && window._dfpObj.isMobile()){ return; } var elemToTranslate = document.querySelectorAll("[data-translate-id]"); if (elemToTranslate.length > 0) { elemToTranslate.forEach(function(translateelem) { if(!translateelem.dataset.translateheight){ translateelem.style.transform = 'translateY('+ window.Times.translateheight + 'px)'; } }); } } function addStickyCss(translateelem, height, pretop, skipChecks){ var _compcss = getComputedStyle(translateelem); var isvalid = skipChecks || _compcss && _compcss.position === 'sticky' if (isvalid) { var _newheight = pretop - height; // Todo : Remove and Make this condn common for all if(document.getElementById('toiPlayerContainer') && translateelem.id == 'tabListUl') { var headeravail = window.App && window.App.state && window.App.state.isFrmapp ? 0 : 28; _newheight = (document.getElementById('toiPlayerContainer').parentElement.offsetHeight + headeravail) - height; } translateelem.style.top = _newheight + 'px'; } } function getStickyWidget(translateelem, height){ translateelem.querySelectorAll('[data-translate-sticky]').forEach(function(ele){ addStickyCss(ele, height, ele.dataset.translateSticky, 1); }); } var transformElementsByPixel = function(_resizerWrapper, forcetranform) { var elemToTranslate = document.querySelectorAll("[data-translate-id]"); if (elemToTranslate.length > 0) { elemToTranslate.forEach(function(translateelem) { var translateId = translateelem.dataset.translateId; var height = 0; if(translateId) { _resizerWrapper.forEach(function(_rw){ if(_rw.resizerTarget.indexOf(translateId) > -1){ height += _rw.resizedHeight || 0; } }); } else { _resizerWrapper.forEach(function(_rw){ height += _rw.resizedHeight || 0; }); } if(!height && !forcetranform) { return; } translateelem.style.transform = 'translateY('+ height + 'px)'; translateelem.dataset.translateheight = height; window.Times.translateheight = height; translateelem.classList.add('cls_animate'); addStickyCss(translateelem, height, translateelem.dataset.stickyTop); getStickyWidget(translateelem, height); if(translateelem.dataset.bottomSpace){ translateelem.style.marginBottom = (+translateelem.dataset.bottomSpace + height) + 'px'; } }); if(window._dfpObj && window._dfpObj.isMobile() && document.querySelector('.contentwrapper')){ document.querySelector('.contentwrapper').style.overflowX = 'clip'; } updateTrabnslateState(window.Times.translateheight); } }; var observeResizeChange = function(resizeElems, _resizerWrapper) { var toiadsresizeObserver = new ResizeObserver(function(resizedEntry) { try { var isElemResized = 0; var forced = 0; resizedEntry.forEach(function(resizeelem) { var _key = parseInt(resizeelem.target.dataset.resizerId) || 0; var _resizerWrapperCurr = _resizerWrapper[_key]; if (_resizerWrapperCurr && resizeelem.contentRect.height > _resizerWrapperCurr.height) { _resizerWrapperCurr.resizedHeight = resizeelem.contentRect.height - _resizerWrapperCurr.height; isElemResized = 1; } if(resizeelem.contentRect.height == _resizerWrapperCurr.height && _resizerWrapperCurr.resizedHeight > _resizerWrapperCurr.height){ _resizerWrapperCurr.resizedHeight = resizeelem.contentRect.height; isElemResized = 1; forced = 1; } }); if(isElemResized){ transformElementsByPixel(_resizerWrapper, forced); } } catch (e) { // debugLogs(e); } }); resizeElems.forEach(function(resizeElem) { toiadsresizeObserver.observe(resizeElem); }); }; function initCLSHandling() { var resizerElem = document.querySelectorAll("[data-resizer-target]"); var elemToTranslate = document.querySelectorAll("[data-translate-id]"); var cwTranslate = document.querySelector("[data-translate-id='cw']"); var translatePage = document.querySelector("[data-translate-page='1']"); var wrapperclx = document.querySelector(".wrapperclearfix"); // TODO Will REMOVE THIS if(!(wrapperclx && wrapperclx.dataset && wrapperclx.dataset.translateId) && !translatePage){ if (!document.querySelector(".vdoowrapperclearfix")) { return; } } if (!(elemToTranslate.length > 0) || !(elemToTranslate.length > 0) || typeof getComputedStyle !== 'function' || window.TimesApps._loadedClshandler || !cwTranslate) { return; } var _resizerWrapper = []; resizerElem.forEach(function(rEl, ind) { var _parent_rEl = rEl.parentNode; var _parent_rElstyle = _parent_rEl ? getComputedStyle(_parent_rEl) : {}; if(!_parent_rElstyle.height || _parent_rElstyle.height === '0px'){ var _minheight = parseFloat(_parent_rElstyle.minHeight) || 0; _parent_rEl.style.height = _minheight + 'px';; } rEl.dataset.resizerId = ind; _resizerWrapper[ind] = { height: _parent_rEl.offsetHeight}; if(rEl.dataset.resizerTarget) { _resizerWrapper[ind]['resizerTarget'] = rEl.dataset.resizerTarget.split(','); } }); if (_resizerWrapper.length && typeof ResizeObserver !== 'undefined') { window.TimesApps._loadedClshandler = true; observeResizeChange(resizerElem, _resizerWrapper); } else { //console.log('ResizeObserver / elemToTranslate NOT FOUND'); } } window.TimesApps = window.TimesApps || {}; TimesApps.initCLSHandlingV2 = initCLSHandling; initCLSHandling(); })(); // ============================================================================ // UID2 // UID2 SDK -> owns identity creation + token refresh // Prebid.js -> receives only the current advertising token (value mode) // ============================================================================ var clientSideConfig = { subscriptionId: "ywgdSVrfvs", serverPublicKey: "UID2-X-P-MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9sRQ0q5rG1WacJTCCS2gkDBJxuBX88urAHoaLOQhaWNrwSFzHQcWLM0xxAvkiq8SanHek/ZRX387nqA5PykPJw==" }; // ---- Hashing (UID2 normalisation rules) ------------------------------------ // Trim + lowercase; dots and "+suffix" are removed only for gmail.com. window._dfpObj.getNormalisedEmail = function (email) { var parts = email.toString().trim().toLowerCase().split("@"); if (parts.length === 2 && parts[1] === "gmail.com") { parts[0] = parts[0].split("+")[0].replace(/\./g, ""); } return parts.join("@"); }; // E.164: "+" followed by digits only. window._dfpObj.getNormalisedPhone = function (phone, countryCode) { phone = phone.toString().trim(); var digits = phone.replace(/\D/g, ""); if (phone.charAt(0) === "+") return "+" + digits; if (phone.indexOf("00") === 0) return "+" + digits.slice(2); return "+" + String(countryCode || "+91").replace(/\D/g, "") + digits.replace(/^0+/, ""); }; // Normalises, then stores base64(SHA-256) as emhash / phhash. Needs https. window._dfpObj.hash = function (type, value, code) { var key = type === "email" ? "emhash" : type === "phone" ? "phhash" : null; if (type === "email") value = window._dfpObj.getNormalisedEmail(value); if (type === "phone") value = window._dfpObj.getNormalisedPhone(value, code); if (!key || !value || !window.crypto || !crypto.subtle) return value; crypto.subtle.digest("SHA-256", new TextEncoder().encode(value)).then(function (buf) { localStorage.setItem(key, btoa(String.fromCharCode.apply(null, new Uint8Array(buf)))); // Login may happen after page load; start UID2 immediately in that case. if (typeof window._dfpObj.uid2Start === "function") window._dfpObj.uid2Start(); }).catch(function (e) { console.log("UID2 hash error:", e); }); return value; }; window._dfpObj.storedHash = function () { try { window._dfpObj.emhash = localStorage.getItem("emhash") || window._dfpObj.getCookie("dmp_emhash"); window._dfpObj.phhash = localStorage.getItem("phhash") || window._dfpObj.getCookie("dmp_phhash"); } catch (e) { window._dfpObj.emhash = window._dfpObj.phhash = undefined; } }; window._dfpObj.storedHash(); // ---- Current token (from UID2 SDK storage) --------------------------------- // SDK v3 stores the identity in localStorage (cookie only with useCookie:true). window._dfpObj._readUid2Storage = function () { var raws = []; try { raws.push(localStorage.getItem("__uid2_advertising_token")); } catch (e) {} try { raws.push(window._dfpObj.getCookie("__uid2_advertising_token")); } catch (e) {} for (var i = 0; i < raws.length; i++) { if (!raws[i]) continue; try { return JSON.parse(raws[i]); } catch (e) {} try { return JSON.parse(decodeURIComponent(raws[i])); } catch (e) {} } }; // Returns the advertising token only if not opted-out and not expired. window.getUid2AdvertisingToken = function () { var id = window._dfpObj._readUid2Storage(); var token = id && id.latestToken ? id.latestToken : id; if (!token || id.status === "optout" || token === "optout" || !token.advertising_token) { return undefined; } if (token.identity_expires && token.identity_expires <= Date.now()) return undefined; return token.advertising_token; }; // Convenience cookie for scripts that read the plain token. window._dfpObj._saveUid2Cookie = function (token) { try { window._dfpObj.setCookie("__uid2_adv_tok", token || "", token ? 60 : -1); } catch (e) {} }; // ---- Prebid handoff (value mode: no uid2Token / refresh fields) ------------ // Initial entry for pbjs.myConfig.userSync.userIds — push it only if non-null. window._dfpObj.uid2PrebidConfig = (function () { var token = window.getUid2AdvertisingToken(); window._dfpObj._saveUid2Cookie(token); return token ? { name: "uid2", value: { uid2: { id: token } } } : null; })(); // Sets (token) or removes (no token) the uid2 entry; other ID modules are kept. window._dfpObj._injectUid2ToPrebid = function (token) { var plainToken = token && token.advertising_token ? token.advertising_token : token; if (plainToken === "undefined" || plainToken === "null") plainToken = undefined; window._dfpObj._saveUid2Cookie(plainToken); window.pbjs = window.pbjs || {}; window.pbjs.que = window.pbjs.que || []; window.pbjs.que.push(function () { try { var ids = ((window.pbjs.getConfig("userSync") || {}).userIds || []).filter(function (u) { return u && u.name !== "uid2"; }); if (plainToken) { ids.unshift({ name: "uid2", value: { uid2: { id: plainToken } } }); } window.pbjs.setConfig({ userSync: { userIds: ids } }); if (typeof window.pbjs.refreshUserIds === "function") { window.pbjs.refreshUserIds({ submoduleNames: ["uid2"] }); } debugLogs("XSLT #### UID2 " + (plainToken ? "set in" : "removed from") + " Prebid"); } catch (e) { console.log("UID2 Prebid update error:", e); } }); }; // ---- UID2 SDK events ------------------------------------------------------- window.__uid2 = window.__uid2 || {}; window.__uid2.callbacks = window.__uid2.callbacks || []; window.__uid2.callbacks.push(function (eventType, payload) { try { var token = payload && payload.identity && payload.identity.advertising_token; if (eventType === "SdkLoaded") { window.__uid2.init({}); return; } // No identity yet: create one from the stored hash. The result // arrives asynchronously as IdentityUpdated. if (eventType === "InitCompleted" && !token) { window._dfpObj.storedHash(); var p = window._dfpObj.emhash ? __uid2.setIdentityFromEmailHash(window._dfpObj.emhash, clientSideConfig) : window._dfpObj.phhash ? __uid2.setIdentityFromPhoneHash(window._dfpObj.phhash, clientSideConfig) : null; if (p && typeof p.catch === "function") { p.catch(function (e) { console.log("UID2 identity creation error:", e); }); } return; } // InitCompleted with identity, refresh, expiry (identity null) or opt-out. if (eventType === "InitCompleted" || eventType === "IdentityUpdated" || eventType === "OptoutReceived") { if (eventType === "OptoutReceived") token = undefined; var changed = token !== window._dfpObj._uid2Token; window._dfpObj._uid2Token = token; if (token) window._dfpObj.setCookie("__uid2isLoginV2", 1, 720); if (!changed) return; window._dfpObj._injectUid2ToPrebid(token); // Make GAM pick up the new secure signal on the next request. window.googletag = window.googletag || { cmd: [] }; googletag.cmd.push(function () { if (googletag.secureSignalProviders && googletag.secureSignalProviders.clearAllCache) { googletag.secureSignalProviders.clearAllCache(); } }); debugLogs("XSLT #### UID2 " + eventType); } } catch (e) { console.log("UID2 callback error:", eventType, e); } }); // ---- SDK loader: only when there is a hash or an existing identity --------- window._dfpObj._loadUid2Sdk = function () { if (window._dfpObj._uid2Loaded) return; window._dfpObj._uid2Loaded = true; try { window._dfpObj.loadJS("https://cdn.prod.uidapi.com/uid2-sdk-3.2.0.js", true); window._dfpObj.loadJS("https://cdn.prod.uidapi.com/uid2SecureSignal.js", true); } catch (e) { window._dfpObj._uid2Loaded = false; console.log("UID2 SDK load error:", e); } }; window._dfpObj.uid2Start = function () { try { window._dfpObj.storedHash(); // Any stored identity counts, even expired: the SDK may still refresh it. if (window._dfpObj.emhash || window._dfpObj.phhash || window._dfpObj._readUid2Storage()) { window._dfpObj._loadUid2Sdk(); } } catch (e) {} }; // Start before the first auction whenever an identity/hash already exists. window._dfpObj.uid2Start(); window._dfpObj.adTracker = (function () { var STORAGE_KEY = 'adInteractionLogs'; var VISIT_KEY = 'adVisitLogs'; var MS_30_DAYS = 30 * 24 * 60 * 60 * 1000; var globalUserState = null; function getTodayDateStr() { return new Date().toISOString().split('T')[0]; } function parseJSON(key, fallback) { try { return JSON.parse(localStorage.getItem(key)) || fallback; } catch (e) { return fallback; } } function saveJSON(key, value) { localStorage.setItem(key, JSON.stringify(value)); } function cleanOldEntries(key, isObject) { var data = parseJSON(key, isObject ? {} : []); var cutoff = Date.now() - MS_30_DAYS; var cleaned; if (isObject) { cleaned = {}; for (var k in data) { if (data.hasOwnProperty(k)) { var time = new Date(k).getTime(); if (!isNaN(time) && time >= cutoff) { cleaned[k] = data[k]; } } } } else { cleaned = []; for (var i = 0; i < data.length; i++) { if (new Date(data[i].date).getTime() >= cutoff) { cleaned.push(data[i]); } } } saveJSON(key, cleaned); return cleaned; } function trackAdEvent(type, id) { var name = window._dfpObj.idNameMapper[id] || id; var logs = cleanOldEntries(STORAGE_KEY, false); var today = getTodayDateStr(); var found = false; for (var i = 0; i < logs.length; i++) { if (logs[i].name === name && logs[i].date === today) { logs[i][type] = (logs[i][type] || 0) + 1; found = true; break; } } if (!found) { var entry = { name: name, date: today }; entry[type] = 1; logs.push(entry); } saveJSON(STORAGE_KEY, logs); } function trackUserVisit() { var visits = cleanOldEntries(VISIT_KEY, true); var today = getTodayDateStr(); visits[today] = (visits[today] || 0) + 1; saveJSON(VISIT_KEY, visits); } function getUserEngagementStats() { if (globalUserState) return globalUserState; var visits = cleanOldEntries(VISIT_KEY, true); var stats = { visited: 0, visitedDayCount: 0 }; for (var k in visits) { if (visits.hasOwnProperty(k)) { stats.visited += visits[k]; stats.visitedDayCount += 1; } } globalUserState = stats; return stats; } function getAdStatsLast30Days(name) { var logs = cleanOldEntries(STORAGE_KEY, false); var stats = { clicks: 0, views: 0, render: 0, avgPClick:0, avgPClick:0, avgClick:0, avgView:0 }; for (var i = 0; i < logs.length; i++) { var entry = logs[i]; if (!name || entry.name === name) { stats.clicks += entry.click || 0; stats.views += entry.view || 0; stats.render += entry.render || 0; } } var engagement = getUserEngagementStats(); stats.pageViews = engagement.visited; stats.visitedDayCount = engagement.visitedDayCount; stats.avgPClick = Math.round((stats.clicks/stats.render)*100); stats.avgPView = Math.round((stats.views/stats.render)*100); if(stats.render === 0){ stats.avgClick = 'New'; stats.avgView = 'New'; }else{ stats.avgClick = stats.avgPClick >= 50 ? 'High' : stats.avgPClick >= 30 ? 'Medium' : stats.avgPClick > 0 ? 'Low' : 'Zero'; stats.avgView = stats.avgPView >= 70 ? 'High' : stats.avgPView >= 50 ? 'Medium' : stats.avgPView >= 30 ? 'Low' : 'Zero'; } return stats; } trackUserVisit(); return { trackAdEvent: trackAdEvent, getAdStatsLast30Days: getAdStatsLast30Days, getUserEngagementStats: getUserEngagementStats }; })(); // window._dfpObj.adTracker.getAdStatsLast30Days(); - for all tracker // window._dfpObj.adTracker.getAdStatsLast30Days('atf'); - atf view & click // window._dfpObj.adTracker.getUserEngagementStats(); - for total visited count & visited day count // window._dfpObj.adTracker.trackAdEvent('click', id); // window._dfpObj.adTracker.trackAdEvent('view', id); (function(){ var atfName = _dfpObj.isMobile && _dfpObj.isMobile() ? 'atf': 'masthead'; window._dfpObj.extractAdNamesFromPaths = function(path) { var patternMap = [ { pattern: /TOPBAND/i, name: 'topBand' }, { pattern: /ATF/i, name: atfName }, { pattern: /BTF/i, name: 'mid' }, { pattern: /BO/i, name: 'bottomOverlay' }, { pattern: /INNOV/i, name: 'gutter' }, { pattern: /SKINNER_LHS/i, name: 'skinnerlhs' }, { pattern: /SKINNER_RHS/i, name: 'skinnerrhs' } ]; var result = ""; // Special case for MREC var mrecMatch = path.match(/MREC(?:_(\d+))?/i); if (mrecMatch) { var index = mrecMatch[1] ? parseInt(mrecMatch[1], 10) : 1; var mrecName = index === 1 ? 'mrec' : 'mrec' + (index - 1); result = mrecName; } else { for (var j = 0; j < patternMap.length; j++) { if (patternMap[j].pattern.test(path)) { result = patternMap[j].name; break; } } } return result; } })(); /*Temp solution for ET NEXT project*/ var maxTry = 15; var counter = 1; var ref_int = setInterval(function () { removeAdForPrime(); counter++ }, 1000); if (counter >= maxTry) { clearInterval(ref_int); } function removeAdForPrime() { try { // Add URL parameter check for dev=1 const urlParams = new URLSearchParams(window.location.search); const isDev = urlParams.get('dev') === '1'; // Only proceed if user is Prime/Pink AND dev=1 is present if (window.objUser && (window.objUser.isPink == true || window.objUser.isPrime == true) && !isDev) { // ... existing code ... var b = document.querySelectorAll(".dfpAd"); if (b.length > 0) { for (var a = 0; a < b.length; a++) { if(b[a]){ b[a].style.display = "none"; } } } var c = document.querySelectorAll(".adContainer"); if (c.length > 0) { for (var a = 0; a < c.length; a++) { if(c[a]){ c[a].style.display = "none"; } } } // ... existing code ... var d = document.querySelectorAll(".topAdContainer"); if (d.length > 0) { for (var a = 0; a < d.length; a++) { if(d[a]){ d[a].style.display = "none"; } } } clearInterval(ref_int) } } catch (c) { console.log("removeAdForPrime:" + c) } } // overwrite in case ET page if(window._dfpObj) { window._dfpObj.getCcaudData = function() { var _auds = ''; if (typeof window._auds !== 'undefined') { _auds = window._auds; } else if ( typeof localStorage !== 'undefined' && typeof localStorage.getItem('audienceData') !== 'undefined' && localStorage.getItem('audienceData') !== null ) { _auds = JSON.parse(localStorage.getItem('audienceData')); } return _auds; } }