{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///vam.js","webpack:///webpack/bootstrap a6b5eab5e59be6a86bd8","webpack:///./src/constants.js","webpack:///./src/logger.js","webpack:///./src/application.js","webpack:///./src/index.js","webpack:///./src/check-dependencies.js","webpack:///./src/legacy/dfp-pixel.js","webpack:///./src/mixins/evented.js","webpack:///./src/mixins/deferred.js","webpack:///./src/mixins/globalized.js","webpack:///./src/mixins/user.js","webpack:///./src/advertising.js","webpack:///./src/header-bidding/provider-manager.js","webpack:///./src/header-bidding/providers/amazon.js","webpack:///./src/header-bidding/providers/amazon-script.js","webpack:///./src/header-bidding/providers/prebid.js","webpack:///./src/header-bidding/config-manager.js","webpack:///./src/utils.js","webpack:///./src/mixins/mixin.js","webpack:///./package.json","webpack:///./src/config-manager.js"],"names":["root","factory","exports","module","define","amd","self","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","parentJsonpFunction","window","chunkIds","moreModules","executeModules","chunkId","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","shift","4","e","onScriptComplete","script","onerror","onload","clearTimeout","timeout","chunk","Error","undefined","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","createElement","type","charset","async","nc","setAttribute","src","p","0","setTimeout","appendChild","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error","s","value","NAMESPACE","PROMISES_PROPERTY","DEFAULT_TIMEOUT","VOCUSER_COOKIE","PAYWALL_COOKIE","SHOW_LOGS","location","search","indexOf","DEFAULT_LOG_TEMPLATE","CONFIG_NAMESPACE","EDITIONS_NAMESPACE","GPT_ID_VOCENTO","GPT_READY","GPT_TIMEOUT","TIMEOUT_POSICIONES_ESTANDAR","ALTOS_MINIMOS_DISPOSITIVOS","mobile","tablet","desktop","POSITION_FLUID","SLOT_RENDERED","SLOT_EMPTY","SLOT_VIEWABLE","SLOT_INACTIVE","DEFAULTS","hideNoAds","refresh","responsive","CAPTURADOR_WS","MCRYPT_KEY","VAM_CSS_URL","JSON_GDP2_0","JSON_GDP2_1","JSON_GDP2_2","NOMBRE_FORMATO_JSON","GPT_URL","HEADER_BIDDING_READY","PREBID_URL","DEFAULT_PREBID_LOAD_TIMEOUT","AMAZON_URL","DEFAULT_AMAZON_LOAD_TIMEOUT","AMAZON_CONFIG","pubID","adServer","OLD_PREFIX","NEW_SUFFIX","1","showLog","_console","_constants","log","apply","concat","Array","slice","arguments","showWarn","_console2","warn","showError","_console3","2","_interopRequireDefault","obj","default","_evented","_evented2","_deferred","_deferred2","_user","_user2","_mixin","_scripts","_hasOwnProperty","Application","load","url","key","options","split","text","RSVP","extend","21","_init","configGDPMedio","configGDP","configManager","voontoApp","Voonto","getInstance","_initialized","when","then","result","_logger","customcmd","googletag","pubads","setRequestNonPersonalizedAds","on","event","_configManager2","_advertising2","init","_printAds","_reload","_refresh","_application2","context$","$","each","printAds","config","data","lookup","forcedOas","OAS","_forceNewOas","media","params","JSON","parse","newOas","adunit","replace","RegExp","toString","portada","VERSION","_package","_package2","_application","_advertising","_configManager","_utils","_window","Vocento","Publicidad","jQuery","datos","getOasSitepage","getSizesGoogle","getValueUser","ready","isEmpty","version","22","_typeof","Symbol","iterator","constructor","Cookies","special","inview","23","_ord","Math","random","_onVocUserReady","gigyaux","getUserType","UserTypes","ANONYMOUS","append","VOCUSER_DATA","userData","gender","age","responseGetUserInfo","user","_onVocUserData","gigya_event","profile","Genders","FEM","MAS","freeze","gigyaUX","24","Evented","preventExtensions","_window$$","one","_window$$2","off","_window$$3","trigger","_window$$4","25","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","next","done","isArray","TypeError","_globalized","_globalized2","_defers","Deferred","whenUntil","promiseNS","_this","time","owner","global","_promiseNS$split","_promiseNS$split2","createGlobal","defer","promised","_promiseNS$split3","_promiseNS$split4","26","Globalized","namespace","nso","forEach","prop","reduce","that","27","_jsonParse","vocUid","e1","e2","UserType","REGISTERED","SUBSCRIBER","TRIAL","User","userType","paywall","pwUserType","cookie","decodeURIComponent","pop","uid","28","_classCallCheck","instance","Constructor","_defineSlot","scriptText","legacyCmvkey","insertedPositionkey","hideText","targetingText","size","idAds","targetingsTags","deviceTypeTargeting","decryptedURL","pattern","isValid","decodedURLTargetings","chunksURLTargetings","topics","mappingObj","sizeMapping","defineSizeMapping","position","getIdDiv","tags","globalTargetings","keys","deviceType","valueUserType","_configManager5","href","exec","chunck","pair","keyChunk","valueChunk","_getTopics","enableTpag","pageType","outOfPage","_getSizeMapping","definition","defineSlot","_getNombreSlot","_getClavePosicionInsertada","_insertedPositions","_executeDefineSlot","eval","_notDisplayedSlots","_display","index","idDiv","display","singleRequest","splice","mappingName","finalDefinition","addSize","viewportSize","responsiveSizes","singleSize","j","_displayStandarQueued","_standardDelayed","Advertising","_displayPrioritized","prioritizedPositions","_pintaListaPosiciones","listaPositions","sonPosicionesPriorizadas","container$","posCuyoDivExiste","existePosEnConfigGDPMedio","isActive","normalizaParams","stringify","_providerManager2","setTargetings","legacyParams","_displayDelayed","isInView","dataset","vocVamDisplayed","_getAdGoogle","esPosPriorizada","activo","eventParams","tParams","hasPreevent","_getEventsPosition","pre_callback","pre_event","post_callback","post_event","_pintarPosicionRefresh","tipoDispositivoAux","positionEvents","dynamicId","dynamic","dynamicSuffix","_infoSlotRender","isSlotRendered","width","height","dimension","arrayObj","numSlots","numTopics","numOas","max","empty","show","addClass","html","_infoSlotFormateaDimensiones","_isLocalPosition","_infoSlotRenderSlots","_infoSlotRenderTopics","_infoSlotRenderOAS","_applyFilter","dimensionsArray","resolution","notRepeatedDimensions","Set","dimen","filtered","substring","add","topic","forzarEnableTopics","enableTopics","voc_top","includes","_capturadorExistsPreview","capturadorDataPreview","_capturadorSetPreview","previewJSON","preview","div","creatividad","previewUrl","_createClass","defineProperties","target","props","descriptor","writable","protoProps","staticProps","_providerManager","_configManager4","_gptInitialized","_completadasPriorizadas","reload","kruxSegments","kruxUser","checkConfigFromURL","processConfig","cargaLibreriaGPT","collapseEmptyDivs","enableKrux","setTargeting","Krux","vocento","segments","enableSingleRequest","syncRendering","enableSyncRendering","enableServices","checkExceptions","addEventListener","ev","divId","paramsSlot","slot","getSlotElementId","getTargeting","infoSlot","removePrioritizedPosition","thereArePrioritizedPositions","isPrioritized","find","parameters","prioritized","delayed","hide","serverType","isDelayed","_configManager3","29","_loadActivesGateways","_gatewaysAdded","GATEWAYS","gateway","NAME","getLoadPromise","_amazon","_amazon2","_prebid","_prebid2","_gatewaysPromises","cmd","all","catch","reason","30","_loadLibrary","REASONS","ERROR_LOAD_LIBRARY","_setConfig","apstag","ERROR_INIT_CONFIG","_fetchBid","bidConfig","slots","fetchBids","bids","TIMEOUT_REACHED_FETCH_BIDS","targetingKeys","_adserverRequestResponse","TIMEOUT_REACHED_GLOBAL","_ref","hbAmazon","_ref2","setDisplayBids","31","apstagGlobalName","queue","r","_Q","32","hbPrebid","biddersConfig","pbjsConfig","debug","enableSendAllBids","priceGranularity","consentManagement","cmpApi","allowAuctionWithoutConsent","pbjs","bidderSettings","_fetchBiddersSettings","setConfig","getConfig","adUnits","EMPTY_ADUNITS","que","addAdUnits","requestBids","bidsBackHandler","biddersResponse","getAdserverTargeting","bidderName","bidCpmAdjustment","bidCpm","bid","percent","bidderCode","setTargetingForGPTAsync","33","_processPrebidConfig","newConfig","biddersDisabled","headerBidding","disabled","map","current","trim","newBids","code","bidder","_processAmazonConfig","slotID","slotName","_getAmazonSlotName","getParameterByName","paramName","regExp","results","file","_files","rel","gads","useSSL","node","protocol","parentNode","insertBefore","func","args","argument","pos","endsWith","str","suffix","startsWith","needle","7","destination","source","79","8","description","main","scripts","test","tdd","start","build","prebid","contributors","license","devDependencies","babel-core","babel-eslint","babel-loader","babel-plugin-syntax-dynamic-import","babel-polyfill","babel-preset-env","chai","chalk","clean-webpack-plugin","copy-webpack-plugin","css-loader","eslint","eslint-config-airbnb-base","eslint-plugin-import","extract-text-webpack-plugin","file-loader","html-loader","html-webpack-plugin","json-loader","mocha","mocha-loader","mocha-phantomjs","mocha-webpack","nyc","style-loader","webpack","webpack-dev-server","webpack-merge","webpack-shell-plugin","dependencies","jquery-inview","js-cookie","prebid.js","rijndael-js","rsvp","9","_getTipoDispositivo","min","screenWidth","esResponsive","parseInt","innerWidth","resolucionMaxima","resolucionMinima","toLowerCase","tipoDispositivo","_getMedio","medio","_getTipoPagina","_getTipoPaginaABC","_getTipoPaginaMujerhoy","_getTipoPaginaPortalesLocales","oldVideosRegExp","videosRegExp","oldGaleryRegExp2","oldGaleryRegExp","galeryRegExp","graphicRegExp","oldNewsRegExp","newsRegExp","pathname","videoRegExp","oldVideoRegExp","videoBlogRegExp","galeryBlogRegExp","newsBlogRegExp","newsRecipesRegExp","isNews","hostname","oldGraphicRegExp","videoChatRegExp","_getDefineSlotParam","_getServerType","configServerType","_isResponsiveMedia","isResponsive","_getResponsiveParam","isResponsiveMedia","_createResponsive","minWidth","maxWidth","googleSize","dispositivos","device","sort","pair1","pair2","_getEdition","editions","_capturadorGetPreviewData","legacyPreview","ajax","success","_getValueUser","suscriptor","trial","registrado","anonimo","_getDelayed","delayedPositions","filter","_getPrioritized","_decriptUrl","Rijndael","mcrypt","preparedCode","_prevUnencryptedCode","_prevEncryptedCode","atob","charCodeAt","decrypt","_getDefineSlotTargetings","medioTargetings","pageTargetings","targetings","defineSlotTargetings","_dynamicId","ConfigManager","configPosition","configSchedules","currentDate","forceActivePosition","desactivadoen","round","Date","some","beginDate","endDate","programacion","fecha_in","fecha_fin","adsId","id","offset","oas","attr","oasSitepage","legacyAdUnit","macroEdition","edition","configSize","legacyCode","prebidDisabledBidders","enableAmazonAds","priorizadas","retrasadas","decodeURI","bind","unixTime","excepciones","match","thereAreDelayedPositions"],"mappings":"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","file":"vam.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AdsManager\"] = factory();\n\telse\n\t\troot[\"AdsManager\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"AdsManager\"] = factory();\n\telse\n\t\troot[\"AdsManager\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonpAdsManager\"];\n/******/ \twindow[\"webpackJsonpAdsManager\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId]) {\n/******/ \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n/******/ \t\t\t}\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n/******/ \t\twhile(resolves.length) {\n/******/ \t\t\tresolves.shift()();\n/******/ \t\t}\n/******/\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// objects to store loaded and loading chunks\n/******/ \tvar installedChunks = {\n/******/ \t\t4: 0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId) {\n/******/ \t\tvar installedChunkData = installedChunks[chunkId];\n/******/ \t\tif(installedChunkData === 0) {\n/******/ \t\t\treturn new Promise(function(resolve) { resolve(); });\n/******/ \t\t}\n/******/\n/******/ \t\t// a Promise means \"currently loading\".\n/******/ \t\tif(installedChunkData) {\n/******/ \t\t\treturn installedChunkData[2];\n/******/ \t\t}\n/******/\n/******/ \t\t// setup Promise in chunk cache\n/******/ \t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n/******/ \t\t});\n/******/ \t\tinstalledChunkData[2] = promise;\n/******/\n/******/ \t\t// start chunk loading\n/******/ \t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\tvar script = document.createElement('script');\n/******/ \t\tscript.type = \"text/javascript\";\n/******/ \t\tscript.charset = 'utf-8';\n/******/ \t\tscript.async = true;\n/******/ \t\tscript.timeout = 120000;\n/******/\n/******/ \t\tif (__webpack_require__.nc) {\n/******/ \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t}\n/******/ \t\tscript.src = __webpack_require__.p + \"\" + ({\"0\":\"rijndael-js\"}[chunkId]||chunkId) + \".js\";\n/******/ \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n/******/ \t\tscript.onerror = script.onload = onScriptComplete;\n/******/ \t\tfunction onScriptComplete() {\n/******/ \t\t\t// avoid mem leaks in IE.\n/******/ \t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\tclearTimeout(timeout);\n/******/ \t\t\tvar chunk = installedChunks[chunkId];\n/******/ \t\t\tif(chunk !== 0) {\n/******/ \t\t\t\tif(chunk) {\n/******/ \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = undefined;\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\thead.appendChild(script);\n/******/\n/******/ \t\treturn promise;\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"//static.vocento.com/vam/3.11.0/\";\n/******/\n/******/ \t// on error function for async loading\n/******/ \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 79);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar NAMESPACE = exports.NAMESPACE = 'vocento';\nvar PROMISES_PROPERTY = exports.PROMISES_PROPERTY = '__PROMISES__';\nvar DEFAULT_TIMEOUT = exports.DEFAULT_TIMEOUT = 2000;\nvar VOCUSER_COOKIE = exports.VOCUSER_COOKIE = 'voc_uid';\nvar PAYWALL_COOKIE = exports.PAYWALL_COOKIE = 'voc_paywall';\nvar SHOW_LOGS = exports.SHOW_LOGS = document.location.search.indexOf('vam_debug=1') > -1 || document.location.search.indexOf('gdp_debug=1') > -1;\nvar DEFAULT_LOG_TEMPLATE = exports.DEFAULT_LOG_TEMPLATE = '[Ads Manager]';\nvar CONFIG_NAMESPACE = exports.CONFIG_NAMESPACE = 'vocento.config.vam';\nvar EDITIONS_NAMESPACE = exports.EDITIONS_NAMESPACE = 'vocento.site.editions';\nvar GPT_ID_VOCENTO = exports.GPT_ID_VOCENTO = '4900';\nvar GPT_READY = exports.GPT_READY = 'vam:gpt:ready';\nvar GPT_TIMEOUT = exports.GPT_TIMEOUT = 2000;\nvar TIMEOUT_POSICIONES_ESTANDAR = exports.TIMEOUT_POSICIONES_ESTANDAR = 3000;\nvar ALTOS_MINIMOS_DISPOSITIVOS = exports.ALTOS_MINIMOS_DISPOSITIVOS = {\n mobile: 0,\n tablet: 200,\n desktop: 300\n};\nvar POSITION_FLUID = exports.POSITION_FLUID = \"'fluid'\";\nvar SLOT_RENDERED = exports.SLOT_RENDERED = 'vam:slotrendered';\nvar SLOT_EMPTY = exports.SLOT_EMPTY = 'vam:isempty';\nvar SLOT_VIEWABLE = exports.SLOT_VIEWABLE = 'vam:viewable';\nvar SLOT_INACTIVE = exports.SLOT_INACTIVE = 'vam:inactive';\nvar DEFAULTS = exports.DEFAULTS = {\n hideNoAds: true,\n refresh: false,\n responsive: false\n};\nvar CAPTURADOR_WS = exports.CAPTURADOR_WS = '//publi.cmvocento.com/capturador/preview';\nvar MCRYPT_KEY = exports.MCRYPT_KEY = 'acsNdl09acs72AEdacsNdl09acs72AEd';\nvar VAM_CSS_URL = exports.VAM_CSS_URL = '//netssl.vocento.com/cmvocento/css/vam.css';\nvar JSON_GDP2_0 = exports.JSON_GDP2_0 = 0;\nvar JSON_GDP2_1 = exports.JSON_GDP2_1 = 1;\nvar JSON_GDP2_2 = exports.JSON_GDP2_2 = 2;\nvar NOMBRE_FORMATO_JSON = exports.NOMBRE_FORMATO_JSON = ['GDP2.0', 'GDP2.1', 'GDP2.2+'];\nvar GPT_URL = exports.GPT_URL = 'www.googletagservices.com/tag/js/gpt.js';\n\n/* header bidding */\nvar HEADER_BIDDING_READY = exports.HEADER_BIDDING_READY = 'vam:headerbidding:ready';\nvar PREBID_URL = exports.PREBID_URL = \"//static.vocento.com/vam/3.11.0/\" + 'prebid.js';\nvar DEFAULT_PREBID_LOAD_TIMEOUT = exports.DEFAULT_PREBID_LOAD_TIMEOUT = 7000;\nvar AMAZON_URL = exports.AMAZON_URL = '//c.amazon-adsystem.com/aax2/apstag.js';\nvar DEFAULT_AMAZON_LOAD_TIMEOUT = exports.DEFAULT_AMAZON_LOAD_TIMEOUT = 7000;\nvar AMAZON_CONFIG = exports.AMAZON_CONFIG = {\n pubID: '3470', // Amazon publisher ID\n adServer: 'googletag' // AdServer type that contains apstag line-items\n};\n\n/* legacy */\nvar OLD_PREFIX = exports.OLD_PREFIX = 'publi_';\nvar NEW_SUFFIX = exports.NEW_SUFFIX = '-id';\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.showLog = showLog;\nexports.showWarn = showWarn;\nexports.showError = showError;\n\nvar _constants = __webpack_require__(0);\n\nfunction showLog() {\n var _console;\n\n _constants.SHOW_LOGS && (_console = console).log.apply(_console, [_constants.DEFAULT_LOG_TEMPLATE].concat(Array.prototype.slice.call(arguments)));\n}\n\nfunction showWarn() {\n var _console2;\n\n _constants.SHOW_LOGS && (_console2 = console).warn.apply(_console2, [_constants.DEFAULT_LOG_TEMPLATE].concat(Array.prototype.slice.call(arguments)));\n}\n\nfunction showError() {\n var _console3;\n\n _constants.SHOW_LOGS && (_console3 = console).error.apply(_console3, [_constants.DEFAULT_LOG_TEMPLATE].concat(Array.prototype.slice.call(arguments)));\n}\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _evented = __webpack_require__(24);\n\nvar _evented2 = _interopRequireDefault(_evented);\n\nvar _deferred = __webpack_require__(25);\n\nvar _deferred2 = _interopRequireDefault(_deferred);\n\nvar _user = __webpack_require__(27);\n\nvar _user2 = _interopRequireDefault(_user);\n\nvar _mixin = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _scripts = {},\n _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar Application = {\n load: function load(url) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var promise, script, src, key;\n\n src = url;\n key = url.split('?').shift();\n if (_hasOwnProperty.call(_scripts, key)) {\n return _scripts[key];\n }\n\n script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = src;\n script.async = true;\n options.text && (script.text = options.text);\n\n promise = new window.RSVP.Promise(function (resolve, reject) {\n script.onload = function () {\n return resolve(script);\n };\n script.onerror = reject;\n\n document.head.appendChild(script);\n });\n\n _scripts[key] = promise;\n return promise;\n }\n};\n\n(0, _mixin.extend)(Application, _evented2.default);\n(0, _mixin.extend)(Application, _deferred2.default);\n(0, _mixin.extend)(Application, _user2.default);\n\nexports.default = Application;\n\n/***/ }),\n\n/***/ 21:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.VERSION = undefined;\n\n__webpack_require__(22);\n\n__webpack_require__(23);\n\nvar _package = __webpack_require__(8);\n\nvar _package2 = _interopRequireDefault(_package);\n\nvar _application = __webpack_require__(2);\n\nvar _application2 = _interopRequireDefault(_application);\n\nvar _advertising = __webpack_require__(28);\n\nvar _advertising2 = _interopRequireDefault(_advertising);\n\nvar _configManager = __webpack_require__(9);\n\nvar _configManager2 = _interopRequireDefault(_configManager);\n\nvar _utils = __webpack_require__(4);\n\nvar _constants = __webpack_require__(0);\n\nvar _logger = __webpack_require__(1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _window = window,\n $ = _window.$;\n\nvar _initialized = false;\n\n_legacyInit();\n$(document).ready(function () {\n var config = _application2.default.lookup(_constants.CONFIG_NAMESPACE);\n\n config = !(0, _utils.isEmpty)(config) ? config : {\n media: window.configGDPMedio,\n options: window.configGDP\n };\n _init(config.media, config.options);\n});\n\nvar VERSION = exports.VERSION = _package2.default.version;\n\n/* Private */\n\n/**\n * Build legacy object\n * @deprecated\n */\nfunction _legacyInit() {\n window.Vocento = window.Vocento || {};\n window.Vocento.Publicidad = function () {};\n window.Vocento.Publicidad.prototype = {\n init: function init(jQuery, configGDPMedio, configGDP) {\n _init(configGDPMedio, configGDP);\n },\n printAds: function printAds(datos) {\n return _advertising2.default.printAds(datos);\n },\n getOasSitepage: function getOasSitepage() {\n return _advertising2.default.getOasSitepage.apply(_advertising2.default, arguments);\n },\n getSizesGoogle: function getSizesGoogle() {\n return _advertising2.default.getSizesGoogle.apply(_advertising2.default, arguments);\n },\n getValueUser: function getValueUser() {\n return _advertising2.default.getValueUser.apply(_advertising2.default, arguments);\n }\n };\n}\n\nfunction _init(configGDPMedio, configGDP) {\n var voontoApp = 'Voonto' in window && 'getInstance' in window.Voonto ? window.Voonto.getInstance() : undefined;\n var configManager;\n\n if (_initialized) {\n return;\n }\n\n if (!configGDPMedio || !configGDP) {\n throw Error('[Ads Manager] missing configuration');\n }\n\n _initialized = true;\n // promise to wait advertising user consent\n voontoApp.when('consent:advertising').then(function (result) {\n (0, _logger.showLog)('Advertising Consent promise has been resolved with result: ', result);\n window.customcmd.push(function () {\n window.googletag.pubads().setRequestNonPersonalizedAds(result ? 0 : 1);\n });\n });\n\n voontoApp.on('consent:updated:advertising', function (event, result) {\n (0, _logger.showLog)('Advertising Consent has been updated with result: ', result);\n window.customcmd.push(function () {\n window.googletag.pubads().setRequestNonPersonalizedAds(result ? 0 : 1);\n });\n });\n\n configManager = new _configManager2.default(configGDPMedio, configGDP);\n _advertising2.default.init(configManager, false);\n _printAds();\n\n if (voontoApp) {\n voontoApp.on('voonto:reload', _reload);\n voontoApp.on('vam:refresh', _refresh);\n }\n _application2.default.on('voonto:reload', _reload);\n _application2.default.on('vam:refresh', _refresh);\n}\n\n/**\n * Print Ads configured inside context or whole page\n * Config must be passed to Advertising.init before calling printAds()\n * @param {null|jQueryObject} context$\n */\nfunction _printAds(context$) {\n $('[data-voc-vam]', context$).each(function () {\n _advertising2.default.printAds($(this));\n });\n}\n\n/**\n * Reload ads inside given context with given config\n * @param {jQueryEvent} event\n * @param {null|jQueryObject} context$\n */\nfunction _reload(event, context$) {\n var config = context$.data('voc-vam-configgdp') || _application2.default.lookup(_constants.CONFIG_NAMESPACE);\n var forcedOas = context$.data('voc-vam-force-oas') || '';\n var configManager;\n\n config.options.OAS = forcedOas.length > 0 ? _forceNewOas(config.options.OAS, forcedOas) : config.options.OAS;\n configManager = new _configManager2.default(config.media, config.options);\n (0, _logger.showLog)('Reload event has been invoked. Config value: ', config);\n _advertising2.default.init(configManager, true, context$);\n _printAds(context$);\n}\n\n/**\n * Refresh the ads position received on 'data' parameter\n * @param {string|object} data\n */\nfunction _refresh(event, data) {\n var params = typeof data === 'string' ? JSON.parse(data) : data;\n\n _advertising2.default.printAds(params);\n}\n\nfunction _forceNewOas(config, newOas) {\n if (config.adunit) {\n config.adunit = config.adunit.replace(new RegExp('portada$', 'g'), newOas.toString());\n }\n config.desktop.portada = config.desktop.portada.replace(new RegExp('portada$', 'g'), newOas.toString());\n config.mobile.portada = config.mobile.portada.replace(new RegExp('portada$', 'g'), newOas.toString());\n (0, _logger.showLog)('New OAS has been set, using value \"' + newOas + '\"');\n\n return config;\n}\n\n/***/ }),\n\n/***/ 22:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _constants = __webpack_require__(0);\n\n// NOTE: jQuery checking\nif (!('$' in window) || typeof window.$ !== 'function') {\n throw Error(_constants.DEFAULT_LOG_TEMPLATE + ' missing jQuery library on page');\n}\n\n// NOTE: Cookies checking\nif (!('Cookies' in window) || typeof window.Cookies !== 'function') {\n throw Error(_constants.DEFAULT_LOG_TEMPLATE + ' missing Cookies library on page');\n}\n\n// NOTE: RSVP checking\nif (!('RSVP' in window) || _typeof(window.RSVP) !== 'object') {\n throw Error(_constants.DEFAULT_LOG_TEMPLATE + ' missing RSVP library on page');\n}\n\n// NOTE: InView jQuery Plugin checking\nif (!('event' in window.$) || !('special' in window.$.event) || !('inview' in window.$.event.special) || _typeof(window.$.event.special.inview) !== 'object') {\n throw Error(_constants.DEFAULT_LOG_TEMPLATE + ' missing InView jQuery plugin on page');\n}\n\n/***/ }),\n\n/***/ 23:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _application = __webpack_require__(2);\n\nvar _application2 = _interopRequireDefault(_application);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar UserTypes = Object.freeze({\n ANONYMOUS: 'anonimo'\n}),\n Genders = Object.freeze({\n FEM: 'f',\n MAS: 'm'\n}),\n VOCUSER_READY = 'vocuser:ready',\n VOCUSER_DATA = 'vocuser:userdata';\n\n$(document).ready(function () {\n _application2.default.when(VOCUSER_READY).then(_onVocUserReady);\n $('body').on('vocento.gigya.products.onReady', function (event, gigyaux) {\n var gigyaUX;\n\n gigyaUX = gigyaux || window.gigyaUX;\n if (gigyaUX) {\n _onVocUserReady(gigyaUX);\n }\n });\n});\n\n/* Private */\n\nfunction _ord() {\n return Math.random() * 10000000000000;\n}\n\nfunction _onVocUserReady(gigyaux) {\n if (gigyaux.getUserType() === UserTypes.ANONYMOUS) {\n $('head').append('');\n } else {\n $('head').append('');\n if (typeof Voonto !== 'undefined') {\n _application2.default.when(VOCUSER_DATA).then(function (userData) {\n var gender, age;\n\n // NOTE: vocUserData promise object\n if (userData.responseGetUserInfo) {\n gender = userData.responseGetUserInfo.user && userData.responseGetUserInfo.user.gender ? userData.responseGetUserInfo.user.gender : null;\n age = userData.responseGetUserInfo.user && userData.responseGetUserInfo.user.age ? userData.responseGetUserInfo.user.age : null;\n }\n _onVocUserData(gender, age);\n });\n } else {\n $('body').on('vocento.gigya.accounts.onDataReady', function (event) {\n var gender, age;\n\n // NOTE: vocUserData promise object\n if (event.gigya_event) {\n gender = event.gigya_event.profile && event.gigya_event.profile.gender ? event.gigya_event.profile.gender : null;\n age = event.gigya_event.profile && event.gigya_event.profile.age ? event.gigya_event.profile.age : null;\n }\n _onVocUserData(gender, age);\n });\n }\n }\n}\n\nfunction _onVocUserData(gender, age) {\n switch (gender) {\n case Genders.FEM:\n $('head').append('');\n break;\n case Genders.MAS:\n $('head').append('');\n break;\n default:\n }\n\n switch (true) {\n case age !== '' && age <= 17:\n $('head').append('');\n break;\n case age >= 18 && age <= 24:\n $('head').append('');\n break;\n case age >= 25 && age <= 34:\n $('head').append('');\n break;\n case age >= 35 && age <= 44:\n $('head').append('');\n break;\n case age >= 45 && age <= 54:\n $('head').append('');\n break;\n case age !== '' && age < 54:\n $('head').append('');\n break;\n default:\n }\n}\n\n/***/ }),\n\n/***/ 24:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _logger = __webpack_require__(1);\n\nvar Evented = Object.preventExtensions({\n on: function on() {\n var _window$$;\n\n (_window$$ = window.$(this)).on.apply(_window$$, arguments);\n },\n one: function one() {\n var _window$$2;\n\n (_window$$2 = window.$(this)).one.apply(_window$$2, arguments);\n },\n off: function off() {\n var _window$$3;\n\n (_window$$3 = window.$(this)).off.apply(_window$$3, arguments);\n },\n trigger: function trigger() {\n var _window$$4;\n\n _logger.showLog.apply(undefined, ['Evented::trigger'].concat(Array.prototype.slice.call(arguments)));\n (_window$$4 = window.$(this)).trigger.apply(_window$$4, arguments);\n }\n});\n\nexports.default = Evented;\n\n/***/ }),\n\n/***/ 25:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _globalized = __webpack_require__(26);\n\nvar _globalized2 = _interopRequireDefault(_globalized);\n\nvar _mixin = __webpack_require__(7);\n\nvar _constants = __webpack_require__(0);\n\nvar _logger = __webpack_require__(1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _defers = {},\n _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar Deferred = {\n whenUntil: function whenUntil(promiseNS) {\n var _this = this;\n\n var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.DEFAULT_TIMEOUT;\n\n (0, _logger.showLog)('[Deferred] whenUntil', { promiseNS: promiseNS, time: time });\n return new window.RSVP.Promise(function (resolve, reject) {\n setTimeout(reject, time);\n _this.when(promiseNS).then(resolve);\n });\n },\n when: function when(promiseNS) {\n var owner, name, global;\n\n (0, _logger.showLog)('[Deferred] when', promiseNS);\n\n if (!promiseNS) {\n throw Error(_constants.DEFAULT_LOG_TEMPLATE + ' [Deferred] At least 1 argument needed. 0 passed.');\n }\n\n var _promiseNS$split = promiseNS.split(':');\n\n var _promiseNS$split2 = _slicedToArray(_promiseNS$split, 2);\n\n owner = _promiseNS$split2[0];\n name = _promiseNS$split2[1];\n\n if (!owner || !name) {\n throw Error(_constants.DEFAULT_LOG_TEMPLATE + ' [Deferred] Illegal promise namespace name. Expected \"owner:name\".');\n }\n\n if (_hasOwnProperty.call(_defers, promiseNS)) {\n return _defers[promiseNS].promise;\n }\n\n global = this.createGlobal(_constants.NAMESPACE + '.' + owner + '.' + _constants.PROMISES_PROPERTY);\n global[name] = window.RSVP.defer();\n _defers[promiseNS] = global[name];\n\n return global[name].promise;\n },\n promised: function promised(promiseNS, value) {\n var owner, name, global;\n\n (0, _logger.showLog)('[Deferred] promised', { promiseNS: promiseNS, value: value });\n\n if (!promiseNS) {\n throw Error(_constants.DEFAULT_LOG_TEMPLATE + ' [Deferred] At least 1 argument needed. 0 passed.');\n }\n\n var _promiseNS$split3 = promiseNS.split(':');\n\n var _promiseNS$split4 = _slicedToArray(_promiseNS$split3, 2);\n\n owner = _promiseNS$split4[0];\n name = _promiseNS$split4[1];\n\n if (!owner || !name) {\n throw Error(_constants.DEFAULT_LOG_TEMPLATE + ' [Deferred] Illegal promise namespace name. Expected \"owner:name\".');\n }\n\n if (_hasOwnProperty.call(_defers, promiseNS)) {\n _defers[promiseNS].resolve(value);\n return this;\n }\n\n global = this.createGlobal(_constants.NAMESPACE + '.' + owner + '.' + _constants.PROMISES_PROPERTY);\n global[name] = window.RSVP.defer();\n global[name].resolve(value);\n _defers[promiseNS] = global[name];\n\n return this;\n }\n};\n\n(0, _mixin.extend)(Deferred, _globalized2.default);\n\nexports.default = Deferred;\n\n/***/ }),\n\n/***/ 26:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _constants = __webpack_require__(0);\n\nvar Globalized = {\n createGlobal: function createGlobal(namespace) {\n var nso = window;\n\n if (!namespace) {\n return undefined;\n }\n\n namespace.split('.').forEach(function (prop) {\n nso[prop] = nso[prop] || {};\n nso = nso[prop];\n });\n\n return nso;\n },\n lookup: function lookup() {\n var namespace = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _constants.NAMESPACE;\n var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window;\n\n return namespace.split('.').reduce(function (that, o) {\n return that && o in that ? that[o] : {};\n }, root);\n }\n};\n\nexports.default = Globalized;\n\n/***/ }),\n\n/***/ 27:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _constants = __webpack_require__(0);\n\nvar _window = window,\n Cookies = _window.Cookies,\n UserType = Object.freeze({\n ANONYMOUS: 'anonimo',\n REGISTERED: 'registrado',\n SUBSCRIBER: 'suscriptor',\n TRIAL: 'trial'\n});\n\n\nvar User = {\n getUserType: function getUserType() {\n var userType, paywall, pwUserType, vocUid, cookie;\n\n vocUid = decodeURIComponent(Cookies.get(_constants.VOCUSER_COOKIE));\n cookie = vocUid === 'undefined' ? {} : _jsonParse(vocUid);\n userType = UserType.ANONYMOUS; // <'anonimo' | 'registrado' | 'trial' | 'suscriptor'>\n paywall = Cookies.get(_constants.PAYWALL_COOKIE);\n if (paywall) {\n pwUserType = paywall.split('|').pop();\n }\n\n if (pwUserType) {\n userType = pwUserType;\n } else if (cookie.uid) {\n userType = UserType.REGISTERED;\n }\n\n return userType;\n }\n};\n\nexports.default = User;\n\n/* Private */\n\nfunction _jsonParse(vocUid) {\n var result;\n\n try {\n result = JSON.parse(vocUid);\n } catch (e1) {\n // NOTE: fix issue https://agil.vocento.com/browse/MEC-2575\n vocUid = vocUid.replace(/\\+/g, '');\n try {\n result = JSON.parse(vocUid);\n } catch (e2) {\n result = {};\n }\n }\n\n return result;\n}\n\n/***/ }),\n\n/***/ 28:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _package = __webpack_require__(8);\n\nvar _providerManager = __webpack_require__(29);\n\nvar _providerManager2 = _interopRequireDefault(_providerManager);\n\nvar _application = __webpack_require__(2);\n\nvar _application2 = _interopRequireDefault(_application);\n\nvar _configManager4 = __webpack_require__(9);\n\nvar _configManager5 = _interopRequireDefault(_configManager4);\n\nvar _utils = __webpack_require__(4);\n\nvar _logger = __webpack_require__(1);\n\nvar _constants = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _configManager = null,\n _standardDelayed = [],\n _gptInitialized = false,\n _insertedPositions = {},\n _notDisplayedSlots = [],\n _completadasPriorizadas = false,\n _reload = false;\n\nvar Advertising = function () {\n function Advertising() {\n _classCallCheck(this, Advertising);\n }\n\n _createClass(Advertising, null, [{\n key: 'init',\n\n /**\n * Function that initialize the advertising\n * @param {object} app - Evented object\n * @param {object} configGDPMedio\n * @param {object} configGDP\n * @param {context} context$\n */\n value: function init(configManager, reload, context$) {\n var kruxSegments, kruxUser;\n\n _configManager = null;\n _standardDelayed = [];\n _gptInitialized = false;\n _insertedPositions = {};\n _notDisplayedSlots = [];\n _completadasPriorizadas = false;\n _reload = reload;\n _configManager = configManager;\n _configManager.context$ = context$;\n\n // Detectamos si se fuerza via URL alguna configuracion\n _configManager.checkConfigFromURL();\n\n if (!_configManager.configGDPMedio.activo) {\n (0, _logger.showWarn)('Advertising:init:The advertising has been deactivated in the configuration of the medium!');\n return;\n }\n (0, _logger.showLog)('Advertising:init:deviceType: ' + _configManager.deviceType + ' , pageType: ' + _configManager.pageType + ' , (Version ' + _package.version + ')');\n\n if (!_reload) {\n _configManager.processConfig();\n }\n\n // Load HB and GPT libraries soon as posible for not penalize the ad visualization\n if (!_reload) {\n (0, _logger.showLog)('init:HeaderBidding init');\n _providerManager2.default.init(_configManager.configGDPMedio);\n (0, _utils.cargaLibreriaGPT)();\n }\n\n // Inicializacion de la libreria GPT\n window.customcmd.push(function () {\n /**\n * Setting nonPersonalizedAds by default to 1.\n * if promise is resolved this value will be updated with\n * value received in the promise.\n * */\n if (!_reload) {\n window.googletag.pubads().setRequestNonPersonalizedAds(1);\n }\n window.googletag.pubads().collapseEmptyDivs();\n kruxSegments = _application2.default.lookup('Krux.vocento.segments');\n kruxUser = _application2.default.lookup('Krux.vocento.user');\n /**\n * Ambos namespace se setean unicamente en antiguo, en lo nuevo no existe.\n */\n if (_configManager.configGDPMedio.enableKrux && ['object', 'undefined'].indexOf(typeof kruxSegments === 'undefined' ? 'undefined' : _typeof(kruxSegments)) < 0 && ['object', 'undefined'].indexOf(typeof kruxUser === 'undefined' ? 'undefined' : _typeof(kruxUser)) < 0) {\n window.googletag.pubads().setTargeting('ksg', window.Krux.vocento.segments);\n window.googletag.pubads().setTargeting('kuid', window.Krux.vocento.user);\n }\n _configManager.configGDPMedio.singleRequest && window.googletag.pubads().enableSingleRequest();\n _configManager.configGDPMedio.syncRendering && window.googletag.pubads().enableSyncRendering();\n window.googletag.enableServices();\n\n // Disparamos el evento de GPT inicializada\n (0, _logger.showLog)('En constructor. Disparamos evento ' + _constants.GPT_READY);\n _application2.default.trigger(_constants.GPT_READY);\n _gptInitialized = true;\n });\n\n /* NOTE: Disparamos el evento de GPT inicializado tras N segundos para liberar posibles\n recursos que esten bloqueados */\n setTimeout(function () {\n if (!_gptInitialized) {\n (0, _logger.showWarn)('Advertising:init:Trigger event ' + _constants.GPT_READY + ' after ' + _constants.GPT_TIMEOUT);\n _application2.default.trigger(_constants.GPT_READY);\n }\n }, _constants.GPT_TIMEOUT);\n\n // Tratamiento de excepciones\n _configManager.checkExceptions();\n\n // Gestion de eventos de pintado de publicidad\n window.customcmd.push(function () {\n /**\n * Solo se añaden los eventListeners de slotRenderEnded e impressionViewable\n * en la primera carga. De esta forma optimizamos el rendimiento y solo se lanzan\n * los eventos necesarios y no se encolan.\n */\n if (!_reload) {\n // Gestion de evento slotRenderEnded\n window.googletag.pubads().addEventListener('slotRenderEnded', function (ev) {\n var divId, position, container$, paramsSlot, index, found;\n\n divId = ev.slot.getSlotElementId();\n position = ev.slot.getTargeting('pos');\n container$ = $('#' + divId);\n paramsSlot = container$.data('params');\n index = -1;\n\n if (ev.isEmpty) {\n (0, _logger.showLog)('En constructor. slotRenderEnded. La posicion ' + position + ' isEmpty');\n container$.trigger(_constants.SLOT_EMPTY);\n if (_configManager.configGDPMedio.infoSlot) _infoSlotRender(paramsSlot, false);\n } else {\n (0, _logger.showLog)('En constructor. slotRenderEnded. La posicion ' + position + ' ha sido pintada en el DIV ' + divId);\n container$.trigger(_constants.SLOT_RENDERED);\n if (_configManager.configGDPMedio.infoSlot) _infoSlotRender(paramsSlot, true);\n }\n\n // Añadimos el data que nos informa de que la posicion ha sido pintada.\n container$.get(0).dataset.vocVamDisplayed = true;\n\n // Comprobacion si tiene eventos post_callback o post_event\n if (paramsSlot) {\n if (paramsSlot.post_callback) {\n (0, _logger.showLog)('En constructor. slotRenderEnded. La posicion ' + position + ' tiene el siguiente postCallback: ' + paramsSlot.post_callback);\n paramsSlot.post_callback();\n }\n\n if (paramsSlot.post_event) {\n (0, _logger.showLog)('En constructor. slotRenderEnded. La posicion ' + position + ' tiene el siguiente postEvent: ' + paramsSlot.post_event);\n _application2.default.trigger(paramsSlot.post_event);\n }\n }\n\n // Quitamos la posicion de la lista de posiciones priorizadas\n _configManager.removePrioritizedPosition();\n\n // Quitamos la posicion de la lista de posiciones estandar encoladas\n if (_configManager.thereArePrioritizedPositions() && _standardDelayed.length && !_configManager.isPrioritized(paramsSlot)) {\n found = _standardDelayed.find(function (parameters) {\n index++;\n return parameters.position === position[0];\n });\n if (found) {\n _standardDelayed.splice(index, 1);\n }\n }\n\n // Si esta era la ultima priorizada pintamos las estandar\n if (!_completadasPriorizadas && !_configManager.thereArePrioritizedPositions()) {\n _completadasPriorizadas = true;\n _displayStandarQueued();\n }\n });\n\n // Gestion de evento impressionViewable\n window.googletag.pubads().addEventListener('impressionViewable', function (ev) {\n var divId = ev.slot.getSlotElementId();\n var position = ev.slot.getTargeting('pos');\n var container$ = $('#' + divId);\n\n (0, _logger.showLog)('En constructor. impressionViewable. La posicion ' + position + ' es visible');\n container$.trigger(_constants.SLOT_VIEWABLE);\n });\n }\n });\n\n /* NOTE: Si hay posiciones priorizadas las pintamos e invocamos el pintado de las estandar\n una vez pintadas estas */\n if (_configManager.thereArePrioritizedPositions()) {\n _displayPrioritized();\n\n /* NOTE: Si han transcurrido N segundos y todavia no se han lanzado las posiciones\n estandar las forzamos */\n setTimeout(function () {\n if (_standardDelayed.length) {\n (0, _logger.showWarn)('Advertising:init:Display queued positions after ' + _constants.TIMEOUT_POSICIONES_ESTANDAR);\n _completadasPriorizadas = true;\n _displayStandarQueued();\n }\n }, _constants.TIMEOUT_POSICIONES_ESTANDAR);\n }\n }\n\n /**\n * Muestra la Advertising.\n * @param {Object} datos - Puede ser un DIV obtenido con jQuery con los atributos de\n * configuracion, o bien un objeto JSON con la configuracion a aplicar\n *\n * Descripcion de parametros que puede contener el objeto JSON:\n * position => string. Posicion publicitaria a mostrar\n * id => string. ID del elemento HTML en el que se muestra\n * serverType => string. Servidor de publicidad a usar\n * hideNoAds => boolean. Oculta el elemento HTML si el adserver no ha devuelto publi\n * outOfPage => boolean. Determina si el slot de publicidad es outOfPage o no. Por\n * defecto vale false\n * defineSlot => boolean. Indica si hay que definir o no el slot\n * refresh => boolean. Se pide la posicion de publicidad aunque ya se hubiera mostrado\n * antes. Por defecto false\n * responsive => Array. Indicamos si una publi se debe pintar solo en una(s)\n * determinada(s) resolucion(es)\n * pre_callback => function. Función javascript a la que invocar previamente\n * pre_event => string. evento de precondicion\n * post_callback => function. Función javascript a la que invocar una vez disparado\n * el slotRendered\n * post_event => string. evento a disparar una vez disparado evento de slotRendered\n * oas => string. Si se rellena es el OAS a utilizar en la posicion de publicidad\n *\n * Objeto Responsive\n * El primer par de valores indica la resolucion, y en el segundo los tamanos de la posicion de\n * publi a servir, el cual puede definirse como sigue:\n * - vacio: []\n * - single array: [ancho, alto]\n * - multi array: [ [ancho1, alto1], [ancho2, alto2], ... ]\n * - string: En cuyo caso usa la funcion ads.getSizesGoogle para obtener el array\n *\n * Ejemplo llamada:\n * ads.printAds({'position': 'robapaginas', 'id': 'roba2', 'responsive': [\n * [[0, 0], []] // Small Mobile\n * ,[[350, 200], [300,150]] // Mobile\n * ,[[750, 200], 'robapaginas'] // Tablet\n * ,[[1050, 300], [[300,150],[300,250]]] // Desktop\n * ]});\n */\n\n }, {\n key: 'printAds',\n value: function printAds(datos) {\n var params, position, idAds, prioritized, delayed;\n\n (0, _logger.showLog)('Advertising:printAds', datos);\n if (!_configManager.configGDPMedio.activo) {\n (0, _logger.showWarn)('Advertising:printAds:Ads was be disabled in Media Config');\n return;\n }\n\n params = _configManager.normalizaParams(datos);\n if (params === null) {\n (0, _logger.showWarn)('Advertising:printAds:Empty params', datos);\n return;\n }\n\n position = params.position;\n idAds = _configManager.getIdDiv(params);\n if (!_configManager.isActive(params)) {\n if ($('#' + idAds).length && params.hideNoAds) {\n (0, _logger.showWarn)('Advertising:printAds:Hiding ADs DIV container if hideNoAds is anabled', params);\n $('#' + idAds).hide();\n }\n (0, _logger.showWarn)('Advertising:printAds:Position ' + position + ' is not active', params);\n return;\n }\n\n if (!$('#' + idAds).length) {\n (0, _logger.showWarn)('Advertising:printAds:DIV with ID ' + idAds + ' does not exist', params);\n return;\n }\n\n if (params.serverType === 'google') {\n /* NOTE: Si estamos en modo preview comprobamos si esta posicion hay que traerla desde el\n SW del capturador */\n if (_configManager.configGDPMedio.preview && _capturadorExistsPreview(params)) {\n (0, _logger.showLog)('Advertising:printAds:Preview mode. Getting form grabber service');\n _capturadorSetPreview(params);\n return;\n }\n\n (0, _logger.showLog)('Advertising:printAds:Check Ad-Type', params);\n prioritized = _configManager.isPrioritized(position);\n delayed = _configManager.isDelayed(position);\n\n if (prioritized && !delayed) {\n (0, _logger.showLog)('Advertising:printAds:Painting prioritized', params);\n _getAdGoogle(params, true);\n } else if (delayed) {\n (0, _logger.showLog)('Advertising:printAds:Wait for INVIEW event delayed', params);\n _displayDelayed(params);\n } else if (!_configManager.thereArePrioritizedPositions() || _completadasPriorizadas) {\n (0, _logger.showLog)('Advertising:printAds:Painting standard', params);\n _getAdGoogle(params, false);\n } else {\n (0, _logger.showLog)('Advertising:printAds:Painting queued standards', params);\n _standardDelayed.push(params);\n }\n } else {\n (0, _logger.showWarn)('Advertising:printAds:ServerType is different from google', params);\n }\n }\n\n /**\n * Get user type\n * NOTE: legacy code\n */\n\n }, {\n key: 'getValueUser',\n value: function getValueUser() {\n if (!_configManager) {\n throw Error('Advertising:getValueUser:Config object not initialized');\n }\n\n return _configManager.valueUserType;\n }\n\n /**\n * Get google sizes for a given position\n * NOTE: legacy code\n */\n\n }, {\n key: 'getSizesGoogle',\n value: function getSizesGoogle() {\n var _configManager2;\n\n if (!_configManager) {\n throw Error('Advertising:getSizesGoogle:Config object not initialized');\n }\n\n return (_configManager2 = _configManager).getSizesGoogle.apply(_configManager2, arguments);\n }\n\n /**\n * Get OAS value from config\n * NOTE: legacy code\n */\n\n }, {\n key: 'getOasSitepage',\n value: function getOasSitepage() {\n var _configManager3;\n\n if (!_configManager) {\n throw Error('Advertising:getOasSitepage:Config object not initialized');\n }\n\n return (_configManager3 = _configManager).getOasSitepage.apply(_configManager3, arguments);\n }\n }]);\n\n return Advertising;\n}();\n\nexports.default = Advertising;\n\n/* Private */\n\n/**\n * Funcion que genera el scriptText que pinta la Advertising.\n * @param object params\n */\n\nfunction _defineSlot(params) {\n var scriptText, legacyCmvkey, insertedPositionkey, hideText, targetingText, size, idAds, targetingsTags, deviceTypeTargeting, decryptedURL, pattern, isValid, decodedURLTargetings, chunksURLTargetings, topics, mappingObj, sizeMapping, defineSizeMapping;\n\n size = _configManager.getSizesGoogle(params.position);\n idAds = _configManager.getIdDiv(params);\n targetingsTags = params.tags || {};\n // Codigo para ocultar el div si no hay publi\n hideText = params.hideNoAds ? '.setCollapseEmptyDiv(true)' : '';\n targetingText = _configManager.globalTargetings;\n\n Object.keys(targetingsTags).forEach(function (key) {\n targetingText += '.setTargeting(\"' + key + '\", \"' + targetingsTags[key] + '\")';\n });\n\n // Targeting con tipo de usuario de Gigya\n deviceTypeTargeting = _configManager.deviceType === 'mobile' ? 'm' : 'w';\n targetingText += '.setTargeting(\\'st\\', \\'' + _configManager.valueUserType + '\\').setTargeting(\\'stt\\', \\'' + deviceTypeTargeting + _configManager.valueUserType + '\\')';\n\n // Se comprueba si se fuerza algun targeting via URL con el parametro vam_cmvkey\n decryptedURL = _configManager5.default.decryptedURL();\n if (typeof window.location !== 'undefined' && (window.location.href.indexOf('vam_cmvkey=') > -1 || window.location.href.indexOf('cmvkey=') > -1) || decryptedURL !== '') {\n legacyCmvkey = window.location.href.indexOf('vam_cmvkey=') > -1 ? 'vam_cmvkey' : 'cmvkey';\n pattern = new RegExp('(\\\\?|&)' + legacyCmvkey + '=([^?&]+)');\n isValid = decryptedURL !== '' ? pattern.exec(decryptedURL) : pattern.exec(window.location.href);\n\n if (isValid) {\n try {\n decodedURLTargetings = decodeURIComponent(isValid[2]);\n chunksURLTargetings = decodedURLTargetings.split(',');\n\n chunksURLTargetings.forEach(function (chunck) {\n var pair, keyChunk, valueChunk;\n\n pair = chunck.split('=');\n keyChunk = pair[0];\n valueChunk = pair[1];\n targetingText += '.setTargeting(\"' + keyChunk + '\", \"' + valueChunk + '\")';\n });\n } catch (e) {\n (0, _logger.showWarn)('Advertising:defineSlot:Error processing ' + legacyCmvkey + ': ' + e);\n }\n }\n }\n\n // Incluimos los topics como targeting si asi corresponde\n try {\n topics = _getTopics(false);\n if (topics.length) {\n targetingText += '.setTargeting(\"topics\", \"' + topics + '\")';\n }\n } catch (e) {\n (0, _logger.showWarn)('Advertising:defineSlot:Error processing enableTopics: ' + e);\n }\n\n // Se comprueba si enableTpag esta habilitado\n try {\n if (_configManager.configGDPMedio.enableTpag) {\n targetingText += '.setTargeting(\"tpag\", \"' + _configManager.pageType + '\")';\n }\n } catch (e) {\n (0, _logger.showWarn)('Advertising:defineSlot:Error processing tpag: ' + e);\n }\n\n // Comprobaciones para medios responsives\n mappingObj = {};\n sizeMapping = '';\n defineSizeMapping = '';\n if (!params.outOfPage && params.responsive && Array.isArray(params.responsive) && params.responsive.length > 0) {\n mappingObj = _getSizeMapping(params);\n sizeMapping = mappingObj && mappingObj.definition ? mappingObj.definition : '';\n defineSizeMapping = mappingObj && mappingObj.script ? mappingObj.script : '';\n }\n\n if (!params.outOfPage) {\n if (params.defineSlot) {\n scriptText = sizeMapping + 'window.' + _getNombreSlot(params) + ' = window.googletag.defineSlot(\\'' + _configManager.getOasSitepage(params) + '\\', ' + size + ', \\'' + idAds + '\\')' + defineSizeMapping + '.setTargeting(\\'pos\\',\\'' + params.position + '\\')' + targetingText + hideText + '.addService(googletag.pubads());';\n }\n } else if (params.defineSlot) {\n scriptText = sizeMapping + 'window.' + _getNombreSlot(params) + ' = window.googletag.defineOutOfPageSlot(\\'' + _configManager.getOasSitepage(params) + '\\', \\'' + idAds + '\\')' + defineSizeMapping + '.setTargeting(\\'pos\\',\\'' + params.position + '\\')' + targetingText + hideText + '.addService(googletag.pubads());';\n }\n\n insertedPositionkey = _getClavePosicionInsertada(params);\n _insertedPositions[insertedPositionkey] = scriptText;\n (0, _logger.showLog)('Advertising:defineSlot:Ads ID', idAds);\n window.customcmd.push(_executeDefineSlot(scriptText, params));\n}\n\nfunction _executeDefineSlot(scriptText, params) {\n (0, _logger.showLog)('En defineSlot. defineSlot: ' + scriptText);\n eval(scriptText);\n _notDisplayedSlots.push(params.position);\n}\n\n/**\n * Hace display de una posicion\n */\nfunction _display(params) {\n // Comprobamos si la posicion esta en la lista de posiciones definidas y pendientes de display\n var index, idDiv;\n\n (0, _logger.showLog)('Advertising:display:Display position ' + params.position + ' with params', params);\n index = _notDisplayedSlots.indexOf(params.position);\n if (index < 0) {\n (0, _logger.showLog)('Advertising:display:Position ' + params.position + ' has already been displayed');\n return;\n }\n\n (0, _logger.showLog)('Advertising:display:Position ' + params.position + ' is not displayed yet');\n idDiv = _configManager.getIdDiv(params);\n if (!$('#' + idDiv).length) {\n (0, _logger.showWarn)('Advertising:display:DIV with ID ' + idDiv + ' does not exist');\n return;\n }\n (0, _logger.showLog)('Advertising:display:Queued position ' + params.position + ' to display');\n window.customcmd.push(function () {\n (0, _logger.showLog)('Advertising:display:Displaying ' + params.position);\n window.googletag.display(idDiv);\n\n /* NOTE: Si singleRequest esta habilitado un unico display sirve para todas las posiciones\n para las que hemos hecho defineSlot previamente. En caso contrario solo quitamos la\n posicion concreta de la lista.\n */\n if (_configManager.configGDPMedio.singleRequest) {\n _notDisplayedSlots = [];\n } else {\n _notDisplayedSlots.splice(index, 1);\n }\n });\n}\n\n/**\n * Funcion que obtiene las medidas en caso de que sea responsive.\n * FUTURE: move config to GDP\n * FUTURE: move logic to GoogleTag component\n * @param object responsive\n * @return string sizeMapping\n */\nfunction _getSizeMapping(params) {\n var mappingName, mappingObj, responsive, finalDefinition;\n\n mappingName = 'window.mapping_' + _getNombreSlot(params);\n mappingObj = {\n definition: mappingName + ' = window.googletag.sizeMapping()',\n script: '.defineSizeMapping(' + mappingName + ')'\n };\n responsive = params.responsive;\n (0, _logger.showLog)('Advertising:getSizeMapping:Resposive param for position ' + params.position, responsive);\n\n finalDefinition = responsive.reduce(function (definition, pair) {\n var addSize, viewportSize, responsiveSizes, singleSize;\n\n if (definition !== '' && !definition) return undefined;\n\n viewportSize = pair[0];\n if (pair.length !== 2 || !Array.isArray(viewportSize) || viewportSize.length !== 2) {\n (0, _logger.showWarn)('Advertising:getSizeMapping:Malformed responsive param in position ' + params.position + '. responsive: ' + responsive);\n return undefined;\n }\n\n addSize = '';\n responsiveSizes = pair[1];\n if (typeof responsiveSizes === 'string') {\n if (responsiveSizes.indexOf('fluid') !== -1) {\n responsiveSizes = _constants.POSITION_FLUID;\n } else {\n responsiveSizes = _configManager.getSizesGoogle(responsiveSizes);\n if (typeof responsiveSizes !== 'undefined' && typeof responsiveSizes === 'string') {\n responsiveSizes = JSON.parse(responsiveSizes);\n }\n }\n }\n if (!Array.isArray(responsiveSizes) && responsiveSizes !== _constants.POSITION_FLUID) {\n (0, _logger.showWarn)('Advertising:getSizeMapping:Malformed responsive param in position ' + params.position + '. responsive: ' + responsive);\n return undefined;\n }\n\n addSize = '[' + viewportSize[0] + ',' + viewportSize[1] + '],';\n if (responsiveSizes.length > 0 && Array.isArray(responsiveSizes[0])) {\n addSize += '[';\n for (var j = 0; j < responsiveSizes.length; j++) {\n singleSize = responsiveSizes[j];\n if (singleSize.length === 2) {\n addSize += (j === 0 ? '[' : ',[') + singleSize[0] + ',' + singleSize[1] + ']';\n }\n }\n addSize += ']';\n } else if (responsiveSizes.length === 2) {\n addSize += '[' + responsiveSizes[0] + ',' + responsiveSizes[1] + ']';\n } else if (responsiveSizes === _constants.POSITION_FLUID) {\n addSize += _constants.POSITION_FLUID;\n } else {\n addSize += '[]';\n }\n\n return definition + '.addSize(' + addSize + ')';\n }, '');\n\n if (!finalDefinition) return undefined;\n\n mappingObj.definition += finalDefinition + '.build();';\n\n return mappingObj;\n}\n\n/**\n * Lanza los printAds que se han encolado cuando hay priorizadas\n */\nfunction _displayStandarQueued() {\n (0, _logger.showLog)('Advertising:displayStandarQueued:Display queued positions');\n while (_standardDelayed.length) {\n Advertising.printAds(_standardDelayed.shift());\n }\n}\n\n/**\n * Funcion para pintar la publicidad priorizada\n */\nfunction _displayPrioritized() {\n (0, _logger.showLog)('Advertising:pintaPriorizadas:Painting the following positions : ' + _configManager.prioritizedPositions);\n _pintaListaPosiciones(_configManager.prioritizedPositions, true);\n}\n\n/**\n * Funcion que recorre y pinta una lista de posiciones.\n * Si singleRequest esta habilitado las posiciones priorizadas funcionan como un Roadblock y se\n * piden todas juntas (no llevaran eventos ni callbacks)\n */\nfunction _pintaListaPosiciones(listaPositions, sonPosicionesPriorizadas) {\n if (_configManager.configGDPMedio.singleRequest && sonPosicionesPriorizadas) {\n (0, _logger.showLog)('Advertising:pintaListaPosiciones:There is prioritized positions and SingleRequest is enabled -> get with Roadblock');\n\n window.customcmd.push(function () {\n var params, container$, posCuyoDivExiste;\n\n posCuyoDivExiste = null;\n listaPositions.forEach(function (position) {\n params = { position: position };\n\n if (!_configManager.existePosEnConfigGDPMedio(position)) {\n (0, _logger.showWarn)('Advertising:pintaListaPosiciones:SingleRequest position ' + position + ' does not exist configGDPMedio');\n return;\n }\n\n if (!_configManager.isActive(params)) {\n (0, _logger.showWarn)('Advertising:pintaListaPosiciones:SingleRequest position ' + position + ' is NOT active');\n return;\n }\n\n // Recuperamos los parametros del DIV en caso de que exista en la pagina\n container$ = $('[data-voc-vam-position = \\'' + position + '\\']', _configManager.context$);\n if (container$.length) {\n params = _configManager.normalizaParams(container$);\n if (posCuyoDivExiste === null) posCuyoDivExiste = params;\n } else {\n // NOTE: find legacy DIV\n container$ = $('#' + _configManager.getIdDiv(params));\n if (container$.length) {\n params = _configManager.normalizaParams(params);\n if (posCuyoDivExiste === null) {\n posCuyoDivExiste = params;\n }\n } else {\n (0, _logger.showWarn)('En pintaListaPosiciones. No existe el DIV de la posicion priorizada ' + position);\n }\n }\n if ('id' in params) {\n (0, _logger.showLog)('En pintaListaPosiciones. Llamando a defineSlot: ' + JSON.stringify(params));\n _defineSlot(params);\n }\n });\n\n if (posCuyoDivExiste === null) {\n (0, _logger.showError)('ERROR En pintaListaPosiciones. No existe el DIV de ninguna de las posiciones priorizadas en la pagina, por lo que no se hara el display');\n } else {\n params = posCuyoDivExiste;\n }\n\n // NOTE: If there is Header Bidding wait for bidders promises\n if (_providerManager2.default.isActive()) {\n (0, _logger.showLog)('pintaListaPosiciones:Waiting for HB`s promises to be solved');\n _application2.default.when(_constants.HEADER_BIDDING_READY).then(function () {\n (0, _logger.showLog)('pintaListaPosiciones:HB promises resolved');\n _providerManager2.default.setTargetings();\n (0, _logger.showLog)('pintaListaPosiciones:Params object', params);\n _display(params);\n });\n } else {\n (0, _logger.showLog)('En pintaListaPosiciones. Print without wait HB');\n _display(params);\n }\n });\n } else {\n !_configManager.configGDPMedio.singleRequest && (0, _logger.showLog)('Advertising:pintaListaPosiciones:SingleRequest DISABLED');\n !sonPosicionesPriorizadas && (0, _logger.showLog)('Advertising:pintaListaPosiciones:There are NOT prioritized positions');\n // window.customcmd.push(function () {\n listaPositions.forEach(function (position) {\n var params, container$, legacyParams;\n\n if (!_configManager.existePosEnConfigGDPMedio(position)) {\n (0, _logger.showWarn)('Advertising:pintaListaPosiciones:Prioritized position ' + position + ' does not exist configGDPMedio');\n return;\n }\n\n params = { position: position };\n if (!_configManager.isActive(params)) {\n (0, _logger.showWarn)('Advertising:pintaListaPosiciones:Prioritized position ' + position + ' is NOT active');\n return;\n }\n\n // Recuperamos los paramteros del DIV en caso de que exista en la pagina\n container$ = $('[data-voc-vam-position = \\'' + position + '\\']', _configManager.context$);\n if (container$.length) {\n params = _configManager.normalizaParams(container$);\n } else {\n container$ = $('#' + _configManager.getIdDiv(params));\n if (container$.length) {\n legacyParams = _configManager.normalizaParams(container$);\n }\n params = !legacyParams ? _configManager.normalizaParams(params) : legacyParams;\n }\n\n (0, _logger.showLog)('Advertising:pintaListaPosiciones:Calling printAds with', params);\n Advertising.printAds(params);\n });\n // });\n }\n}\n\n/**\n * Display delayed positions when it is on viewport\n * @param {object} params\n */\nfunction _displayDelayed(params) {\n var idAds = _configManager.getIdDiv(params);\n\n $('#' + idAds).on('inview', function (event, isInView) {\n (0, _logger.showLog)('Advertising:displayDelayed:INVIEW_EVENT trigger', params, event, isInView);\n if (isInView && !this.dataset.vocVamDisplayed) {\n (0, _logger.showLog)('Advertising:displayDelayed:Painting delayed', idAds, params);\n _getAdGoogle(params, false);\n }\n });\n}\n\n/**\n * Pintado de publicidad de GPT\n */\nfunction _getAdGoogle(params, esPosPriorizada) {\n if (!_configManager.configGDPMedio.activo) {\n (0, _logger.showWarn)('Advertising:getAdGoogle:Ads was disabled in Media Config');\n return;\n }\n\n (0, _logger.showLog)('Advertising:getAdGoogle:Queuing with', params);\n window.customcmd.push(function () {\n var idDiv, eventParams, tParams, key, hasPreevent;\n\n if (!_configManager.existePosEnConfigGDPMedio(params.position)) {\n (0, _logger.showWarn)('Advertising:getAdGoogle:Position ' + params.position + ' does not exist in configGDPMedio');\n return;\n }\n\n (0, _logger.showLog)('Advertising:getAdGoogle:googletag exec with', params);\n idDiv = _configManager.getIdDiv(params);\n eventParams = _getEventsPosition(params);\n\n tParams = params;\n tParams.pre_callback = eventParams.pre_callback;\n tParams.pre_event = eventParams.pre_event;\n\n tParams.post_callback = eventParams.post_callback;\n tParams.post_event = eventParams.post_event;\n (0, _logger.showLog)('Advertising:getAdGoogle:Set params to DIV with id = ', idDiv);\n $('#' + idDiv).data('params', tParams);\n\n key = _getClavePosicionInsertada(params);\n if (!_insertedPositions[key]) {\n hasPreevent = false;\n if (params.defineSlot) {\n (0, _logger.showLog)('Advertising:getAdGoogle:defineSlot', params);\n _defineSlot(params);\n if (!esPosPriorizada) {\n (0, _logger.showLog)('Advertising:getAdGoogle:It is not prioritized', params);\n if (eventParams.pre_callback && !eventParams.pre_event) {\n eventParams.pre_callback();\n } else if (eventParams.pre_event) {\n (0, _logger.showLog)('Advertising:getAdGoogle:Has pre-event', params);\n hasPreevent = true;\n _application2.default.one(eventParams.pre_event, params, function () {\n // NOTE: If there is Header Bidding wait for bidders promises\n if (_providerManager2.default.isActive()) {\n (0, _logger.showLog)('Advertising:getAdGoogle:Waiting for HB`s promises to be solved');\n _application2.default.when(_constants.HEADER_BIDDING_READY).then(function () {\n (0, _logger.showLog)('Advertising:getAdGoogle:HB promises resolved with preEvents', params);\n if (params.pre_callback) {\n params.pre_callback();\n }\n _providerManager2.default.setTargetings();\n _display(params);\n });\n }\n });\n } else {\n (0, _logger.showLog)('Advertising:getAdGoogle:Has NO pre-event', params);\n if (_providerManager2.default.isActive()) {\n hasPreevent = true;\n (0, _logger.showLog)('Advertising:getAdGoogle:Waiting for HB`s promises to be solved');\n _application2.default.when(_constants.HEADER_BIDDING_READY).then(function () {\n (0, _logger.showLog)('Advertising:getAdGoogle:HB promises resolved without preEvents with', params);\n if (params.pre_callback) {\n params.pre_callback();\n }\n _providerManager2.default.setTargetings();\n _display(params);\n });\n }\n }\n } else {\n (0, _logger.showLog)('Advertising:getAdGoogle:Is prioritized', params);\n if (_providerManager2.default.isActive()) {\n hasPreevent = true;\n (0, _logger.showLog)('Advertising:getAdGoogle:Waiting for HB`s promises to be solved');\n _application2.default.when(_constants.HEADER_BIDDING_READY).then(function () {\n (0, _logger.showLog)('Advertising:getAdGoogle:HB promises resolved on prioritized position with', params);\n _providerManager2.default.setTargetings();\n _display(params);\n });\n }\n }\n }\n\n // No tiene evento de activacion\n if (!hasPreevent) {\n (0, _logger.showLog)('Advertising:getAdGoogle:Has no pre-event. Painting', params);\n _providerManager2.default.setTargetings();\n _display(params);\n }\n } else {\n (0, _logger.showLog)('Advertising:getAdGoogle:Position ' + params.position + ' has already been previously invoked. Checking the value of the refresh parameter', params.refresh);\n if (params.refresh) _pintarPosicionRefresh(params);\n }\n });\n}\n\n/**\n * Funcion que recuperar si tiene evento pre o post callback, los parametros llegados por funcion\n * prevalecen sobre los del CONFIG\n * @param object params\n */\nfunction _getEventsPosition(params) {\n var tipoDispositivoAux, positionEvents;\n\n tipoDispositivoAux = _configManager.deviceType;\n positionEvents = _application2.default.lookup('posicion_' + tipoDispositivoAux + '[\"' + params.position + '\"]', _configManager.configGDP);\n\n if ((0, _utils.isEmpty)(positionEvents)) return positionEvents;\n\n positionEvents.pre_callback = params.pre_callback || params.pre_callback;\n positionEvents.pre_event = params.pre_event || params.pre_event;\n positionEvents.post_callback = params.post_callback || params.post_callback;\n positionEvents.post_event = params.post_event || params.post_event;\n\n return positionEvents;\n}\n\n/**\n * Devuelve el nombre de la variable que almacenara el slot\n */\nfunction _getNombreSlot(params) {\n var dynamicSuffix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var dynamicId, dynamic;\n\n dynamicId = _configManager.dynamicId;\n dynamic = dynamicId && dynamicSuffix ? '_' + dynamicId : '';\n\n return 'slot_' + params.position.replace('-', '_') + dynamic;\n}\n\n/**\n * Clave unica de la posicion\n */\nfunction _getClavePosicionInsertada(params) {\n return _getNombreSlot(params) + '_' + _configManager.getIdDiv(params);\n}\n\n/**\n * Refresh de una posicion\n */\nfunction _pintarPosicionRefresh(params) {\n (0, _logger.showLog)('En pintarPosicionRefresh. Refrescamos la posicion ' + params.position);\n window.googletag.pubads().refresh([_application2.default.lookup(_getNombreSlot(params))]);\n}\n\n/**\n * INICIO: Renderizado de tablas de informacion cuando vam_info_slot=1\n * --------------------------------------------------------------------------\n */\n/**\n * Metodo de entrada de tablas de informacion\n */\nfunction _infoSlotRender(params, isSlotRendered) {\n var idDiv, container$, width, height, dimension, arrayObj, numSlots, numTopics, numOas, max;\n\n idDiv = _configManager.getIdDiv(params);\n container$ = $('#' + idDiv);\n width = $('#' + idDiv + ' div iframe').width();\n height = $('#' + idDiv + ' div iframe').height();\n\n // Obtenemos el tamano de la publi pintada y la borramos\n if (isSlotRendered) {\n container$.empty();\n } else {\n // Si DFP devuelve isEmpty cogemos la primera dimension del array, o 150x150 si es fluid\n try {\n height = 150;\n width = 150;\n dimension = _configManager.getSizesGoogle(params.position);\n if (dimension && dimension.indexOf('fluid') < 0) {\n arrayObj = JSON.parse(dimension);\n\n if (Array.isArray(arrayObj[0])) {\n width = arrayObj[0][0];\n height = arrayObj[0][1];\n } else {\n width = arrayObj[0];\n height = arrayObj[1];\n }\n }\n } catch (e) {\n (0, _logger.showError)('Advertising:infoSlotRender:Error building size.', e);\n }\n\n container$.show();\n }\n\n // Rectangulo con color azul o rojo (si es local)\n container$.addClass('gdp_infoSlot_rectangle').html('

' + params.position + ' ' + _infoSlotFormateaDimensiones(params) + '

');\n if (_isLocalPosition(params)) container$.addClass('gdp_infoSlot_localPosition');\n if (!isSlotRendered) container$.addClass('gdp_infoSlot_inactive');\n\n if (!$('#gdp_infoSlot_tableInfo').length > 0) {\n $('body').append('
');\n }\n\n // Tablas de info adicional\n _infoSlotRenderSlots(params);\n _infoSlotRenderTopics();\n _infoSlotRenderOAS(params);\n\n numSlots = $('#gdp_infoSlot_tableInfo-slots').length > 0 ? $('#gdp_infoSlot_tableInfo-slots tbody tr').length : 0;\n numTopics = $('#gdp_infoSlot_tableInfo-topics').length > 0 ? $('#gdp_infoSlot_tableInfo-topics tbody tr').length : 0;\n numOas = $('#gdp_infoSlot_tableInfo-oas').length > 0 ? $('#gdp_infoSlot_tableInfo-oas tbody tr').length : 0;\n max = Math.max(numSlots, numTopics);\n if (max > numSlots && $('#gdp_infoSlot_tableInfo-slots').length > 0) {\n for (var i = 0; i < max - numSlots; i++) {\n $('#gdp_infoSlot_tableInfo-slots tbody').append(' ');\n }\n }\n if (max > numTopics && $('#gdp_infoSlot_tableInfo-topics').length > 0) {\n for (var _i = 0; _i < max - numTopics; _i++) {\n $('#gdp_infoSlot_tableInfo-topics tbody').append(' ');\n }\n }\n if (max > numOas && $('#gdp_infoSlot_tableInfo-oas').length > 0) {\n for (var _i2 = 0; _i2 < max - numOas; _i2++) {\n $('#gdp_infoSlot_tableInfo-oas tbody').append(' ');\n }\n }\n}\n\nfunction _applyFilter(value) {\n return value.replace(new RegExp(\"'fluid'\", 'g'), '[fluid]').replace(new RegExp('\\\\],\\\\[', 'g'), '_').replace(new RegExp(',', 'g'), 'x').replace(new RegExp('\\\\[', 'g'), '').replace(new RegExp('\\\\]', 'g'), '').replace(new RegExp('_', 'g'), ',');\n}\n\nfunction _infoSlotFormateaDimensiones(params) {\n var result, dimensionsArray, mappingObj, sizeMapping, dimension, resolution, notRepeatedDimensions;\n\n result = '';\n dimensionsArray = [];\n mappingObj = {};\n sizeMapping = '';\n\n try {\n if (params.outOfPage) {\n dimensionsArray.push('oop');\n } else if (params.responsive && Array.isArray(params.responsive) && params.responsive.length > 0) {\n mappingObj = _getSizeMapping(params);\n sizeMapping = typeof mappingObj !== 'undefined' && typeof mappingObj.definition !== 'undefined' ? mappingObj.definition : '';\n sizeMapping.split('.').forEach(function (size) {\n if (size.indexOf('addSize') > -1) {\n size = size.replace(new RegExp('addSize\\\\(', 'g'), '').replace(new RegExp('\\\\)', 'g'), '');\n dimensionsArray.push(size);\n }\n });\n } else {\n dimensionsArray.push(_application2.default.lookup('posicion_' + _configManager.deviceType + '.' + params.position + '.dimensiones', _configManager.configGDPMedio));\n }\n\n if (Array.isArray(dimensionsArray)) {\n if (params.outOfPage) {\n // Posicion OutOfPage\n result += '(oop)';\n } else if (!params.responsive) {\n // Posicion no responsive\n dimension = _applyFilter(dimensionsArray[0]);\n result += '(' + dimension + ')';\n } else {\n // Posicion responsive\n notRepeatedDimensions = new Set();\n dimensionsArray.forEach(function (dimen) {\n var filtered = _applyFilter(dimen);\n\n // Quitamos la resolucion\n resolution = filtered.substring(0, filtered.indexOf(','));\n dimension = filtered.substring(filtered.indexOf(',') + 1);\n notRepeatedDimensions.add(dimension);\n result += '
' + resolution + ': (' + dimension + ')';\n });\n\n // Si todas las dimensiones de responsive son la misma escribimos solo una\n if (notRepeatedDimensions.size === 1) result = '(' + dimension + ')';\n }\n }\n } catch (err) {\n (0, _logger.showError)('Advertising:infoSlotFormateaDimensiones:Error', err);\n }\n\n return result;\n}\n\n/**\n * Tabla de informacion de SLOTS\n */\nfunction _infoSlotRenderSlots(params) {\n if (!$('#gdp_infoSlot_tableInfo-slots').length) {\n $('#gdp_infoSlot_tableInfo').append('
');\n $('#gdp_infoSlot_tableInfo-slots thead').append('posiciones');\n }\n $('#gdp_infoSlot_tableInfo-slots tbody').append('' + params.position + '');\n}\n\n/**\n * Tabla de informacion de TOPICS\n */\nfunction _infoSlotRenderTopics() {\n var topics = _getTopics(true);\n if (topics.length > 0) {\n if (!$('#gdp_infoSlot_tableInfo-topics').length) {\n $('#gdp_infoSlot_tableInfo').append('
');\n $('#gdp_infoSlot_tableInfo-topics thead').append('topics');\n\n topics.forEach(function (topic) {\n $('#gdp_infoSlot_tableInfo-topics tbody').append('' + topic + '');\n });\n }\n }\n}\n\n/**\n * Tabla de informacion de OAS\n */\nfunction _infoSlotRenderOAS(params) {\n if (!$('#gdp_infoSlot_tableInfo-oas').length) {\n $('#gdp_infoSlot_tableInfo').append('
');\n $('#gdp_infoSlot_tableInfo-oas thead').append('oas');\n $('#gdp_infoSlot_tableInfo-oas tbody').append('' + _configManager.getOasSitepage(params) + '');\n }\n}\n\n/**\n * Devuelve un array con los topics que contiene la pagina, en caso de que los contenga y que\n * enableTopics este habilitado.\n * @return array\n */\nfunction _getTopics(forzarEnableTopics) {\n var topics = [];\n\n if ((_configManager.configGDPMedio.enableTopics || forzarEnableTopics) && window.voc_top) {\n topics = window.voc_top.split(',');\n }\n\n return topics;\n}\n\n/**\n * Funcion que devuelve true si la posicion es local, false si no lo es\n * @return boolean\n */\nfunction _isLocalPosition(params) {\n return params.position.includes('_local');\n}\n/**\n * FIN: Renderizado de tablas de informacion cuando vam_info_slot=1\n * --------------------------------------------------------------------------\n */\n\n/**\n * INICIO: Capturador (modo preview)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Devuelve true si hay preview para la posicion indicada o false en caso contrario\n * @returns {boolean}\n */\nfunction _capturadorExistsPreview(params) {\n return _configManager.capturadorDataPreview && _configManager.capturadorDataPreview[params.position];\n}\n\n/**\n * funcion que cambia la publicidad por defecto, por una que se indica\n */\nfunction _capturadorSetPreview(params) {\n var previewJSON, preview, idDiv, div, creatividad;\n\n try {\n previewJSON = JSON.parse(_configManager.capturadorDataPreview[params.position]);\n preview = previewJSON[0];\n idDiv = _configManager.getIdDiv(params);\n creatividad = '';\n div = $('#' + idDiv);\n div.empty();\n div.html(creatividad);\n (0, _logger.showLog)('En capturadorSetPreview. Pintada preview para la posicion ' + params.position);\n } catch (err) {\n (0, _logger.showError)('Advertising:capturadorSetPreview:Error', err);\n }\n}\n/**\n * FIN: Capturador (modo preview)\n * --------------------------------------------------------------------------\n */\n\n/***/ }),\n\n/***/ 29:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _application = __webpack_require__(2);\n\nvar _application2 = _interopRequireDefault(_application);\n\nvar _amazon = __webpack_require__(30);\n\nvar _amazon2 = _interopRequireDefault(_amazon);\n\nvar _prebid = __webpack_require__(32);\n\nvar _prebid2 = _interopRequireDefault(_prebid);\n\nvar _logger = __webpack_require__(1);\n\nvar _constants = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar GATEWAYS = [_amazon2.default, _prebid2.default];\nvar _window = window,\n RSVP = _window.RSVP;\n\nvar _gatewaysPromises = [];\nvar _gatewaysAdded = [];\n\nwindow.googletag = window.googletag || {};\nwindow.googletag.cmd = window.googletag.cmd || [];\nwindow.customcmd = window.customcmd || [];\n\nexports.default = Object.preventExtensions({\n /**\n * Get promises from gateways.\n * NOTE: Init method must be call before isActive method\n * @param {string} device - device type\n * @param {object} config - configGDPMedio object\n * @param {integer} dynamicId - dynamicId(infinite-scroll)\n */\n init: function init(config) {\n _gatewaysPromises = [];\n // NOTE: load promises of active gateways\n _loadActivesGateways.call(_gatewaysPromises, config);\n\n // NOTE: when all promises are resolved, rejected or timeout reached, resolve the HB-Promise\n return RSVP.all(_gatewaysPromises).then(function () {\n (0, _logger.showLog)('HBManager:init:All gateways have finished');\n _application2.default.promised(_constants.HEADER_BIDDING_READY, true);\n }).catch(function (reason) {\n (0, _logger.showError)('HBManager:init:Error in gateways', reason);\n _application2.default.promised(_constants.HEADER_BIDDING_READY, false);\n });\n },\n\n /**\n * Set targeting to DFP request\n */\n setTargetings: function setTargetings() {\n (0, _logger.showLog)('HBManager:setTargetings:Setting targetings for each added gateways');\n _gatewaysAdded.forEach(function (gateway) {\n gateway.setTargetings();\n });\n },\n\n /**\n * Check if there are gateways actives\n */\n isActive: function isActive() {\n return _gatewaysPromises.length;\n }\n});\n\n/* Private */\n\n/**\n * Load active gateways by config\n * @param {object} configGDPMedio\n */\n\nfunction _loadActivesGateways(config) {\n var _this = this;\n\n _gatewaysAdded = [];\n GATEWAYS.forEach(function (gateway) {\n if (gateway.isActive(config)) {\n (0, _logger.showLog)('HBManager:loadActivesGateways:Add promise', gateway.NAME);\n _gatewaysAdded.push(gateway);\n _this.push(gateway.getLoadPromise(config));\n }\n });\n}\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _application = __webpack_require__(2);\n\nvar _application2 = _interopRequireDefault(_application);\n\nvar _logger = __webpack_require__(1);\n\nvar _constants = __webpack_require__(0);\n\n__webpack_require__(31);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// NOTE: 'apstag' is the global variable that Amazon searches for\nvar _adserverRequestResponse = false;\n\nvar REASONS = {\n ERROR_LOAD_LIBRARY: 'ERROR_LOAD_LIBRARY',\n TIMEOUT_REACHED_GLOBAL: 'TIMEOUT_REACHED_GLOBAL',\n TIMEOUT_REACHED_FETCH_BIDS: 'TIMEOUT_REACHED_FETCH_BIDS',\n ERROR_INIT_CONFIG: 'ERROR_INIT_CONFIG'\n};\nvar _window = window,\n RSVP = _window.RSVP;\n\nvar NAME = 'AMAZON';\n\nexports.default = Object.preventExtensions({\n NAME: NAME,\n isActive: function isActive(_ref) {\n var hbAmazon = _ref.hbAmazon;\n\n if (hbAmazon) {\n (0, _logger.showLog)('Amazon:Is active');\n } else {\n (0, _logger.showLog)('Amazon:Is NOT active');\n }\n return hbAmazon;\n },\n\n /**\n * Launch amazon behaviour\n * @param {object} adUnits - adUnits config\n * @param {object} biddersConfig\n * @param {integer} timeout\n * @return {Promise}\n */\n getLoadPromise: function getLoadPromise(_ref2) {\n var hbAmazon = _ref2.hbAmazon;\n\n return new RSVP.Promise(function (resolve, reject) {\n var timeout = hbAmazon.timeout || _constants.DEFAULT_AMAZON_LOAD_TIMEOUT;\n\n _adserverRequestResponse = false;\n _loadLibrary().then(function () {\n (0, _logger.showLog)('Amazon:getLoadPromise:Library loaded');\n return _setConfig();\n }).then(function () {\n (0, _logger.showLog)('Amazon:getLoadPromise:apstag is loaded');\n return _fetchBid(hbAmazon);\n }).then(function () {\n (0, _logger.showLog)('Amazon:getLoadPromise:Bids fetched');\n resolve(true);\n }).catch(function (reason) {\n reject(reason);\n });\n\n setTimeout(function () {\n if (!_adserverRequestResponse) {\n (0, _logger.showWarn)('Amazon:getLoadPromise:Timeout reached', timeout);\n reject(REASONS.TIMEOUT_REACHED_GLOBAL);\n }\n }, timeout);\n }).catch(function (reason) {\n switch (reason) {\n case REASONS.TIMEOUT_REACHED_GLOBAL:\n (0, _logger.showLog)('Amazon:getLoadPromise:TIMEOUT reached global');\n break;\n case REASONS.TIMEOUT_REACHED_FETCH_BIDS:\n (0, _logger.showLog)('Amazon:getLoadPromise:TIMEOUT reached in _fetchBid');\n break;\n case REASONS.ERROR_LOAD_LIBRARY:\n (0, _logger.showError)('Amazon:getLoadPromise:Error loading library');\n break;\n case REASONS.ERROR_INIT_CONFIG:\n (0, _logger.showError)('Amazon:getLoadPromise:Error on init config');\n break;\n default:\n (0, _logger.showError)('Amazon:getLoadPromise:Error in Amazon process', reason);\n }\n return false;\n });\n },\n\n\n /**\n * Force setTargeting\n */\n setTargetings: function setTargetings() {\n if (_adserverRequestResponse) {\n window.customcmd.push(function () {\n window.apstag.setDisplayBids();\n (0, _logger.showLog)('Amazon:setTargetings:Targetings added');\n });\n } else {\n (0, _logger.showLog)('Amazon:setTargetings:Targetings NOT added because no response from bidders');\n }\n }\n});\n\n/* Private */\n\n/**\n * Load Amazon library\n * @return {Promise}\n */\n\nfunction _loadLibrary() {\n (0, _logger.showLog)('Amazon:loadLibrary:Loading library');\n return _application2.default.load(_constants.AMAZON_URL).catch(function (reason) {\n (0, _logger.showError)('Amazon:loadLibrary:Error', reason);\n return RSVP.reject(REASONS.ERROR_LOAD_LIBRARY);\n });\n}\n\n/**\n * Set apstag init config\n */\nfunction _setConfig() {\n return new RSVP.Promise(function (resolve, reject) {\n // NOTE: set custom config object\n (0, _logger.showLog)('Amazon:setConfig:Show Amazon config', _constants.AMAZON_CONFIG);\n try {\n window.apstag.init(_constants.AMAZON_CONFIG, function () {\n resolve();\n });\n } catch (error) {\n (0, _logger.showError)('Amazon:setConfig:Error', error);\n reject(REASONS.ERROR_INIT_CONFIG);\n }\n });\n}\n\n/**\n * Add slots config and make Amazon call\n * @param {object} config - hbAmazon config from configGDPMedio\n */\nfunction _fetchBid(config) {\n var bidConfig;\n\n bidConfig = {\n slots: config.slots,\n timeout: config.timeout || _constants.DEFAULT_AMAZON_LOAD_TIMEOUT\n };\n\n return new RSVP.Promise(function (resolve, reject) {\n (0, _logger.showLog)('Amazon:fetchBid:Add Slots', bidConfig.slots);\n (0, _logger.showLog)('Amazon:fetchBid:Request Amazon');\n window.apstag.fetchBids(bidConfig, function (bids) {\n (0, _logger.showLog)('Amazon:fetchBid:Response from Amazon', bids);\n // NOTE: When there are no bids returned, the bids array will be empty\n if (Object.keys(bids).length === 0) {\n reject(REASONS.TIMEOUT_REACHED_FETCH_BIDS);\n return;\n }\n (0, _logger.showLog)('Amazon:fetchBid:Targetings keys', window.apstag.targetingKeys());\n _adserverRequestResponse = true;\n resolve();\n });\n });\n}\n\n/***/ }),\n\n/***/ 31:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// NOTE: function to queue the apstag calls before the library load, the original load the library too(https://ams.amazon.com/webpublisher/docs/help/web-integration-documentation/integration-guide/javascript-guide/display.html)\n(function IIFE(apstagGlobalName, root) {\n if (root[apstagGlobalName]) return;\n function queue(c, r) {\n root[apstagGlobalName]._Q.push([c, r]);\n }\n root[apstagGlobalName] = {\n init: function init() {\n queue('i', arguments);\n },\n fetchBids: function fetchBids() {\n queue('f', arguments);\n },\n setDisplayBids: function setDisplayBids() {},\n targetingKeys: function targetingKeys() {\n return [];\n },\n _Q: []\n };\n})('apstag', window);\n\n/***/ }),\n\n/***/ 32:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _application = __webpack_require__(2);\n\nvar _application2 = _interopRequireDefault(_application);\n\nvar _logger = __webpack_require__(1);\n\nvar _constants = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar REASONS = {\n EMPTY_ADUNITS: 'EMPTY_ADUNITS',\n ERROR_LOAD_LIBRARY: 'ERROR_LOAD_LIBRARY',\n TIMEOUT_REACHED_GLOBAL: 'TIMEOUT_REACHED_GLOBAL',\n TIMEOUT_REACHED_FETCH_BIDS: 'TIMEOUT_REACHED_FETCH_BIDS'\n};\nvar _window = window,\n RSVP = _window.RSVP;\n\nvar NAME = 'PREBID';\n\nvar _adserverRequestResponse = false;\n\n// NOTE: This is the global variable that Prebid searches for\nwindow.pbjs = window.pbjs || {};\nwindow.pbjs.que = window.pbjs.que || [];\n\nexports.default = Object.preventExtensions({\n NAME: NAME,\n isActive: function isActive(_ref) {\n var hbPrebid = _ref.hbPrebid;\n\n if (hbPrebid) {\n (0, _logger.showLog)('Prebid:Is active');\n } else {\n (0, _logger.showLog)('Prebid:Is NOT active');\n }\n return hbPrebid;\n },\n\n /**\n * Launch prebid behaviour\n * @param {object} adUnits - adUnits config\n * @param {object} biddersConfig\n * @param {integer} timeout\n * @return {Promise}\n */\n getLoadPromise: function getLoadPromise(_ref2) {\n var hbPrebid = _ref2.hbPrebid;\n\n _adserverRequestResponse = false;\n return new RSVP.Promise(function (resolve, reject) {\n var timeout = hbPrebid.timeout || _constants.DEFAULT_PREBID_LOAD_TIMEOUT;\n _loadLibrary().then(function () {\n (0, _logger.showLog)('Prebid:getLoadPromise:Library loaded');\n _setConfig(hbPrebid);\n return _fetchBid(hbPrebid);\n }).then(function () {\n (0, _logger.showLog)('Prebid:getLoadPromise:Bids fetched');\n resolve(true);\n }).catch(function (reason) {\n reject(reason);\n });\n\n setTimeout(function () {\n if (!_adserverRequestResponse) {\n (0, _logger.showWarn)('Prebid:getLoadPromise:Timeout reached', timeout);\n reject(REASONS.TIMEOUT_REACHED_GLOBAL);\n }\n }, timeout);\n }).catch(function (reason) {\n switch (reason) {\n case REASONS.TIMEOUT_REACHED_GLOBAL:\n (0, _logger.showLog)('Prebid:getLoadPromise:TIMEOUT reached global');\n break;\n case REASONS.TIMEOUT_REACHED_FETCH_BIDS:\n (0, _logger.showLog)('Prebid:getLoadPromise:TIMEOUT reached in _fetchBid');\n break;\n case REASONS.ERROR_LOAD_LIBRARY:\n (0, _logger.showError)('Prebid:getLoadPromise:Error loading library', reason);\n break;\n case REASONS.EMPTY_ADUNITS:\n (0, _logger.showError)('Prebid:getLoadPromise:There are not adUnits');\n break;\n default:\n (0, _logger.showError)('Prebid:getLoadPromise:Error in Prebid process', reason);\n }\n return false;\n });\n },\n\n\n /**\n * Force setTargeting\n */\n setTargetings: function setTargetings() {\n if (_adserverRequestResponse) {\n window.customcmd.push(function () {\n window.pbjs.que.push(function () {\n window.pbjs.setTargetingForGPTAsync();\n (0, _logger.showLog)('Prebid:setTargetings:Targetings added');\n });\n });\n } else {\n (0, _logger.showLog)('Prebid:setTargetings:Targetings NOT added because no response from bidders');\n }\n }\n});\n\n/* Private */\n\n/**\n * Load prebid library\n * @return {Promise}\n */\n\nfunction _loadLibrary() {\n (0, _logger.showLog)('Prebid:loadLibrary:Loading library');\n return _application2.default.load(_constants.PREBID_URL).catch(function (reason) {\n (0, _logger.showError)('Prebid:loadLibrary', reason);\n return RSVP.reject(REASONS.ERROR_LOAD_LIBRARY);\n });\n}\n\nfunction _setConfig(hbPrebid) {\n var biddersConfig, pbjsConfig;\n\n biddersConfig = hbPrebid.biddersConfig;\n // NOTE: set custom config object\n pbjsConfig = {\n debug: _constants.SHOW_LOGS,\n enableSendAllBids: hbPrebid.enableSendAllBids || true,\n priceGranularity: 'dense',\n consentManagement: {\n cmpApi: 'iab',\n timeout: 8000,\n allowAuctionWithoutConsent: true\n }\n };\n\n (0, _logger.showLog)('Prebid:setConfig:biddersConfig', biddersConfig);\n window.pbjs.bidderSettings = _fetchBiddersSettings(biddersConfig);\n window.pbjs.setConfig(pbjsConfig);\n (0, _logger.showLog)('Prebid:setConfig:Show Prebid config', window.pbjs.getConfig());\n}\n\n/**\n * Add adUnits config and make prebid call\n * @param {object} config - hbPrebid config from configGDPMedio\n */\nfunction _fetchBid(hbPrebid) {\n var adUnits, timeout;\n\n adUnits = hbPrebid.adUnits;\n timeout = hbPrebid.timeout || _constants.DEFAULT_PREBID_LOAD_TIMEOUT;\n\n return new RSVP.Promise(function (resolve, reject) {\n if (!adUnits.length) {\n (0, _logger.showLog)('Prebid:fetchBid:There are not adUnits');\n reject(REASONS.EMPTY_ADUNITS);\n return;\n }\n window.pbjs.que.push(function () {\n (0, _logger.showLog)('Prebid:fetchBid:Add adUnits', adUnits);\n window.pbjs.addAdUnits(adUnits);\n (0, _logger.showLog)('Prebid:fetchBid:Request Prebid');\n window.pbjs.requestBids({\n timeout: timeout,\n bidsBackHandler: function bidsBackHandler(biddersResponse) {\n (0, _logger.showLog)('Prebid:fetchBid:Response from Prebid', biddersResponse);\n if (Object.keys(biddersResponse).length === 0) {\n reject(REASONS.TIMEOUT_REACHED_FETCH_BIDS);\n return;\n }\n (0, _logger.showLog)('Prebid:fetchBid:Targetings', window.pbjs.getAdserverTargeting());\n _adserverRequestResponse = true;\n resolve();\n }\n });\n });\n });\n}\n\n/**\n * Build bidders settings from config\n * @param {object} biddersConfig - biddersConfig from configGDPMedio.hbPrebid\n * @return {object} bidderSettings\n */\nfunction _fetchBiddersSettings(biddersConfig) {\n var bidderSettings = {};\n\n Object.keys(biddersConfig).forEach(function (bidderName) {\n bidderSettings[bidderName] = {\n bidCpmAdjustment: function bidCpmAdjustment(bidCpm, bid) {\n var percent;\n\n percent = 1 - ('percent' in biddersConfig[bidderName] ? biddersConfig[bidderName].percent / 100 : 0);\n // NOTE: adjust the bid in real time before the auction takes place\n (0, _logger.showLog)('Prebid:fetchBiddersSettings:bidCpmAdjustment Bidder is:', bid.bidderCode, 'with percent:', percent);\n // NOTE: return bidCpm * .85; Ex.: rest 15% to the gross price\n return bidCpm * percent;\n }\n };\n });\n\n return bidderSettings;\n}\n\n/***/ }),\n\n/***/ 33:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _constants = __webpack_require__(0);\n\nvar _logger = __webpack_require__(1);\n\nexports.default = Object.preventExtensions({\n processConfig: function processConfig(configManager) {\n (0, _logger.showLog)('HBConfigManager:processConfig:Process HB config');\n _processPrebidConfig(configManager);\n _processAmazonConfig(configManager);\n }\n});\n\n/**\n * Process Prebid HB config to set dynamicId\n * @param {object} configManager\n */\n\nfunction _processPrebidConfig(configManager) {\n var property, adUnits, newConfig, biddersDisabled;\n var headerBidding = configManager.configGDPMedio.headerBidding;\n\n\n (0, _logger.showLog)('HBConfigManager:processPrebidConfig:Process Prebid config');\n\n if (!headerBidding) {\n (0, _logger.showLog)('HBConfigManager:processPrebidConfig:There are not Prebid configuration');\n configManager.configGDPMedio.hbPrebid = null;\n return;\n }\n\n property = 'adUnits_' + configManager.deviceType;\n if (!(property in headerBidding) || !headerBidding[property].length) {\n (0, _logger.showLog)('HBConfigManager:processPrebidConfig:There are not bidders to device type', configManager.deviceType);\n configManager.configGDPMedio.hbPrebid = null;\n return;\n }\n\n // NOTE: 'disabled' key has the disabled bidders separated by comma\n biddersDisabled = [];\n if ('disabled' in headerBidding.biddersConfig) {\n biddersDisabled = headerBidding.biddersConfig.disabled.map(function (current) {\n return current.trim();\n });\n }\n\n adUnits = [];\n headerBidding[property].forEach(function (current) {\n var position,\n newBids = [];\n\n position = current.code.replace(new RegExp('(' + _constants.OLD_PREFIX + '|' + _constants.NEW_SUFFIX + ')', 'g'), '');\n if (!configManager.existePosEnConfigGDPMedio(position)) {\n (0, _logger.showWarn)('HBConfigManager:processPrebidConfig:Position ' + position + ' does not exists in configGDPMedio');\n return;\n }\n if (!configManager.isActive({ position: position })) {\n (0, _logger.showWarn)('HBConfigManager:processPrebidConfig:Position ' + position + ' is not active');\n return;\n }\n\n current.code += configManager.dynamicId ? '-' + configManager.dynamicId : '';\n\n if (biddersDisabled.length) {\n current.bids.forEach(function (bid) {\n if (biddersDisabled.indexOf(bid.bidder) < 0) {\n newBids.push(bid);\n }\n });\n } else {\n newBids = current.bids;\n }\n\n if (!newBids.length) {\n (0, _logger.showWarn)('HBConfigManager:processPrebidConfig:Remove adUnit ' + current.code + ' because all bidders are disabled');\n return;\n }\n\n current.bids = newBids;\n adUnits.push(current);\n });\n\n newConfig = {\n adUnits: adUnits,\n biddersConfig: headerBidding.biddersConfig,\n enableSendAllBids: headerBidding.enableSendAllBids,\n timeout: headerBidding.timeout || _constants.DEFAULT_PREBID_LOAD_TIMEOUT\n };\n\n delete configManager.configGDPMedio.headerBidding;\n configManager.configGDPMedio.hbPrebid = newConfig;\n}\n\n/**\n * Process Amazon HB config to set dynamicId and slotName\n * @param {object} configManager\n */\nfunction _processAmazonConfig(configManager) {\n var property, slots, newConfig;\n var hbAmazon = configManager.configGDPMedio.hbAmazon;\n\n\n if (!hbAmazon) {\n (0, _logger.showLog)('HBConfigManager:processAmazonConfig:There are not Amazon configuration');\n configManager.configGDPMedio.hbAmazon = null;\n return;\n }\n\n property = 'slots_' + configManager.deviceType;\n if (!(property in hbAmazon) || !hbAmazon[property].length) {\n (0, _logger.showLog)('HBConfigManager:processAmazonConfig:There are not slots to device type', configManager.deviceType);\n configManager.configGDPMedio.hbAmazon = null;\n return;\n }\n\n slots = [];\n hbAmazon[property].forEach(function (current) {\n var position;\n\n position = current.slotID.replace(new RegExp('(' + _constants.OLD_PREFIX + '|' + _constants.NEW_SUFFIX + ')', 'g'), '');\n if (!configManager.existePosEnConfigGDPMedio(position)) {\n (0, _logger.showWarn)('HBConfigManager:processAmazonConfig:Position ' + position + ' does not exists in configGDPMedio');\n return;\n }\n if (!configManager.isActive({ position: position })) {\n (0, _logger.showWarn)('HBConfigManager:processAmazonConfig:Position ' + position + ' is not active');\n return;\n }\n\n current.slotName = _getAmazonSlotName(configManager, position);\n current.slotID += configManager.dynamicId ? '-' + configManager.dynamicId : '';\n slots.push(current);\n });\n\n newConfig = {\n slots: slots,\n timeout: hbAmazon.timeout || _constants.DEFAULT_AMAZON_LOAD_TIMEOUT\n };\n\n configManager.configGDPMedio.hbAmazon = newConfig;\n}\n\nfunction _getAmazonSlotName(configManager, position) {\n var params;\n\n var container$ = $('[data-voc-vam-position = \\'' + position + '\\']', configManager.context$);\n if (container$.length) {\n params = configManager.normalizaParams(container$);\n } else {\n params = configManager.normalizaParams({ position: position });\n }\n\n return configManager.getOasSitepage(params);\n}\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.isEmpty = isEmpty;\nexports.getParameterByName = getParameterByName;\nexports.load = load;\nexports.cargaLibreriaGPT = cargaLibreriaGPT;\nexports.extend = extend;\nexports.endsWith = endsWith;\nexports.startsWith = startsWith;\n\nvar _logger = __webpack_require__(1);\n\nvar _constants = __webpack_require__(0);\n\nvar _files = {};\n\n/**\n * Check if a object is empty or is undefined. Not be used for arrays or strings\n * @param {mixed} value\n * @return {boolean}\n */\nfunction isEmpty(value) {\n // OK\n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && Object.keys(value).length || (typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object' && typeof value !== 'undefined') {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get a URL param value\n * @param {string} paramName\n * @param {string} url\n */\nfunction getParameterByName(paramName) {\n var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.location.href;\n\n var regExp, results;\n\n // NOTE: replace the '[element]' with '\\[element\\]' using '\\\\$&'\n paramName = paramName.replace(/[[\\]]/g, '\\\\$&');\n regExp = new RegExp('[?&]' + paramName + '(=([^&#]+)|&|#|$)');\n results = regExp.exec(url);\n\n if (!results) return '';\n if (!results[2]) return '';\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\nfunction load(url) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var promise, file, key;\n\n key = url.split('?').shift();\n if (Object.hasOwnProperty.call(_files, key)) {\n return _files[key];\n }\n\n options.type = options.type || 'script';\n\n file = document.createElement(options.type);\n switch (options.type) {\n case 'link':\n file.type = 'text/css';\n file.rel = 'stylesheet';\n file.href = url;\n break;\n case 'script':\n default:\n file.type = 'text/javascript';\n file.src = url;\n file.async = true;\n options.text && (file.text = options.text);\n break;\n }\n\n promise = new window.RSVP.Promise(function (resolve, reject) {\n file.onload = function () {\n return resolve(file);\n };\n file.onerror = reject;\n\n document.head.appendChild(file);\n });\n\n _files[key] = promise;\n return promise;\n}\n\n/**\n * Carga del JS para la publicidad de Google\n */\nfunction cargaLibreriaGPT() {\n var gads, useSSL, node;\n window.googletag = window.googletag || {};\n window.googletag.cmd = window.googletag.cmd || [];\n window.customcmd = window.customcmd || [];\n try {\n if ($('script[src*=\\'' + _constants.GPT_URL + '\\']').length === 0) {\n gads = document.createElement('script');\n gads.async = true;\n gads.type = 'text/javascript';\n useSSL = document.location.protocol === 'https:';\n gads.src = (useSSL ? 'https:' : 'http:') + ('//' + _constants.GPT_URL);\n node = document.getElementsByTagName('script')[0];\n node.parentNode.insertBefore(gads, node);\n window.googletag.cmd.push(function () {\n var func;\n (0, _logger.showLog)('First function', window.customcmd.length);\n while (window.customcmd.length) {\n func = window.customcmd.splice(0, 1)[0];\n window.googletag.cmd.push(func);\n }\n (0, _logger.showLog)('Finish Pushing to googletag.cmd', window.customcmd.length);\n window.customcmd = window.googletag.cmd;\n });\n }\n } catch (err) {\n (0, _logger.showError)('Utils:cargaLibreriaGPT:Error loading GPT library');\n }\n}\n\nfunction extend() {\n var args = arguments;\n var objectValues = Object.keys(args).map(function (e) {\n return args[e];\n });\n // sustituto de Object.values(args)\n\n objectValues.forEach(function (argument, pos) {\n pos !== 0 && Object.keys(argument).forEach(function (key) {\n args[0][key] = argument[key];\n });\n });\n\n return args[0];\n}\n\nfunction endsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n}\n\nfunction startsWith(str, needle) {\n return str.indexOf(needle) === 0;\n}\n\n/***/ }),\n\n/***/ 7:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.extend = extend;\nfunction extend(destination, source) {\n Object.keys(source).forEach(function (key) {\n destination[key] = source[key];\n });\n}\n\n/***/ }),\n\n/***/ 79:\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(21);\n\n\n/***/ }),\n\n/***/ 8:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"name\":\"vam\",\"version\":\"3.11.0\",\"description\":\"\",\"main\":\"src/index.js\",\"scripts\":{\"test\":\"./node_modules/.bin/nyc ./node_modules/.bin/mocha-webpack tests/index.js --require jsdom-global/register --webpack-config webpack.test.js\",\"tdd\":\"./node_modules/.bin/mocha-webpack tests/index.js --require jsdom-global/register --webpack-config webpack.test.js --watch\",\"start\":\"./node_modules/.bin/webpack-dev-server --open --config webpack.dev.js\",\"build\":\"./node_modules/.bin/webpack --optimize-minimize --config webpack.prod.js\",\"prebid\":\"cd ./node_modules/prebid.js/ && npm install && \\\"./node_modules/.bin/gulp\\\" build --modules=../../src/header-bidding/prebid-modules.json && cd ../..\"},\"contributors\":[\"Jose Manuel Ortega \",\"Ernesto V. \",\"Iván Pérez \",\"Mario Cadenas \"],\"license\":\"SEE LICENSE IN LICENSE.md\",\"devDependencies\":{\"babel-core\":\"^6.26.0\",\"babel-eslint\":\"^8.0.1\",\"babel-loader\":\"^7.1.2\",\"babel-plugin-syntax-dynamic-import\":\"^6.18.0\",\"babel-polyfill\":\"^6.16.0\",\"babel-preset-env\":\"^1.6.1\",\"chai\":\"^4.1.2\",\"chalk\":\"^1.1.3\",\"clean-webpack-plugin\":\"^0.1.17\",\"copy-webpack-plugin\":\"^4.3.1\",\"css-loader\":\"^0.28.4\",\"eslint\":\"^4.7.2\",\"eslint-config-airbnb-base\":\"^12.0.1\",\"eslint-plugin-import\":\"^2.7.0\",\"extract-text-webpack-plugin\":\"^1.0.1\",\"file-loader\":\"^1.1.6\",\"html-loader\":\"^0.5.5\",\"html-webpack-plugin\":\"^2.30.1\",\"json-loader\":\"^0.5.7\",\"mocha\":\"^4.0.1\",\"mocha-loader\":\"^1.0.0\",\"mocha-phantomjs\":\"^4.1.0\",\"mocha-webpack\":\"^1.0.1\",\"nyc\":\"^11.4.1\",\"style-loader\":\"^0.18.2\",\"webpack\":\"^3.10.0\",\"webpack-dev-server\":\"^2.9.7\",\"webpack-merge\":\"^4.1.1\",\"webpack-shell-plugin\":\"^0.5.0\"},\"dependencies\":{\"jquery-inview\":\"^1.1.2\",\"js-cookie\":\"^2.1.4\",\"prebid.js\":\"1.10.0\",\"rijndael-js\":\"^1.0.0\",\"rsvp\":\"^3.5.0\"}}\n\n/***/ }),\n\n/***/ 9:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _configManager = __webpack_require__(33);\n\nvar _configManager2 = _interopRequireDefault(_configManager);\n\nvar _application = __webpack_require__(2);\n\nvar _application2 = _interopRequireDefault(_application);\n\nvar _utils = __webpack_require__(4);\n\nvar _logger = __webpack_require__(1);\n\nvar _constants = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar URL_PARAM_ALL = 'all';\n\nvar _dynamicId = -1,\n _prevEncryptedCode = '',\n _prevUnencryptedCode = '';\n\nvar ConfigManager = function () {\n function ConfigManager(configGDPMedio, configGDP) {\n _classCallCheck(this, ConfigManager);\n\n _prevEncryptedCode = '';\n _prevUnencryptedCode = '';\n this.configGDPMedio = (0, _utils.extend)({}, configGDPMedio);\n this.configGDP = (0, _utils.extend)({}, configGDP);\n this.deviceType = _getTipoDispositivo.call(this);\n this.pageType = _getTipoPagina.call(this);\n this.dynamicId = ++_dynamicId;\n this.context$ = null;\n this.isResponsiveMedia = _isResponsiveMedia.call(this);\n this.capturadorDataPreview = '';\n this.valueUserType = _getValueUser();\n this.delayedPositions = _getDelayed.call(this);\n this.prioritizedPositions = _getPrioritized.call(this);\n this.globalTargetings = _getDefineSlotTargetings.call(this);\n }\n\n /**\n * Process the configGDPMedia\n */\n\n\n _createClass(ConfigManager, [{\n key: 'processConfig',\n value: function processConfig() {\n _configManager2.default.processConfig(this);\n }\n\n /**\n * Check if a position is enabled or disabled\n * @param {object} params\n * @return {boolean}\n */\n\n }, {\n key: 'isActive',\n value: function isActive(params) {\n // OK\n var container$, configPosition, configSchedules, currentDate, found;\n\n // check if all positions or the given in params are actives by URL\n if ('forceActivePosition' in this.configGDPMedio && (this.configGDPMedio.forceActivePosition.indexOf('1') > -1 || this.configGDPMedio.forceActivePosition.indexOf(URL_PARAM_ALL) > -1 || this.configGDPMedio.forceActivePosition.indexOf(params.position) > -1)) {\n return true;\n }\n\n container$ = $('#' + this.getIdDiv(params));\n configPosition = _application2.default.lookup('posicion_' + this.deviceType + '.' + params.position, this.configGDP);\n\n // Checking that the config of the device type is added\n\n if (!(0, _utils.isEmpty)(configPosition)) {\n // Check if the position is active for the page type\n if (configPosition.desactivadoen && configPosition.desactivadoen.length && configPosition.desactivadoen !== '' && configPosition.desactivadoen.indexOf(this.pageType) !== -1) {\n (0, _logger.showLog)('ConfigManager:isActive:Position ' + params.position + ' is not active for the pageType ' + this.pageType);\n container$.trigger(_constants.SLOT_INACTIVE);\n return false;\n }\n\n // Check if the position has programming\n currentDate = Math.round(+new Date() / 1000);\n found = false;\n configSchedules = _application2.default.lookup('posicion_' + this.deviceType + '.' + params.position + '.programaciones', this.configGDP);\n if (!(0, _utils.isEmpty)(configSchedules) && configSchedules.length) {\n found = configSchedules.some(function (current) {\n var beginDate, endDate;\n beginDate = current.programacion ? current.programacion.fecha_in : 0;\n endDate = current.programacion ? current.programacion.fecha_fin : 0;\n return (beginDate === 0 || currentDate >= beginDate) && (endDate === 0 || currentDate <= endDate);\n });\n\n if (!found) {\n (0, _logger.showLog)('ConfigManager:isActive:Position ' + params.position + ' is not active for the current date');\n container$.trigger(_constants.SLOT_INACTIVE);\n return false;\n }\n }\n } else {\n (0, _logger.showLog)('ConfigManager:isActive:Position ' + params.position + ' is not active');\n container$.trigger(_constants.SLOT_INACTIVE);\n return false;\n }\n\n return true;\n }\n\n /**\n * Generate position identifier\n * FUTURE: Clean this method when all pages(ABC, MH, PPLL) use the\n * new ADS strategy(PREFIX or SUFIX come from GDP)\n * @param {object} params\n * @return {string}\n */\n\n }, {\n key: 'getIdDiv',\n value: function getIdDiv(params) {\n // OK\n var adsId, dynamicId;\n\n (0, _logger.showLog)('ConfigManager:getIdDiv:Dinamic ID', params.dynamicId, this.dynamicId);\n dynamicId = this.dynamicId ? '-' + this.dynamicId : '';\n if (params.dynamicId !== undefined) {\n dynamicId = params.dynamicId ? '-' + params.dynamicId : '';\n }\n if (params.id && typeof params.id === 'string') {\n (0, _logger.showLog)('ConfigManager:getIdDiv:With Id param', params);\n adsId = params.id.indexOf(_constants.OLD_PREFIX) > -1 ? params.id : '' + _constants.OLD_PREFIX + params.id;\n if (!$('#' + adsId).length) {\n (0, _logger.showLog)('ConfigManager:getIdDiv:With Id param. Not found ID', adsId);\n adsId = params.id.indexOf(_constants.NEW_SUFFIX) > -1 ? params.id : '' + params.id + _constants.NEW_SUFFIX;\n }\n adsId += (0, _utils.endsWith)(adsId, dynamicId) ? '' : dynamicId;\n (0, _logger.showLog)('ConfigManager:getIdDiv:With Id param. Id calculated', adsId);\n } else {\n (0, _logger.showLog)('ConfigManager:getIdDiv:No Id param', params);\n adsId = '' + _constants.OLD_PREFIX + params.position;\n if (!$('#' + adsId).length) {\n (0, _logger.showLog)('ConfigManager:getIdDiv:No Id param. Not found ID', adsId);\n adsId = '' + params.position + _constants.NEW_SUFFIX + dynamicId;\n }\n (0, _logger.showLog)('ConfigManager:getIdDiv:No Id param. Id calculated', adsId);\n }\n\n return adsId;\n }\n\n /**\n * Check if position exist in media config\n * @param {string} position\n * @param {string} deviceType\n * @returns {boolean} - TRUE if exist, FALSE otherwise\n */\n\n }, {\n key: 'existePosEnConfigGDPMedio',\n value: function existePosEnConfigGDPMedio(position) {\n var deviceType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.deviceType;\n // OK\n var idAds;\n\n if (!(0, _utils.isEmpty)(_application2.default.lookup('posicion_' + deviceType + '.' + position, this.configGDPMedio))) {\n return true;\n }\n // If position do not exist, hide the container DIV\n idAds = this.getIdDiv({ position: position });\n $('#' + idAds).length && $('#' + idAds).hide();\n\n return false;\n }\n\n /**\n * Normalize the position's parameters\n */\n\n }, {\n key: 'normalizaParams',\n value: function normalizaParams(data) {\n // OK\n var params, outOfPage, idAds, offset;\n\n params = {};\n // jQuery object or JSON object\n if (data instanceof $) {\n (0, _utils.extend)(params, _constants.DEFAULTS, {\n position: data.data('voc-vam-position') || null,\n serverType: data.data('voc-vam-servertype') || _getServerType.call(this, params.position),\n hideNoAds: data.data('voc-vam-hidenoads'),\n outOfPage: data.data('voc-vam-outofpage'),\n defineSlot: data.data('voc-vam-defineslot') || _getDefineSlotParam.call(this),\n refresh: data.data('voc-vam-refresh'),\n responsive: data.data('voc-vam-responsive'),\n pre_callback: data.data('voc-vam-precallback') || '',\n pre_event: data.data('voc-vam-preevent') || '',\n post_callback: data.data('voc-vam-postcallback') || '',\n post_event: data.data('voc-vam-postevent') || '',\n oas: data.data('voc-vam-oas') || '',\n tags: data.data('voc-vam-tags'),\n dynamicId: this.dynamicId\n });\n } else {\n (0, _utils.extend)(params, _constants.DEFAULTS, {\n position: data.position || null,\n id: data.id || null,\n serverType: data.serverType || _getServerType.call(this, params.position),\n hideNoAds: data.hideNoAds,\n outOfPage: data.outOfPage,\n defineSlot: data.defineSlot || _getDefineSlotParam.call(this),\n refresh: data.refresh,\n responsive: data.responsive,\n pre_callback: data.pre_callback || '',\n pre_event: data.pre_event || '',\n post_callback: data.post_callback || '',\n post_event: data.post_event || '',\n oas: data.oas || '',\n tags: data.tags,\n dynamicId: data.dynamicId || this.dynamicId\n });\n }\n\n // if some required parameter is missing, return null\n if (params.position === null) {\n (0, _logger.showWarn)('ConfigManager:normalizaParams:Position param is required', data);\n return null;\n }\n\n if (!this.existePosEnConfigGDPMedio(params.position)) {\n (0, _logger.showWarn)('ConfigManager:normalizaParams:Position ' + params.position + ' does not exists in configGDPMedio');\n return null;\n }\n\n // OutOfPage param\n if (typeof params.outOfPage !== 'boolean') {\n outOfPage = _application2.default.lookup('posicion_' + this.deviceType + '.' + params.position + '.outofpage', this.configGDPMedio);\n params.outOfPage = (0, _utils.isEmpty)(outOfPage) || typeof outOfPage !== 'boolean' ? false : outOfPage;\n }\n\n // ads container DIV\n idAds = this.getIdDiv(params);\n if (!$('#' + idAds).length && $('[data-voc-vam-position = \\'' + params.position + '\\']', this.context$).length && !$('[data-voc-vam-position = \\'' + params.position + '\\']', this.context$).attr('id')) {\n $('[data-voc-vam-position = \\'' + params.position + '\\']', this.context$).attr('id', idAds);\n }\n params.id = idAds;\n\n // global targetings\n if (!params.tags) {\n params.tags = _application2.default.lookup('posicion_' + this.deviceType + '.' + params.position + '.targetings', this.configGDPMedio) || {};\n }\n\n // offset\n offset = _application2.default.lookup('posicion_' + this.deviceType + '.' + params.position + '.offset', this.configGDP);\n if (!(0, _utils.isEmpty)(offset)) {\n $('#' + params.id).attr('data-offset', offset);\n (0, _logger.showLog)('ConfigManager:normalizaParams:Offset ' + offset + ' configurer for position: ' + params.position);\n }\n\n // build the responsive parameter if it doesn't come in the data\n if (!params.outOfPage && !params.responsive && this.isResponsiveMedia) {\n params.responsive = _getResponsiveParam.call(this, params);\n }\n\n return params;\n }\n\n /**\n * Get OAS value from config\n * FUTURE: create final OAS config on GDP\n * @return string\n */\n\n }, {\n key: 'getOasSitepage',\n value: function getOasSitepage() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var oasSitepage, decryptedURL, legacyAdUnit, regExp, result, macroEdition, edition;\n\n if (params.oas) {\n oasSitepage = params.oas.trim();\n } else {\n oasSitepage = _application2.default.lookup('OAS.' + this.deviceType + '.' + this.pageType, this.configGDP);\n oasSitepage = (0, _utils.isEmpty)(oasSitepage) ? '' : oasSitepage.trim();\n }\n\n // check if adUnit is forced by URL\n try {\n decryptedURL = ConfigManager.decryptedURL();\n if (window.location.href.indexOf('vam_adunit=') > -1 || window.location.href.indexOf('adunit=') > -1 || decryptedURL !== '') {\n legacyAdUnit = window.location.href.indexOf('vam_adunit=') > -1 ? 'vam_adunit' : 'adunit';\n regExp = new RegExp('(\\\\?|&)' + legacyAdUnit + '=([^?&]+)');\n result = decryptedURL !== '' ? regExp.exec(decryptedURL) : regExp.exec(window.location.href);\n\n if (result) {\n oasSitepage = result[2].indexOf('/' + _constants.GPT_ID_VOCENTO + '/') > -1 ? result[2] : '/' + _constants.GPT_ID_VOCENTO + '/' + result[2];\n }\n }\n } catch (err) {\n (0, _logger.showError)('ConfigManager:getOasSitepage:Error checking adUnit', err);\n }\n\n // check macro edition\n try {\n regExp = /{(\\/)?edicion(\\/)?}/;\n macroEdition = regExp.exec(oasSitepage);\n if (macroEdition) {\n edition = _getEdition();\n if ((0, _utils.startsWith)(macroEdition[0], '{/') && edition) edition = '/' + edition;\n if ((0, _utils.endsWith)(macroEdition[0], '/}') && edition) edition += '/';\n\n oasSitepage = oasSitepage.replace(macroEdition[0], edition);\n }\n } catch (err) {\n (0, _logger.showError)('ConfigManager:getOasSitepage:Error checking edition', err);\n }\n\n // Guardamos el valor del adunit calculado por si no lo esta\n if (typeof this.configGDP.OAS.adunit === 'undefined') this.configGDP.OAS.adunit = oasSitepage;\n\n return oasSitepage;\n }\n\n /**\n * Calculate the sizes for a given position\n * FUTURE: move config to GDP\n * @param {string} position\n * @param {string} deviceType - default is _deviceType\n * @return {object}\n */\n\n }, {\n key: 'getSizesGoogle',\n value: function getSizesGoogle(position) {\n var deviceType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.deviceType;\n // OK\n var configSize, size, defineSlot;\n\n configSize = _application2.default.lookup('posicion_' + deviceType + '.' + position + '.dimensiones', this.configGDPMedio);\n\n size = !(0, _utils.isEmpty)(configSize) ? configSize : '[]';\n defineSlot = _getDefineSlotParam.call(this);\n\n if (size.indexOf('[fluid]') > -1) {\n if (!defineSlot) return ['fluid'];\n\n size = size.replace('[fluid]', '\\'fluid\\'');\n }\n\n return defineSlot ? size : JSON.parse(size);\n }\n\n /**\n * Detect forced config by URL.\n * Support params:\n * vam_adunit\n * vam_cmvkey\n * vam_debug\n * vam_enable_single_request\n * vam_enable_sync_rendering\n * vam_enable_krux\n * vam_force_positions\n * vam_info_slot\n */\n\n }, {\n key: 'checkConfigFromURL',\n value: function checkConfigFromURL() {\n var legacyCode, code, prebidDisabledBidders;\n if (typeof window.location === 'undefined') return;\n\n // Disable Prebid\n if ('headerBidding' in this.configGDPMedio && window.location.href.indexOf('vam_prebid_disabled=') > -1) {\n prebidDisabledBidders = (0, _utils.getParameterByName)('vam_prebid_disabled', window.location.href).split(',');\n this.configGDPMedio.headerBidding.biddersConfig.disabled = prebidDisabledBidders;\n if (prebidDisabledBidders.indexOf(URL_PARAM_ALL) > -1) {\n this.configGDPMedio.headerBidding = null;\n }\n }\n\n // Disable HB Amazon\n if ('hbAmazon' in this.configGDPMedio) {\n this.configGDPMedio.hbAmazon = window.location.href.indexOf('vam_amazon_disabled=1') > -1 || window.location.href.indexOf('gdp_enableAmazonAds=0') > -1 || !this.configGDPMedio.enableAmazonAds ? false : this.configGDPMedio.hbAmazon;\n }\n\n // Single Request\n this.configGDPMedio.singleRequest = window.location.href.indexOf('vam_single_request=1') > -1 || window.location.href.indexOf('gdp_singleRequest=1') > -1 || this.configGDPMedio.singleRequest;\n\n // SyncRendering\n this.configGDPMedio.syncRendering = window.location.href.indexOf('vam_sync_rendering=1') > -1 || window.location.href.indexOf('gdp_syncRendering=1') > -1 || this.configGDPMedio.syncRendering;\n\n // Krux\n this.configGDPMedio.enableKrux = window.location.href.indexOf('vam_krux=1') > -1 || window.location.href.indexOf('gdp_enableKrux=1') > -1 || this.configGDPMedio.enableKrux;\n\n // Force active position\n this.configGDPMedio.forceActivePosition = window.location.href.indexOf('vam_force_positions=') > -1 ? (0, _utils.getParameterByName)('vam_force_positions', window.location.href).split(',') : (0, _utils.getParameterByName)('gdp_forceActivePosition', window.location.href).split(',');\n\n // InfoSlot\n this.configGDPMedio.infoSlot = window.location.href.indexOf('vam_info_slot=1') > -1 || window.location.href.indexOf('gdp_infoSlot=1') > -1;\n if (this.configGDPMedio.infoSlot) {\n (0, _utils.load)(_constants.VAM_CSS_URL, {\n type: 'link'\n }).then(function () {\n (0, _logger.showLog)('ConfigManager:checkConfigFromURL:CSS loaded', _constants.VAM_CSS_URL);\n });\n }\n\n // Capturador (modo preview)\n this.configGDPMedio.preview = window.location.href.indexOf('vam_preview') > -1 || window.location.href.indexOf('preview') > -1;\n if (this.configGDPMedio.preview) {\n (0, _logger.showLog)('ConfigManager:checkConfigFromURL:Detected capture mode. Call capture SW');\n this.capturadorDataPreview = _capturadorGetPreviewData();\n\n // En modo capturador no pondremos priorizadas ni retrasadas\n this.configGDP.priorizadas = {};\n this.configGDP.retrasadas = {};\n }\n\n // Previsualizador\n if (window.location.href.indexOf('vam_code=') > -1 || window.location.href.indexOf('code=') > -1) {\n (0, _logger.showLog)('ConfigManager:checkConfigFromURL:Detected preview mode');\n legacyCode = window.location.href.indexOf('vam_code=') > -1 ? 'vam_code' : 'code';\n code = (0, _utils.getParameterByName)(legacyCode, window.location.href);\n _prevEncryptedCode = decodeURI(code);\n\n // En modo previsualizador no pondremos priorizadas ni retrasadas\n this.configGDP.priorizadas = {};\n this.configGDP.retrasadas = {};\n\n if (_prevEncryptedCode !== '') {\n __webpack_require__.e/* import() */(0).then(__webpack_require__.bind(null, 39)).then(function (Rijndael) {\n (0, _logger.showLog)('ConfigManager:Rijndael library is loaded', Rijndael);\n _decriptUrl(Rijndael);\n });\n }\n }\n }\n\n /**\n * Comprobacion de si existen excepciones para la pagina donde nos encontramos.\n * @return object configGDP\n */\n\n }, {\n key: 'checkExceptions',\n value: function checkExceptions() {\n var value, unixTime, beginDate, endDate;\n\n if (this.configGDPMedio.excepciones && Object.keys(this.configGDPMedio.excepciones).length > 0) {\n (0, _logger.showLog)('ConfigManager:checkExceptions:There are configured exceptions');\n Object.keys(this.configGDPMedio.excepciones).forEach(function (key) {\n if (key !== 'priorizadas' && key !== 'retrasadas') {\n if (window.location.pathname === key || window.location.pathname.match(key)) {\n value = this.configGDPMedio.excepciones[key];\n unixTime = Math.round(new Date() / 1000);\n beginDate = value.fecha_in;\n endDate = value.fecha_fin;\n if ((beginDate === 0 || beginDate <= unixTime) && (endDate === 0 || unixTime <= endDate)) {\n this.configGDP = value;\n (0, _logger.showLog)('ConfigManager:checkExceptions:Applying the following exception:\"' + key + '\"');\n }\n }\n }\n }, this);\n }\n }\n\n /**\n * Funcion que devuelve la URL desencriptada\n * @returns {string}\n */\n\n }, {\n key: 'isDelayed',\n\n\n /**\n * Funcion que comprueba si una posicion es retrasada\n * FUTURE: listaRetrasadas come in array format from GDP\n */\n value: function isDelayed(position) {\n return this.thereAreDelayedPositions() && this.delayedPositions.indexOf(position) > -1;\n }\n }, {\n key: 'thereAreDelayedPositions',\n value: function thereAreDelayedPositions() {\n return this.delayedPositions.length;\n }\n\n /**\n * Funcion que comprueba si una posicion es retrasada\n * FUTURE: listaRetrasadas come in array format from GDP\n */\n\n }, {\n key: 'isPrioritized',\n value: function isPrioritized(position) {\n return this.thereArePrioritizedPositions() && this.prioritizedPositions.indexOf(position) > -1;\n }\n }, {\n key: 'thereArePrioritizedPositions',\n value: function thereArePrioritizedPositions() {\n return this.prioritizedPositions.length;\n }\n }, {\n key: 'removePrioritizedPosition',\n value: function removePrioritizedPosition(position) {\n var index = this.prioritizedPositions.indexOf(position);\n\n if (index !== -1) {\n this.prioritizedPositions.splice(index, 1);\n }\n }\n }], [{\n key: 'decryptedURL',\n value: function decryptedURL() {\n return _prevUnencryptedCode;\n }\n }]);\n\n return ConfigManager;\n}();\n\nexports.default = ConfigManager;\n\n/* Private */\n\n/**\n * Get the device type depending on the size of the screen\n * @return string\n */\n\nfunction _getTipoDispositivo() {\n // OK\n var max, min, screenWidth, deviceType;\n\n deviceType = 'desktop';\n\n if (!this.configGDPMedio.responsive.esResponsive) {\n if (this.configGDPMedio && this.configGDPMedio.tipoDispositivo) {\n deviceType = this.configGDPMedio.tipoDispositivo;\n }\n } else {\n screenWidth = parseInt(window.innerWidth, 10);\n\n Object.keys(this.configGDPMedio.responsive).forEach(function (key) {\n var value = this.configGDPMedio.responsive[key];\n if (key !== 'esResponsive' && (value.resolucionMaxima || value.resolucionMinima)) {\n max = value.resolucionMaxima ? value.resolucionMaxima : 999999;\n min = value.resolucionMinima ? value.resolucionMinima : 0;\n\n if (screenWidth <= max && screenWidth > min) {\n deviceType = key.replace('resolucion', '').toLowerCase();\n }\n }\n }, this);\n }\n\n return deviceType;\n}\n\n/**\n * Look for the medium where we are, from the configuration\n * @return string\n */\nfunction _getMedio() {\n // OK\n return this.configGDPMedio.medio ? this.configGDPMedio.medio : '';\n}\n\n/**\n * Get the page type from the URL pattern\n * NOTE: Each medium has its own URL rules so each one has its own function to calculate them\n * FUTURE: set the page type in global namespace on each page\n */\nfunction _getTipoPagina() {\n // OK\n var pageType = 'portada',\n medio = _getMedio.call(this);\n\n if (['abc', 'lavozdigital', 'abcdesevilla'].indexOf(medio) > -1) {\n pageType = _getTipoPaginaABC();\n } else if (medio === 'mujerhoy') {\n pageType = _getTipoPaginaMujerhoy();\n } else {\n pageType = _getTipoPaginaPortalesLocales();\n }\n\n return pageType;\n}\n\n/**\n * Get the page type from the URL for abc.es, sevilla.abc.es and lavozdigital.es\n * @return {string}\n */\nfunction _getTipoPaginaABC() {\n // OK\n var oldVideosRegExp, videosRegExp, oldGaleryRegExp2, oldGaleryRegExp, galeryRegExp, graphicRegExp, oldNewsRegExp, newsRegExp;\n\n oldVideosRegExp = /\\/videos\\/(.*)?\\/\\d{6}\\/\\d{2}\\/((?!index.html).)*.html/;\n videosRegExp = /_video.html/;\n if (videosRegExp.exec(window.location.pathname) || oldVideosRegExp.exec(window.location.pathname)) return 'video';\n\n oldGaleryRegExp2 = /\\/multimedia\\/fotos\\/(.*)?\\/((?!index.html).)*.html/;\n oldGaleryRegExp = /\\/fotos-(.*)?\\/\\d{8}\\/((?!index.html).)*.html/;\n galeryRegExp = /_galeria.html/;\n if (galeryRegExp.exec(window.location.pathname) || oldGaleryRegExp.exec(window.location.pathname) || oldGaleryRegExp2.exec(window.location.pathname)) return 'galeria';\n\n graphicRegExp = /\\/multimedia\\/(graficos\\/(.)*|infografias)\\/((?!index.html).)*.html/;\n if (graphicRegExp.exec(window.location.pathname)) return 'grafico';\n\n oldNewsRegExp = /\\d{8}\\/(.*)?((?!index.html).)*.html/;\n newsRegExp = /(_noticia.html|_directo.html)/;\n if (newsRegExp.exec(window.location.pathname) || oldNewsRegExp.exec(window.location.pathname)) return 'noticia';\n\n return 'portada';\n}\n\n/**\n * Get the page type from the URL for mujerhoy.com\n * @return {string}\n */\nfunction _getTipoPaginaMujerhoy() {\n // OK\n var videoRegExp, oldVideoRegExp, videoBlogRegExp, isVideo, galeryRegExp, oldGaleryRegExp, galeryBlogRegExp, isGalery, newsRegExp, newsBlogRegExp, newsRecipesRegExp, isNews;\n\n videoRegExp = /-vi.html/;\n oldVideoRegExp = /\\/videos\\/(.*)?\\/\\d{6}\\/\\d{2}\\/.*-mm.html/;\n videoBlogRegExp = /\\/videos\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/(.*).html/;\n isVideo = window.location.hostname.indexOf('blogs.') > -1 ? videoBlogRegExp.exec(window.location.pathname) : videoRegExp.exec(window.location.pathname) || oldVideoRegExp.exec(window.location.pathname);\n if (isVideo) return 'video';\n\n galeryRegExp = /-ga.html/;\n oldGaleryRegExp = /^\\/galerias\\/(.*)?\\d{6}\\/\\d{2}\\/.*-mm.html/;\n galeryBlogRegExp = /\\/galerias\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/(.*).html/;\n isGalery = window.location.hostname.indexOf('blogs.') > -1 ? galeryBlogRegExp.exec(window.location.pathname) : galeryRegExp.exec(window.location.pathname) || oldGaleryRegExp.exec(window.location.pathname);\n if (isGalery) return 'galeria';\n\n newsRegExp = /\\/\\d{6}\\/\\d{2}\\/((?!index.html).)*.html/;\n newsBlogRegExp = /\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/((?!index.html).)*.html/;\n newsRecipesRegExp = /\\/\\d{6}\\/((?!index.html).)*.html/;\n if (window.location.hostname.indexOf('blogs.') > -1) {\n isNews = newsBlogRegExp.exec(window.location.pathname);\n } else if (window.location.hostname.indexOf('recetas.') > -1) {\n isNews = newsRecipesRegExp.exec(window.location.pathname);\n } else {\n isNews = newsRegExp.exec(window.location.pathname);\n }\n if (isNews) return 'noticia';\n\n return 'portada';\n}\n\n/**\n * Get the page type from the URL for PPLL\n * @return {string}\n */\nfunction _getTipoPaginaPortalesLocales() {\n // OK\n var videoRegExp, oldVideoRegExp, galeryRegExp, oldGaleryRegExp, newsRegExp, oldNewsRegExp, graphicRegExp, oldGraphicRegExp, videoChatRegExp;\n\n videoRegExp = /-(vi|virc|vivo)(_amp)?.html/;\n oldVideoRegExp = /^\\/videos\\/(.*)?\\/\\d{6}\\/\\d{2}\\/.*-mm.html/;\n if (videoRegExp.exec(window.location.pathname) || oldVideoRegExp.exec(window.location.pathname)) return 'video';\n\n galeryRegExp = /-(ga|garc|gavo|ft|ftrc|ftvo)(_amp)?.html/;\n oldGaleryRegExp = /^\\/fotos\\/(.*)?\\d{6}\\/\\d{2}\\/.*-mm.html/;\n if (galeryRegExp.exec(window.location.pathname) || oldGaleryRegExp.exec(window.location.pathname)) return 'galeria';\n\n newsRegExp = /-(nt|ntrc|ntvo)(_amp)?.html/;\n oldNewsRegExp = /\\/\\d{6}\\/\\d{2}\\/((?!index.html).)*.html/;\n if (newsRegExp.exec(window.location.pathname) || oldNewsRegExp.exec(window.location.pathname)) return 'noticia';\n\n // NOTA: En PLs, a nivel de publicidad, contemplaremos graficos y videochats como noticias\n graphicRegExp = /-(in|inrc|invo)(_amp)?.html/;\n oldGraphicRegExp = /^\\/graficos\\/(.*)?\\/\\d{6}\\/\\d{2}\\/.*-mm.html/;\n videoChatRegExp = /\\/videochats\\/((?!index.html).)\\w+/;\n if (graphicRegExp.exec(window.location.pathname) || oldGraphicRegExp.exec(window.location.pathname) || videoChatRegExp.exec(window.location.pathname)) return 'noticia';\n\n return 'portada';\n}\n\n/**\n * Get defineSlot param from config\n * @return {boolean|undefined}\n */\nfunction _getDefineSlotParam() {\n // OK\n return this.configGDPMedio.defineSlot || undefined;\n}\n\n/**\n * Get the serverType of given position\n * @param {string} position\n * @return {string}\n */\nfunction _getServerType(position) {\n // OK\n var configServerType,\n serverType = 'google';\n\n configServerType = _application2.default.lookup('posicion_' + this.deviceType + '.' + position + '.tipo', this.configGDPMedio);\n serverType = !(0, _utils.isEmpty)(configServerType) ? configServerType : serverType;\n\n return serverType;\n}\n\n/**\n * Check if is responsive from config\n * @return {boolean}\n */\nfunction _isResponsiveMedia() {\n // OK\n var isResponsive = _application2.default.lookup('responsive.esResponsive', this.configGDPMedio);\n\n return !(0, _utils.isEmpty)(isResponsive) ? isResponsive : false;\n}\n\n/**\n * Build responsive param for the position\n * @return object\n */\nfunction _getResponsiveParam(params) {\n // OK\n if (params.responsive && Array.isArray(params.responsive) && params.responsive.length) {\n return params.responsive;\n }\n\n /**\n * It doesn't have responsive param but it is\n * responsive medium so we build responsive param with\n * the corresponding resolutions and sizes\n */\n if (this.isResponsiveMedia) {\n return _createResponsive.call(this, params.position);\n }\n\n return false;\n}\n\n/**\n * Build responsive param\n * FUTURE: move config to GDP\n * @return object\n */\nfunction _createResponsive(position) {\n // OK\n var responsive, resolution, minWidth, maxWidth, dimension, googleSize, size;\n\n (0, _logger.showLog)('ConfigManager:createResponsive:Build responsive for', position);\n responsive = [];\n this.configGDPMedio.dispositivos.forEach(function (device) {\n if (!this.existePosEnConfigGDPMedio(position, device)) return;\n\n resolution = _application2.default.lookup('responsive.resolucion' + device, this.configGDPMedio);\n if (!(0, _utils.isEmpty)(resolution)) {\n minWidth = resolution.resolucionMinima;\n maxWidth = resolution.resolucionMaxima;\n\n if (!(0, _utils.isEmpty)(minWidth) && !(0, _utils.isEmpty)(maxWidth) && (minWidth || maxWidth)) {\n dimension = [parseInt(minWidth, 10) || 0, _constants.ALTOS_MINIMOS_DISPOSITIVOS[device]];\n\n googleSize = this.getSizesGoogle(position, device);\n try {\n if (googleSize && googleSize.indexOf('fluid') > -1) {\n size = 'fluid';\n } else {\n size = JSON.parse(googleSize);\n }\n } catch (e) {\n (0, _logger.showWarn)('ConfigManager:createResponsive:Processing position ' + position + ': ' + e);\n size = googleSize;\n }\n\n // Insert the dimension mapping ordered from lowest to highest by width\n responsive.push([dimension, size]);\n }\n }\n }, this);\n responsive.sort(function (pair1, pair2) {\n return pair1[0][0] - pair2[0][0];\n });\n\n responsive.sort(function (pair1, pair2) {\n return pair1[0][0] - pair2[0][0];\n });\n (0, _logger.showLog)('ConfigManager:createResponsive:Build responsive param for position ' + position, responsive);\n\n return responsive;\n}\n\n/**\n * Get edition from config\n */\nfunction _getEdition() {\n // OK\n var editions = _application2.default.lookup(_constants.EDITIONS_NAMESPACE);\n\n return editions.current || editions.main || '';\n}\n\n/**\n * Invoca al Servicio Web del Capturador para obtener las creatividades indicadas en el parametro\n * preview directamente desde DFP.\n */\nfunction _capturadorGetPreviewData() {\n var legacyPreview, url, data;\n\n legacyPreview = window.location.href.indexOf('vam_preview') > -1 ? 'vam_preview' : 'preview';\n url = _constants.CAPTURADOR_WS + '?id=' + (0, _utils.getParameterByName)(legacyPreview);\n data = '';\n $.ajax({\n url: url,\n type: 'POST',\n async: false,\n success: function success(result) {\n data = result;\n }\n });\n\n return data;\n}\n\n/**\n * Convert Gigya user format to advertising format\n */\nfunction _getValueUser() {\n // OK\n var valueUser,\n arrayUsers = {\n suscriptor: 's',\n trial: 't',\n registrado: 'r',\n anonimo: 'a'\n };\n\n valueUser = arrayUsers[_application2.default.getUserType()] || 'a';\n\n return valueUser;\n}\n\nfunction _getDelayed() {\n var delayedPositions;\n\n delayedPositions = _application2.default.lookup('retrasadas.' + this.deviceType + '.listaPosiciones', this.configGDP);\n\n if ((0, _utils.isEmpty)(delayedPositions) || !delayedPositions.length) {\n (0, _logger.showLog)('ConfigManager:getDelayed:There are NOT delayed positions');\n return [];\n }\n\n (0, _logger.showLog)('ConfigManager:getDelayed:There are delayed positions:', delayedPositions);\n delayedPositions = delayedPositions.split(',').filter(function (position) {\n return position.trim();\n });\n\n return delayedPositions;\n}\n\nfunction _getPrioritized() {\n var prioritizedPositions;\n\n prioritizedPositions = _application2.default.lookup('priorizadas.' + this.deviceType + '.listaPosiciones', this.configGDP);\n\n if ((0, _utils.isEmpty)(prioritizedPositions) || !prioritizedPositions.length) {\n (0, _logger.showLog)('ConfigManager:getPrioritized:There are NOT prioritized positions');\n return [];\n }\n\n (0, _logger.showLog)('ConfigManager:getDelayed:There are prioritized positions:', prioritizedPositions);\n prioritizedPositions = prioritizedPositions.split(',').filter(function (position) {\n return position.trim();\n });\n\n return prioritizedPositions;\n}\n\n/**\n * Decrypt url to get cmvkey param\n * @param {object} mcrypt - Rijndael object\n */\nfunction _decriptUrl(Rijndael) {\n var legacyCmvkey, mcrypt, preparedCode;\n (0, _logger.showLog)('ConfigManager:decriptUrl:Actual prevUnencryptedCode', _prevUnencryptedCode, 'and prevEncryptedCode', _prevEncryptedCode);\n if (_prevUnencryptedCode === '' && _prevEncryptedCode !== '') {\n mcrypt = new Rijndael(_constants.MCRYPT_KEY, 'cbc');\n (0, _logger.showLog)('ConfigManager:decriptUrl:Decrypting', mcrypt);\n preparedCode = atob(_prevEncryptedCode).split('').map(function (value) {\n return value.charCodeAt(0);\n });\n _prevUnencryptedCode = '?' + mcrypt.decrypt(preparedCode, 256, _constants.MCRYPT_KEY);\n (0, _logger.showLog)('ConfigManager:decriptUrl:', _prevUnencryptedCode);\n // NOTE: remove special characters from string\n _prevUnencryptedCode = _prevUnencryptedCode.replace(/[^A-Za-z 0-9.,?\"\"!@#$%^&*()\\-_=+;:<>/\\\\|}{[\\]`~]*/g, '');\n\n if ((0, _utils.endsWith)(_prevUnencryptedCode, '&vam_cmvkey=') || (0, _utils.endsWith)(_prevUnencryptedCode, '&cmvkey=')) {\n legacyCmvkey = (0, _utils.endsWith)(_prevUnencryptedCode, '&vam_cmvkey=') ? '&vam_cmvkey=' : '&cmvkey=';\n _prevUnencryptedCode = _prevUnencryptedCode.replace(legacyCmvkey, '');\n }\n (0, _logger.showLog)('ConfigManager:decriptUrl:String decrypted: ' + _prevUnencryptedCode);\n }\n\n return _prevUnencryptedCode;\n}\n\n/**\n * Funcion que obtiene los tag definidos en los archivos de configuración\n * FUTURE: move config to GDP\n * @return object\n */\nfunction _getDefineSlotTargetings() {\n var medioTargetings, pageTargetings, targetings, defineSlotTargetings;\n\n medioTargetings = this.configGDPMedio.targetings ? this.configGDPMedio.targetings : {};\n pageTargetings = this.configGDP.targetings ? this.configGDP.targetings : {};\n targetings = {};\n (0, _utils.extend)(targetings, medioTargetings, pageTargetings);\n\n defineSlotTargetings = '';\n Object.keys(targetings).forEach(function (key) {\n defineSlotTargetings += '.setTargeting(\"' + key + '\", \"' + targetings[key] + '\")';\n });\n\n return defineSlotTargetings;\n}\n\n/***/ })\n\n/******/ });\n});\n\n\n// WEBPACK FOOTER //\n// vam.js"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonpAdsManager\"];\n \twindow[\"webpackJsonpAdsManager\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t4: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = \"text/javascript\";\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"\" + ({\"0\":\"rijndael-js\"}[chunkId]||chunkId) + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//static.vocento.com/vam/3.11.0/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 79);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a6b5eab5e59be6a86bd8","export const NAMESPACE = 'vocento';\nexport const PROMISES_PROPERTY = '__PROMISES__';\nexport const DEFAULT_TIMEOUT = 2000;\nexport const VOCUSER_COOKIE = 'voc_uid';\nexport const PAYWALL_COOKIE = 'voc_paywall';\nexport const SHOW_LOGS = document.location.search.indexOf('vam_debug=1') > -1 || document.location.search.indexOf('gdp_debug=1') > -1;\nexport const DEFAULT_LOG_TEMPLATE = '[Ads Manager]';\nexport const CONFIG_NAMESPACE = 'vocento.config.vam';\nexport const EDITIONS_NAMESPACE = 'vocento.site.editions';\nexport const GPT_ID_VOCENTO = '4900';\nexport const GPT_READY = 'vam:gpt:ready';\nexport const GPT_TIMEOUT = 2000;\nexport const TIMEOUT_POSICIONES_ESTANDAR = 3000;\nexport const ALTOS_MINIMOS_DISPOSITIVOS = {\n mobile: 0,\n tablet: 200,\n desktop: 300\n};\nexport const POSITION_FLUID = \"'fluid'\";\nexport const SLOT_RENDERED = 'vam:slotrendered';\nexport const SLOT_EMPTY = 'vam:isempty';\nexport const SLOT_VIEWABLE = 'vam:viewable';\nexport const SLOT_INACTIVE = 'vam:inactive';\nexport const DEFAULTS = {\n hideNoAds: true,\n refresh: false,\n responsive: false\n};\nexport const CAPTURADOR_WS = '//publi.cmvocento.com/capturador/preview';\nexport const MCRYPT_KEY = 'acsNdl09acs72AEdacsNdl09acs72AEd';\nexport const VAM_CSS_URL = '//netssl.vocento.com/cmvocento/css/vam.css';\nexport const JSON_GDP2_0 = 0;\nexport const JSON_GDP2_1 = 1;\nexport const JSON_GDP2_2 = 2;\nexport const NOMBRE_FORMATO_JSON = ['GDP2.0', 'GDP2.1', 'GDP2.2+'];\nexport const GPT_URL = 'www.googletagservices.com/tag/js/gpt.js';\n\n/* header bidding */\nexport const HEADER_BIDDING_READY = 'vam:headerbidding:ready';\nexport const PREBID_URL = `${process.env.ASSET_PATH}prebid.js`;\nexport const DEFAULT_PREBID_LOAD_TIMEOUT = 7000;\nexport const AMAZON_URL = '//c.amazon-adsystem.com/aax2/apstag.js';\nexport const DEFAULT_AMAZON_LOAD_TIMEOUT = 7000;\nexport const AMAZON_CONFIG = {\n pubID: '3470', // Amazon publisher ID\n adServer: 'googletag' // AdServer type that contains apstag line-items\n};\n\n/* legacy */\nexport const OLD_PREFIX = 'publi_';\nexport const NEW_SUFFIX = '-id';\n\n\n\n// WEBPACK FOOTER //\n// ./src/constants.js","import {\n SHOW_LOGS,\n DEFAULT_LOG_TEMPLATE\n} from './constants';\n\nexport function showLog() {\n SHOW_LOGS && console.log(DEFAULT_LOG_TEMPLATE, ...arguments);\n}\n\nexport function showWarn() {\n SHOW_LOGS && console.warn(DEFAULT_LOG_TEMPLATE, ...arguments);\n}\n\nexport function showError() {\n SHOW_LOGS && console.error(DEFAULT_LOG_TEMPLATE, ...arguments);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/logger.js","import Evented from './mixins/evented';\nimport Deferred from './mixins/deferred';\nimport User from './mixins/user';\nimport {extend} from './mixins/mixin';\n\nconst\n _scripts = {},\n _hasOwnProperty = Object.prototype.hasOwnProperty\n;\n\nconst Application = {\n load(url, options = {}) {\n var promise, script, src, key;\n\n src = url;\n key = url.split('?').shift();\n if (_hasOwnProperty.call(_scripts, key)) {return _scripts[key];}\n\n script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = src;\n script.async = true;\n options.text && (script.text = options.text);\n\n promise = new window.RSVP.Promise((resolve, reject) => {\n script.onload = () => resolve(script);\n script.onerror = reject;\n\n document.head.appendChild(script);\n });\n\n _scripts[key] = promise;\n return promise;\n }\n};\n\nextend(Application, Evented);\nextend(Application, Deferred);\nextend(Application, User);\n\nexport default Application;\n\n\n\n// WEBPACK FOOTER //\n// ./src/application.js","import './check-dependencies';\nimport './legacy/dfp-pixel';\nimport pkg from '../package.json';\nimport app from './application';\nimport Advertising from './advertising';\nimport ConfigManager from './config-manager';\nimport {isEmpty} from './utils';\nimport {CONFIG_NAMESPACE} from './constants';\nimport { showLog } from './logger';\n\nconst {$} = window;\nvar _initialized = false;\n\n_legacyInit();\n$(document).ready(function() {\n var config = app.lookup(CONFIG_NAMESPACE);\n\n config = !isEmpty(config) ? config : {\n media: window.configGDPMedio,\n options: window.configGDP\n };\n _init(config.media, config.options);\n});\n\nexport const VERSION = pkg.version;\n\n/* Private */\n\n/**\n * Build legacy object\n * @deprecated\n */\nfunction _legacyInit() {\n window.Vocento = window.Vocento || {};\n window.Vocento.Publicidad = function() {};\n window.Vocento.Publicidad.prototype = {\n init(jQuery, configGDPMedio, configGDP) {\n _init(configGDPMedio, configGDP);\n },\n printAds(datos) {\n return Advertising.printAds(datos);\n },\n getOasSitepage(...params) {\n return Advertising.getOasSitepage(...params);\n },\n getSizesGoogle(...params) {\n return Advertising.getSizesGoogle(...params);\n },\n getValueUser(...params) {\n return Advertising.getValueUser(...params);\n }\n };\n}\n\nfunction _init(configGDPMedio, configGDP) {\n const voontoApp = 'Voonto' in window && 'getInstance' in window.Voonto\n ? window.Voonto.getInstance()\n : undefined;\n var configManager;\n\n if (_initialized) {return;}\n\n if (!configGDPMedio || !configGDP) {throw Error('[Ads Manager] missing configuration');}\n\n _initialized = true;\n // promise to wait advertising user consent\n voontoApp.when('consent:advertising').then(result => {\n showLog('Advertising Consent promise has been resolved with result: ', result);\n window.customcmd.push(() => {\n window.googletag.pubads().setRequestNonPersonalizedAds(result ? 0 : 1);\n });\n });\n\n voontoApp.on('consent:updated:advertising', (event, result) => {\n showLog('Advertising Consent has been updated with result: ', result);\n window.customcmd.push(() => {\n window.googletag.pubads().setRequestNonPersonalizedAds(result ? 0 : 1);\n });\n });\n\n configManager = new ConfigManager(configGDPMedio, configGDP);\n Advertising.init(configManager, false);\n _printAds();\n\n if (voontoApp) {\n voontoApp.on('voonto:reload', _reload);\n voontoApp.on('vam:refresh', _refresh);\n }\n app.on('voonto:reload', _reload);\n app.on('vam:refresh', _refresh);\n}\n\n\n/**\n * Print Ads configured inside context or whole page\n * Config must be passed to Advertising.init before calling printAds()\n * @param {null|jQueryObject} context$\n */\nfunction _printAds(context$) {\n $('[data-voc-vam]', context$).each(function () {\n Advertising.printAds($(this));\n });\n}\n\n/**\n * Reload ads inside given context with given config\n * @param {jQueryEvent} event\n * @param {null|jQueryObject} context$\n */\nfunction _reload(event, context$) {\n var config = context$.data('voc-vam-configgdp') || app.lookup(CONFIG_NAMESPACE);\n var forcedOas = context$.data('voc-vam-force-oas') || '';\n var configManager;\n\n config.options.OAS = forcedOas.length > 0\n ? _forceNewOas(config.options.OAS, forcedOas)\n : config.options.OAS;\n configManager = new ConfigManager(config.media, config.options);\n showLog('Reload event has been invoked. Config value: ', config);\n Advertising.init(configManager, true, context$);\n _printAds(context$);\n}\n\n/**\n * Refresh the ads position received on 'data' parameter\n * @param {string|object} data\n */\nfunction _refresh(event, data) {\n var params = typeof data === 'string' ? JSON.parse(data) : data;\n\n Advertising.printAds(params);\n}\n\nfunction _forceNewOas(config, newOas) {\n if (config.adunit) {\n config.adunit = config.adunit.replace(new RegExp('portada$', 'g'), newOas.toString());\n }\n config.desktop.portada = config.desktop.portada.replace(new RegExp('portada$', 'g'), newOas.toString());\n config.mobile.portada = config.mobile.portada.replace(new RegExp('portada$', 'g'), newOas.toString());\n showLog(`New OAS has been set, using value \"${newOas}\"`);\n\n return config;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","import {DEFAULT_LOG_TEMPLATE} from './constants';\n\n// NOTE: jQuery checking\nif (!('$' in window) || typeof window.$ !== 'function') {\n throw Error(`${DEFAULT_LOG_TEMPLATE} missing jQuery library on page`);\n}\n\n// NOTE: Cookies checking\nif (!('Cookies' in window) || typeof window.Cookies !== 'function') {\n throw Error(`${DEFAULT_LOG_TEMPLATE} missing Cookies library on page`);\n}\n\n// NOTE: RSVP checking\nif (!('RSVP' in window) || typeof window.RSVP !== 'object') {\n throw Error(`${DEFAULT_LOG_TEMPLATE} missing RSVP library on page`);\n}\n\n// NOTE: InView jQuery Plugin checking\nif (!('event' in window.$) ||\n !('special' in window.$.event) ||\n !('inview' in window.$.event.special) ||\n typeof window.$.event.special.inview !== 'object'\n) {\n throw Error(`${DEFAULT_LOG_TEMPLATE} missing InView jQuery plugin on page`);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/check-dependencies.js","import app from '../application';\n\nconst\n UserTypes = Object.freeze({\n ANONYMOUS: 'anonimo'\n }),\n Genders = Object.freeze({\n FEM: 'f',\n MAS: 'm'\n }),\n VOCUSER_READY = 'vocuser:ready',\n VOCUSER_DATA = 'vocuser:userdata'\n;\n\n$(document).ready(function() {\n app.when(VOCUSER_READY).then(_onVocUserReady);\n $('body').on('vocento.gigya.products.onReady', function(event, gigyaux) {\n var gigyaUX;\n\n gigyaUX = gigyaux || window.gigyaUX;\n if (gigyaUX) {_onVocUserReady(gigyaUX);}\n });\n});\n\n/* Private */\n\nfunction _ord() {\n return Math.random() * 10000000000000;\n}\n\nfunction _onVocUserReady(gigyaux) {\n if (gigyaux.getUserType() === UserTypes.ANONYMOUS) {\n $('head').append(``);\n } else {\n $('head').append(``);\n if (typeof Voonto !== 'undefined') {\n app.when(VOCUSER_DATA).then(function(userData) {\n var gender, age;\n\n // NOTE: vocUserData promise object\n if (userData.responseGetUserInfo) {\n gender = userData.responseGetUserInfo.user &&\n userData.responseGetUserInfo.user.gender ?\n userData.responseGetUserInfo.user.gender : null;\n age = userData.responseGetUserInfo.user &&\n userData.responseGetUserInfo.user.age ?\n userData.responseGetUserInfo.user.age : null;\n }\n _onVocUserData(gender, age);\n });\n } else {\n $('body').on('vocento.gigya.accounts.onDataReady', function(event) {\n var gender, age;\n\n // NOTE: vocUserData promise object\n if (event.gigya_event) {\n gender = event.gigya_event.profile &&\n event.gigya_event.profile.gender ?\n event.gigya_event.profile.gender : null;\n age = event.gigya_event.profile &&\n event.gigya_event.profile.age ?\n event.gigya_event.profile.age : null;\n }\n _onVocUserData(gender, age);\n });\n }\n }\n}\n\nfunction _onVocUserData(gender, age) {\n switch (gender) {\n case Genders.FEM:\n $('head').append(``);\n break;\n case Genders.MAS:\n $('head').append(``);\n break;\n default:\n }\n\n switch (true) {\n case age !== '' && age <= 17:\n $('head').append(``);\n break;\n case age >= 18 && age <= 24:\n $('head').append(``);\n break;\n case age >= 25 && age <= 34:\n $('head').append(``);\n break;\n case age >= 35 && age <= 44:\n $('head').append(``);\n break;\n case age >= 45 && age <= 54:\n $('head').append(``);\n break;\n case age !== '' && age < 54:\n $('head').append(``);\n break;\n default:\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/legacy/dfp-pixel.js","import {showLog} from '../logger';\n\nconst Evented = Object.preventExtensions({\n on() {window.$(this).on(...arguments);},\n one() {window.$(this).one(...arguments);},\n off() {window.$(this).off(...arguments);},\n trigger() {\n showLog('Evented::trigger', ...arguments);\n window.$(this).trigger(...arguments);\n }\n});\n\nexport default Evented;\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/evented.js","import Globalized from './globalized';\nimport {extend} from './mixin';\nimport {\n NAMESPACE,\n DEFAULT_TIMEOUT,\n PROMISES_PROPERTY,\n DEFAULT_LOG_TEMPLATE\n} from '../constants';\nimport {showLog} from '../logger';\n\nconst\n _defers = {},\n _hasOwnProperty = Object.prototype.hasOwnProperty\n;\n\nconst Deferred = {\n whenUntil(promiseNS, time = DEFAULT_TIMEOUT) {\n showLog('[Deferred] whenUntil', {promiseNS, time});\n return new window.RSVP.Promise((resolve, reject) => {\n setTimeout(reject, time);\n this.when(promiseNS).then(resolve);\n });\n },\n\n when(promiseNS) {\n var owner, name, global;\n\n showLog('[Deferred] when', promiseNS);\n\n if (!promiseNS) {throw Error(`${DEFAULT_LOG_TEMPLATE} [Deferred] At least 1 argument needed. 0 passed.`);}\n [owner, name] = promiseNS.split(':');\n if (!owner || !name) {throw Error(`${DEFAULT_LOG_TEMPLATE} [Deferred] Illegal promise namespace name. Expected \"owner:name\".`);}\n\n if (_hasOwnProperty.call(_defers, promiseNS)) {return _defers[promiseNS].promise;}\n\n global = this.createGlobal(`${NAMESPACE}.${owner}.${PROMISES_PROPERTY}`);\n global[name] = window.RSVP.defer();\n _defers[promiseNS] = global[name];\n\n return global[name].promise;\n },\n\n promised(promiseNS, value) {\n var owner, name, global;\n\n showLog('[Deferred] promised', {promiseNS, value});\n\n if (!promiseNS) {throw Error(`${DEFAULT_LOG_TEMPLATE} [Deferred] At least 1 argument needed. 0 passed.`);}\n [owner, name] = promiseNS.split(':');\n if (!owner || !name) {throw Error(`${DEFAULT_LOG_TEMPLATE} [Deferred] Illegal promise namespace name. Expected \"owner:name\".`);}\n\n if (_hasOwnProperty.call(_defers, promiseNS)) {\n _defers[promiseNS].resolve(value);\n return this;\n }\n\n global = this.createGlobal(`${NAMESPACE}.${owner}.${PROMISES_PROPERTY}`);\n global[name] = window.RSVP.defer();\n global[name].resolve(value);\n _defers[promiseNS] = global[name];\n\n return this;\n }\n};\n\nextend(Deferred, Globalized);\n\nexport default Deferred;\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/deferred.js","import {NAMESPACE} from '../constants';\n\nconst Globalized = {\n createGlobal(namespace) {\n var nso = window;\n\n if (!namespace) {return undefined;}\n\n namespace.split('.').forEach((prop) => {\n nso[prop] = nso[prop] || {};\n nso = nso[prop];\n });\n\n return nso;\n },\n\n lookup(namespace = NAMESPACE, root = window) {\n return namespace.split('.').reduce((that, o) => {\n return that && o in that ? that[o] : {};\n }, root);\n }\n};\n\nexport default Globalized;\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/globalized.js","import {\n PAYWALL_COOKIE,\n VOCUSER_COOKIE\n} from '../constants';\n\nconst\n {Cookies} = window,\n UserType = Object.freeze({\n ANONYMOUS: 'anonimo',\n REGISTERED: 'registrado',\n SUBSCRIBER: 'suscriptor',\n TRIAL: 'trial'\n })\n;\n\nconst User = {\n getUserType() {\n var userType, paywall, pwUserType, vocUid, cookie;\n\n vocUid = decodeURIComponent(Cookies.get(VOCUSER_COOKIE));\n cookie = vocUid === 'undefined' ? {} : _jsonParse(vocUid);\n userType = UserType.ANONYMOUS; // <'anonimo' | 'registrado' | 'trial' | 'suscriptor'>\n paywall = Cookies.get(PAYWALL_COOKIE);\n if (paywall) {pwUserType = paywall.split('|').pop();}\n\n if (pwUserType) {\n userType = pwUserType;\n } else if (cookie.uid) {\n userType = UserType.REGISTERED;\n }\n\n return userType;\n }\n};\n\nexport default User;\n\n/* Private */\n\nfunction _jsonParse(vocUid) {\n var result;\n\n try {\n result = JSON.parse(vocUid);\n } catch (e1) {\n // NOTE: fix issue https://agil.vocento.com/browse/MEC-2575\n vocUid = vocUid.replace(/\\+/g, '');\n try {\n result = JSON.parse(vocUid);\n } catch (e2) {\n result = {};\n }\n }\n\n return result;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/user.js","import {version} from '../package.json';\nimport HBProviderManager from './header-bidding/provider-manager';\nimport app from './application';\nimport ConfigManager from './config-manager';\nimport {\n cargaLibreriaGPT,\n isEmpty\n} from './utils';\nimport {\n showLog,\n showWarn,\n showError\n} from './logger';\nimport {\n GPT_READY,\n GPT_TIMEOUT,\n TIMEOUT_POSICIONES_ESTANDAR,\n POSITION_FLUID,\n SLOT_RENDERED,\n SLOT_EMPTY,\n SLOT_VIEWABLE,\n HEADER_BIDDING_READY\n} from './constants';\n\nvar\n _configManager = null,\n _standardDelayed = [],\n _gptInitialized = false,\n _insertedPositions = {},\n _notDisplayedSlots = [],\n _completadasPriorizadas = false,\n _reload = false\n;\n\nclass Advertising {\n /**\n * Function that initialize the advertising\n * @param {object} app - Evented object\n * @param {object} configGDPMedio\n * @param {object} configGDP\n * @param {context} context$\n */\n static init(configManager, reload, context$) {\n var kruxSegments, kruxUser;\n\n _configManager = null;\n _standardDelayed = [];\n _gptInitialized = false;\n _insertedPositions = {};\n _notDisplayedSlots = [];\n _completadasPriorizadas = false;\n _reload = reload;\n _configManager = configManager;\n _configManager.context$ = context$;\n\n // Detectamos si se fuerza via URL alguna configuracion\n _configManager.checkConfigFromURL();\n\n if (!_configManager.configGDPMedio.activo) {\n showWarn('Advertising:init:The advertising has been deactivated in the configuration of the medium!');\n return;\n }\n showLog(`Advertising:init:deviceType: ${_configManager.deviceType} , pageType: ${_configManager.pageType} , (Version ${version})`);\n\n if (!_reload) {\n _configManager.processConfig();\n }\n\n\n // Load HB and GPT libraries soon as posible for not penalize the ad visualization\n if (!_reload) {\n showLog('init:HeaderBidding init');\n HBProviderManager.init(_configManager.configGDPMedio);\n cargaLibreriaGPT();\n }\n\n\n // Inicializacion de la libreria GPT\n window.customcmd.push(function() {\n /**\n * Setting nonPersonalizedAds by default to 1.\n * if promise is resolved this value will be updated with\n * value received in the promise.\n * */\n if (!_reload) {\n window.googletag.pubads().setRequestNonPersonalizedAds(1);\n }\n window.googletag.pubads().collapseEmptyDivs();\n kruxSegments = app.lookup('Krux.vocento.segments');\n kruxUser = app.lookup('Krux.vocento.user');\n /**\n * Ambos namespace se setean unicamente en antiguo, en lo nuevo no existe.\n */\n if (_configManager.configGDPMedio.enableKrux\n && ['object', 'undefined'].indexOf(typeof kruxSegments) < 0\n && ['object', 'undefined'].indexOf(typeof kruxUser) < 0\n ) {\n window.googletag.pubads().setTargeting('ksg', window.Krux.vocento.segments);\n window.googletag.pubads().setTargeting('kuid', window.Krux.vocento.user);\n }\n _configManager.configGDPMedio.singleRequest &&\n window.googletag.pubads().enableSingleRequest();\n _configManager.configGDPMedio.syncRendering &&\n window.googletag.pubads().enableSyncRendering();\n window.googletag.enableServices();\n\n // Disparamos el evento de GPT inicializada\n showLog(`En constructor. Disparamos evento ${GPT_READY}`);\n app.trigger(GPT_READY);\n _gptInitialized = true;\n });\n\n /* NOTE: Disparamos el evento de GPT inicializado tras N segundos para liberar posibles\n recursos que esten bloqueados */\n setTimeout(function () {\n if (!_gptInitialized) {\n showWarn(`Advertising:init:Trigger event ${GPT_READY} after ${GPT_TIMEOUT}`);\n app.trigger(GPT_READY);\n }\n }, GPT_TIMEOUT);\n\n // Tratamiento de excepciones\n _configManager.checkExceptions();\n\n // Gestion de eventos de pintado de publicidad\n window.customcmd.push(function () {\n /**\n * Solo se añaden los eventListeners de slotRenderEnded e impressionViewable\n * en la primera carga. De esta forma optimizamos el rendimiento y solo se lanzan\n * los eventos necesarios y no se encolan.\n */\n if (!_reload) {\n // Gestion de evento slotRenderEnded\n window.googletag.pubads().addEventListener('slotRenderEnded', function (ev) {\n var divId, position, container$, paramsSlot, index, found;\n\n divId = ev.slot.getSlotElementId();\n position = ev.slot.getTargeting('pos');\n container$ = $(`#${divId}`);\n paramsSlot = container$.data('params');\n index = -1;\n\n if (ev.isEmpty) {\n showLog(`En constructor. slotRenderEnded. La posicion ${position} isEmpty`);\n container$.trigger(SLOT_EMPTY);\n if (_configManager.configGDPMedio.infoSlot) _infoSlotRender(paramsSlot, false);\n } else {\n showLog(`En constructor. slotRenderEnded. La posicion ${position} ha sido pintada en el DIV ${divId}`);\n container$.trigger(SLOT_RENDERED);\n if (_configManager.configGDPMedio.infoSlot) _infoSlotRender(paramsSlot, true);\n }\n\n // Añadimos el data que nos informa de que la posicion ha sido pintada.\n container$.get(0).dataset.vocVamDisplayed = true;\n\n // Comprobacion si tiene eventos post_callback o post_event\n if (paramsSlot) {\n if (paramsSlot.post_callback) {\n showLog(`En constructor. slotRenderEnded. La posicion ${position} tiene el siguiente postCallback: ${paramsSlot.post_callback}`);\n paramsSlot.post_callback();\n }\n\n if (paramsSlot.post_event) {\n showLog(`En constructor. slotRenderEnded. La posicion ${position} tiene el siguiente postEvent: ${paramsSlot.post_event}`);\n app.trigger(paramsSlot.post_event);\n }\n }\n\n // Quitamos la posicion de la lista de posiciones priorizadas\n _configManager.removePrioritizedPosition();\n\n // Quitamos la posicion de la lista de posiciones estandar encoladas\n if (_configManager.thereArePrioritizedPositions() &&\n _standardDelayed.length && !_configManager.isPrioritized(paramsSlot)\n ) {\n found = _standardDelayed.find(function(parameters) {\n index++;\n return parameters.position === position[0];\n });\n if (found) {\n _standardDelayed.splice(index, 1);\n }\n }\n\n // Si esta era la ultima priorizada pintamos las estandar\n if (!_completadasPriorizadas && (!_configManager.thereArePrioritizedPositions())) {\n _completadasPriorizadas = true;\n _displayStandarQueued();\n }\n });\n\n // Gestion de evento impressionViewable\n window.googletag.pubads().addEventListener('impressionViewable', function (ev) {\n var divId = ev.slot.getSlotElementId();\n var position = ev.slot.getTargeting('pos');\n var container$ = $(`#${divId}`);\n\n showLog(`En constructor. impressionViewable. La posicion ${position} es visible`);\n container$.trigger(SLOT_VIEWABLE);\n });\n }\n });\n\n /* NOTE: Si hay posiciones priorizadas las pintamos e invocamos el pintado de las estandar\n una vez pintadas estas */\n if (_configManager.thereArePrioritizedPositions()) {\n _displayPrioritized();\n\n /* NOTE: Si han transcurrido N segundos y todavia no se han lanzado las posiciones\n estandar las forzamos */\n setTimeout(function () {\n if (_standardDelayed.length) {\n showWarn(`Advertising:init:Display queued positions after ${TIMEOUT_POSICIONES_ESTANDAR}`);\n _completadasPriorizadas = true;\n _displayStandarQueued();\n }\n }, TIMEOUT_POSICIONES_ESTANDAR);\n }\n }\n\n /**\n * Muestra la Advertising.\n * @param {Object} datos - Puede ser un DIV obtenido con jQuery con los atributos de\n * configuracion, o bien un objeto JSON con la configuracion a aplicar\n *\n * Descripcion de parametros que puede contener el objeto JSON:\n * position => string. Posicion publicitaria a mostrar\n * id => string. ID del elemento HTML en el que se muestra\n * serverType => string. Servidor de publicidad a usar\n * hideNoAds => boolean. Oculta el elemento HTML si el adserver no ha devuelto publi\n * outOfPage => boolean. Determina si el slot de publicidad es outOfPage o no. Por\n * defecto vale false\n * defineSlot => boolean. Indica si hay que definir o no el slot\n * refresh => boolean. Se pide la posicion de publicidad aunque ya se hubiera mostrado\n * antes. Por defecto false\n * responsive => Array. Indicamos si una publi se debe pintar solo en una(s)\n * determinada(s) resolucion(es)\n * pre_callback => function. Función javascript a la que invocar previamente\n * pre_event => string. evento de precondicion\n * post_callback => function. Función javascript a la que invocar una vez disparado\n * el slotRendered\n * post_event => string. evento a disparar una vez disparado evento de slotRendered\n * oas => string. Si se rellena es el OAS a utilizar en la posicion de publicidad\n *\n * Objeto Responsive\n * El primer par de valores indica la resolucion, y en el segundo los tamanos de la posicion de\n * publi a servir, el cual puede definirse como sigue:\n * - vacio: []\n * - single array: [ancho, alto]\n * - multi array: [ [ancho1, alto1], [ancho2, alto2], ... ]\n * - string: En cuyo caso usa la funcion ads.getSizesGoogle para obtener el array\n *\n * Ejemplo llamada:\n * ads.printAds({'position': 'robapaginas', 'id': 'roba2', 'responsive': [\n * [[0, 0], []] // Small Mobile\n * ,[[350, 200], [300,150]] // Mobile\n * ,[[750, 200], 'robapaginas'] // Tablet\n * ,[[1050, 300], [[300,150],[300,250]]] // Desktop\n * ]});\n */\n static printAds(datos) {\n var params, position, idAds, prioritized, delayed;\n\n showLog('Advertising:printAds', datos);\n if (!_configManager.configGDPMedio.activo) {\n showWarn('Advertising:printAds:Ads was be disabled in Media Config');\n return;\n }\n\n params = _configManager.normalizaParams(datos);\n if (params === null) {\n showWarn('Advertising:printAds:Empty params', datos);\n return;\n }\n\n position = params.position;\n idAds = _configManager.getIdDiv(params);\n if (!_configManager.isActive(params)) {\n if ($(`#${idAds}`).length && params.hideNoAds) {\n showWarn('Advertising:printAds:Hiding ADs DIV container if hideNoAds is anabled', params);\n $(`#${idAds}`).hide();\n }\n showWarn(`Advertising:printAds:Position ${position} is not active`, params);\n return;\n }\n\n if (!$(`#${idAds}`).length) {\n showWarn(`Advertising:printAds:DIV with ID ${idAds} does not exist`, params);\n return;\n }\n\n if (params.serverType === 'google') {\n /* NOTE: Si estamos en modo preview comprobamos si esta posicion hay que traerla desde el\n SW del capturador */\n if (_configManager.configGDPMedio.preview && _capturadorExistsPreview(params)) {\n showLog('Advertising:printAds:Preview mode. Getting form grabber service');\n _capturadorSetPreview(params);\n return;\n }\n\n showLog('Advertising:printAds:Check Ad-Type', params);\n prioritized = _configManager.isPrioritized(position);\n delayed = _configManager.isDelayed(position);\n\n if (prioritized && !delayed) {\n showLog('Advertising:printAds:Painting prioritized', params);\n _getAdGoogle(params, true);\n } else if (delayed) {\n showLog('Advertising:printAds:Wait for INVIEW event delayed', params);\n _displayDelayed(params);\n } else if (!_configManager.thereArePrioritizedPositions() || _completadasPriorizadas) {\n showLog('Advertising:printAds:Painting standard', params);\n _getAdGoogle(params, false);\n } else {\n showLog('Advertising:printAds:Painting queued standards', params);\n _standardDelayed.push(params);\n }\n } else {\n showWarn('Advertising:printAds:ServerType is different from google', params);\n }\n }\n\n /**\n * Get user type\n * NOTE: legacy code\n */\n static getValueUser() {\n if (!_configManager) {\n throw Error('Advertising:getValueUser:Config object not initialized');\n }\n\n return _configManager.valueUserType;\n }\n\n /**\n * Get google sizes for a given position\n * NOTE: legacy code\n */\n static getSizesGoogle(...params) {\n if (!_configManager) {\n throw Error('Advertising:getSizesGoogle:Config object not initialized');\n }\n\n return _configManager.getSizesGoogle(...params);\n }\n\n /**\n * Get OAS value from config\n * NOTE: legacy code\n */\n static getOasSitepage(...params) {\n if (!_configManager) {\n throw Error('Advertising:getOasSitepage:Config object not initialized');\n }\n\n return _configManager.getOasSitepage(...params);\n }\n}\n\nexport default Advertising;\n\n/* Private */\n\n/**\n * Funcion que genera el scriptText que pinta la Advertising.\n * @param object params\n */\nfunction _defineSlot(params) {\n var\n scriptText, legacyCmvkey, insertedPositionkey, hideText, targetingText,\n size, idAds, targetingsTags, deviceTypeTargeting, decryptedURL, pattern, isValid,\n decodedURLTargetings, chunksURLTargetings, topics, mappingObj, sizeMapping, defineSizeMapping\n ;\n\n size = _configManager.getSizesGoogle(params.position);\n idAds = _configManager.getIdDiv(params);\n targetingsTags = params.tags || {};\n // Codigo para ocultar el div si no hay publi\n hideText = params.hideNoAds ? '.setCollapseEmptyDiv(true)' : '';\n targetingText = _configManager.globalTargetings;\n\n Object.keys(targetingsTags).forEach(function(key) {\n targetingText += `.setTargeting(\"${key}\", \"${targetingsTags[key]}\")`;\n });\n\n // Targeting con tipo de usuario de Gigya\n deviceTypeTargeting = _configManager.deviceType === 'mobile' ? 'm' : 'w';\n targetingText += `.setTargeting('st', '${_configManager.valueUserType}').setTargeting('stt', '${deviceTypeTargeting}${_configManager.valueUserType}')`;\n\n // Se comprueba si se fuerza algun targeting via URL con el parametro vam_cmvkey\n decryptedURL = ConfigManager.decryptedURL();\n if (((typeof window.location !== 'undefined') && (window.location.href.indexOf('vam_cmvkey=') > -1 || window.location.href.indexOf('cmvkey=') > -1)) || (decryptedURL !== '')) {\n legacyCmvkey = window.location.href.indexOf('vam_cmvkey=') > -1 ? 'vam_cmvkey' : 'cmvkey';\n pattern = new RegExp(`(\\\\?|&)${legacyCmvkey}=([^?&]+)`);\n isValid = (decryptedURL !== '') ? pattern.exec(decryptedURL) : pattern.exec(window.location.href);\n\n if (isValid) {\n try {\n decodedURLTargetings = decodeURIComponent(isValid[2]);\n chunksURLTargetings = decodedURLTargetings.split(',');\n\n chunksURLTargetings.forEach(function(chunck) {\n var pair, keyChunk, valueChunk;\n\n pair = chunck.split('=');\n keyChunk = pair[0];\n valueChunk = pair[1];\n targetingText += `.setTargeting(\"${keyChunk}\", \"${valueChunk}\")`;\n });\n } catch (e) {\n showWarn(`Advertising:defineSlot:Error processing ${legacyCmvkey}: ${e}`);\n }\n }\n }\n\n // Incluimos los topics como targeting si asi corresponde\n try {\n topics = _getTopics(false);\n if (topics.length) {\n targetingText += `.setTargeting(\"topics\", \"${topics}\")`;\n }\n } catch (e) {\n showWarn(`Advertising:defineSlot:Error processing enableTopics: ${e}`);\n }\n\n // Se comprueba si enableTpag esta habilitado\n try {\n if (_configManager.configGDPMedio.enableTpag) {\n targetingText += `.setTargeting(\"tpag\", \"${_configManager.pageType}\")`;\n }\n } catch (e) {\n showWarn(`Advertising:defineSlot:Error processing tpag: ${e}`);\n }\n\n // Comprobaciones para medios responsives\n mappingObj = {};\n sizeMapping = '';\n defineSizeMapping = '';\n if (!params.outOfPage && params.responsive &&\n Array.isArray(params.responsive) && params.responsive.length > 0) {\n mappingObj = _getSizeMapping(params);\n sizeMapping = mappingObj && mappingObj.definition ? mappingObj.definition : '';\n defineSizeMapping = mappingObj && mappingObj.script ? mappingObj.script : '';\n }\n\n if (!params.outOfPage) {\n if (params.defineSlot) {\n scriptText = `${sizeMapping}window.${_getNombreSlot(params)} = window.googletag.defineSlot('${_configManager.getOasSitepage(params)}', ${size}, '${idAds}')${defineSizeMapping}.setTargeting('pos','${params.position}')${targetingText}${hideText}.addService(googletag.pubads());`;\n }\n } else if (params.defineSlot) {\n scriptText = `${sizeMapping}window.${_getNombreSlot(params)} = window.googletag.defineOutOfPageSlot('${_configManager.getOasSitepage(params)}', '${idAds}')${defineSizeMapping}.setTargeting('pos','${params.position}')${targetingText}${hideText}.addService(googletag.pubads());`;\n }\n\n insertedPositionkey = _getClavePosicionInsertada(params);\n _insertedPositions[insertedPositionkey] = scriptText;\n showLog('Advertising:defineSlot:Ads ID', idAds);\n window.customcmd.push(_executeDefineSlot(scriptText, params));\n}\n\nfunction _executeDefineSlot(scriptText, params) {\n showLog(`En defineSlot. defineSlot: ${scriptText}`);\n eval(scriptText);\n _notDisplayedSlots.push(params.position);\n}\n\n/**\n * Hace display de una posicion\n */\nfunction _display(params) {\n // Comprobamos si la posicion esta en la lista de posiciones definidas y pendientes de display\n var index, idDiv;\n\n showLog(`Advertising:display:Display position ${params.position} with params`, params);\n index = _notDisplayedSlots.indexOf(params.position);\n if (index < 0) {\n showLog(`Advertising:display:Position ${params.position} has already been displayed`);\n return;\n }\n\n showLog(`Advertising:display:Position ${params.position} is not displayed yet`);\n idDiv = _configManager.getIdDiv(params);\n if (!$('#' + idDiv).length) {\n showWarn(`Advertising:display:DIV with ID ${idDiv} does not exist`);\n return;\n }\n showLog(`Advertising:display:Queued position ${params.position} to display`);\n window.customcmd.push(function () {\n showLog(`Advertising:display:Displaying ${params.position}`);\n window.googletag.display(idDiv);\n\n /* NOTE: Si singleRequest esta habilitado un unico display sirve para todas las posiciones\n para las que hemos hecho defineSlot previamente. En caso contrario solo quitamos la\n posicion concreta de la lista.\n */\n if (_configManager.configGDPMedio.singleRequest) {\n _notDisplayedSlots = [];\n } else {\n _notDisplayedSlots.splice(index, 1);\n }\n });\n}\n\n/**\n * Funcion que obtiene las medidas en caso de que sea responsive.\n * FUTURE: move config to GDP\n * FUTURE: move logic to GoogleTag component\n * @param object responsive\n * @return string sizeMapping\n */\nfunction _getSizeMapping(params) {\n var mappingName, mappingObj, responsive, finalDefinition;\n\n mappingName = `window.mapping_${_getNombreSlot(params)}`;\n mappingObj = {\n definition: `${mappingName} = window.googletag.sizeMapping()`,\n script: `.defineSizeMapping(${mappingName})`\n };\n responsive = params.responsive;\n showLog(`Advertising:getSizeMapping:Resposive param for position ${params.position}`, responsive);\n\n finalDefinition = responsive.reduce(function(definition, pair) {\n var addSize, viewportSize, responsiveSizes, singleSize;\n\n if (definition !== '' && !definition) return undefined;\n\n viewportSize = pair[0];\n if (pair.length !== 2 || !Array.isArray(viewportSize) || viewportSize.length !== 2) {\n showWarn(`Advertising:getSizeMapping:Malformed responsive param in position ${params.position}. responsive: ${responsive}`);\n return undefined;\n }\n\n addSize = '';\n responsiveSizes = pair[1];\n if (typeof responsiveSizes === 'string') {\n if (responsiveSizes.indexOf('fluid') !== -1) {\n responsiveSizes = POSITION_FLUID;\n } else {\n responsiveSizes = _configManager.getSizesGoogle(responsiveSizes);\n if ((typeof responsiveSizes !== 'undefined') && (typeof responsiveSizes === 'string')) {\n responsiveSizes = JSON.parse(responsiveSizes);\n }\n }\n }\n if (!Array.isArray(responsiveSizes) && responsiveSizes !== POSITION_FLUID) {\n showWarn(`Advertising:getSizeMapping:Malformed responsive param in position ${params.position}. responsive: ${responsive}`);\n return undefined;\n }\n\n addSize = '[' + viewportSize[0] + ',' + viewportSize[1] + '],';\n if (responsiveSizes.length > 0 && Array.isArray(responsiveSizes[0])) {\n addSize += '[';\n for (let j = 0; j < responsiveSizes.length; j++) {\n singleSize = responsiveSizes[j];\n if (singleSize.length === 2) {\n addSize += (j === 0 ? '[' : ',[') + singleSize[0] + ',' + singleSize[1] + ']';\n }\n }\n addSize += ']';\n } else if (responsiveSizes.length === 2) {\n addSize += '[' + responsiveSizes[0] + ',' + responsiveSizes[1] + ']';\n } else if (responsiveSizes === POSITION_FLUID) {\n addSize += POSITION_FLUID;\n } else {\n addSize += '[]';\n }\n\n return `${definition}.addSize(${addSize})`;\n }, '');\n\n if (!finalDefinition) return undefined;\n\n mappingObj.definition += `${finalDefinition}.build();`;\n\n return mappingObj;\n}\n\n/**\n * Lanza los printAds que se han encolado cuando hay priorizadas\n */\nfunction _displayStandarQueued() {\n showLog('Advertising:displayStandarQueued:Display queued positions');\n while (_standardDelayed.length) {\n Advertising.printAds(_standardDelayed.shift());\n }\n}\n\n/**\n * Funcion para pintar la publicidad priorizada\n */\nfunction _displayPrioritized() {\n showLog(`Advertising:pintaPriorizadas:Painting the following positions : ${_configManager.prioritizedPositions}`);\n _pintaListaPosiciones(_configManager.prioritizedPositions, true);\n}\n\n/**\n * Funcion que recorre y pinta una lista de posiciones.\n * Si singleRequest esta habilitado las posiciones priorizadas funcionan como un Roadblock y se\n * piden todas juntas (no llevaran eventos ni callbacks)\n */\nfunction _pintaListaPosiciones(listaPositions, sonPosicionesPriorizadas) {\n if (_configManager.configGDPMedio.singleRequest && sonPosicionesPriorizadas) {\n showLog('Advertising:pintaListaPosiciones:There is prioritized positions and SingleRequest is enabled -> get with Roadblock');\n\n window.customcmd.push(function () {\n var params, container$, posCuyoDivExiste;\n\n posCuyoDivExiste = null;\n listaPositions.forEach(function(position) {\n params = {position};\n\n if (!_configManager.existePosEnConfigGDPMedio(position)) {\n showWarn(`Advertising:pintaListaPosiciones:SingleRequest position ${position} does not exist configGDPMedio`);\n return;\n }\n\n if (!_configManager.isActive(params)) {\n showWarn(`Advertising:pintaListaPosiciones:SingleRequest position ${position} is NOT active`);\n return;\n }\n\n // Recuperamos los parametros del DIV en caso de que exista en la pagina\n container$ = $(`[data-voc-vam-position = '${position}']`, _configManager.context$);\n if (container$.length) {\n params = _configManager.normalizaParams(container$);\n if (posCuyoDivExiste === null) posCuyoDivExiste = params;\n } else {\n // NOTE: find legacy DIV\n container$ = $(`#${_configManager.getIdDiv(params)}`);\n if (container$.length) {\n params = _configManager.normalizaParams(params);\n if (posCuyoDivExiste === null) {posCuyoDivExiste = params;}\n } else {\n showWarn(`En pintaListaPosiciones. No existe el DIV de la posicion priorizada ${position}`);\n }\n }\n if ('id' in params) {\n showLog(`En pintaListaPosiciones. Llamando a defineSlot: ${JSON.stringify(params)}`);\n _defineSlot(params);\n }\n });\n\n if (posCuyoDivExiste === null) {\n showError('ERROR En pintaListaPosiciones. No existe el DIV de ninguna de las posiciones priorizadas en la pagina, por lo que no se hara el display');\n } else {\n params = posCuyoDivExiste;\n }\n\n // NOTE: If there is Header Bidding wait for bidders promises\n if (HBProviderManager.isActive()) {\n showLog('pintaListaPosiciones:Waiting for HB`s promises to be solved');\n app.when(HEADER_BIDDING_READY).then(function() {\n showLog('pintaListaPosiciones:HB promises resolved');\n HBProviderManager.setTargetings();\n showLog('pintaListaPosiciones:Params object', params);\n _display(params);\n });\n } else {\n showLog('En pintaListaPosiciones. Print without wait HB');\n _display(params);\n }\n });\n } else {\n !_configManager.configGDPMedio.singleRequest && showLog('Advertising:pintaListaPosiciones:SingleRequest DISABLED');\n !sonPosicionesPriorizadas && showLog('Advertising:pintaListaPosiciones:There are NOT prioritized positions');\n // window.customcmd.push(function () {\n listaPositions.forEach(function(position) {\n var params, container$, legacyParams;\n\n if (!_configManager.existePosEnConfigGDPMedio(position)) {\n showWarn(`Advertising:pintaListaPosiciones:Prioritized position ${position} does not exist configGDPMedio`);\n return;\n }\n\n params = {position};\n if (!_configManager.isActive(params)) {\n showWarn(`Advertising:pintaListaPosiciones:Prioritized position ${position} is NOT active`);\n return;\n }\n\n // Recuperamos los paramteros del DIV en caso de que exista en la pagina\n container$ = $(`[data-voc-vam-position = '${position}']`, _configManager.context$);\n if (container$.length) {\n params = _configManager.normalizaParams(container$);\n } else {\n container$ = $(`#${_configManager.getIdDiv(params)}`);\n if (container$.length) {\n legacyParams = _configManager.normalizaParams(container$);\n }\n params = !legacyParams ? _configManager.normalizaParams(params) : legacyParams;\n }\n\n showLog('Advertising:pintaListaPosiciones:Calling printAds with', params);\n Advertising.printAds(params);\n });\n // });\n }\n}\n\n/**\n * Display delayed positions when it is on viewport\n * @param {object} params\n */\nfunction _displayDelayed(params) {\n var idAds = _configManager.getIdDiv(params);\n\n $(`#${idAds}`).on('inview', function (event, isInView) {\n showLog('Advertising:displayDelayed:INVIEW_EVENT trigger', params, event, isInView);\n if (isInView && !this.dataset.vocVamDisplayed) {\n showLog('Advertising:displayDelayed:Painting delayed', idAds, params);\n _getAdGoogle(params, false);\n }\n });\n}\n\n/**\n * Pintado de publicidad de GPT\n */\nfunction _getAdGoogle(params, esPosPriorizada) {\n if (!_configManager.configGDPMedio.activo) {\n showWarn('Advertising:getAdGoogle:Ads was disabled in Media Config');\n return;\n }\n\n showLog('Advertising:getAdGoogle:Queuing with', params);\n window.customcmd.push(function() {\n var idDiv, eventParams, tParams, key, hasPreevent;\n\n if (!_configManager.existePosEnConfigGDPMedio(params.position)) {\n showWarn(`Advertising:getAdGoogle:Position ${params.position} does not exist in configGDPMedio`);\n return;\n }\n\n showLog('Advertising:getAdGoogle:googletag exec with', params);\n idDiv = _configManager.getIdDiv(params);\n eventParams = _getEventsPosition(params);\n\n tParams = params;\n tParams.pre_callback = eventParams.pre_callback;\n tParams.pre_event = eventParams.pre_event;\n\n tParams.post_callback = eventParams.post_callback;\n tParams.post_event = eventParams.post_event;\n showLog('Advertising:getAdGoogle:Set params to DIV with id = ', idDiv);\n $(`#${idDiv}`).data('params', tParams);\n\n key = _getClavePosicionInsertada(params);\n if (!_insertedPositions[key]) {\n hasPreevent = false;\n if (params.defineSlot) {\n showLog('Advertising:getAdGoogle:defineSlot', params);\n _defineSlot(params);\n if (!esPosPriorizada) {\n showLog('Advertising:getAdGoogle:It is not prioritized', params);\n if (eventParams.pre_callback && !eventParams.pre_event) {\n eventParams.pre_callback();\n } else if (eventParams.pre_event) {\n showLog('Advertising:getAdGoogle:Has pre-event', params);\n hasPreevent = true;\n app.one(eventParams.pre_event, params, function () {\n // NOTE: If there is Header Bidding wait for bidders promises\n if (HBProviderManager.isActive()) {\n showLog('Advertising:getAdGoogle:Waiting for HB`s promises to be solved');\n app.when(HEADER_BIDDING_READY).then(function() {\n showLog('Advertising:getAdGoogle:HB promises resolved with preEvents', params);\n if (params.pre_callback) {\n params.pre_callback();\n }\n HBProviderManager.setTargetings();\n _display(params);\n });\n }\n });\n } else {\n showLog('Advertising:getAdGoogle:Has NO pre-event', params);\n if (HBProviderManager.isActive()) {\n hasPreevent = true;\n showLog('Advertising:getAdGoogle:Waiting for HB`s promises to be solved');\n app.when(HEADER_BIDDING_READY).then(function() {\n showLog('Advertising:getAdGoogle:HB promises resolved without preEvents with', params);\n if (params.pre_callback) {\n params.pre_callback();\n }\n HBProviderManager.setTargetings();\n _display(params);\n });\n }\n }\n } else {\n showLog('Advertising:getAdGoogle:Is prioritized', params);\n if (HBProviderManager.isActive()) {\n hasPreevent = true;\n showLog('Advertising:getAdGoogle:Waiting for HB`s promises to be solved');\n app.when(HEADER_BIDDING_READY).then(function() {\n showLog('Advertising:getAdGoogle:HB promises resolved on prioritized position with', params);\n HBProviderManager.setTargetings();\n _display(params);\n });\n }\n }\n }\n\n // No tiene evento de activacion\n if (!hasPreevent) {\n showLog('Advertising:getAdGoogle:Has no pre-event. Painting', params);\n HBProviderManager.setTargetings();\n _display(params);\n }\n } else {\n showLog(`Advertising:getAdGoogle:Position ${params.position} has already been previously invoked. Checking the value of the refresh parameter`, params.refresh);\n if (params.refresh) _pintarPosicionRefresh(params);\n }\n });\n}\n\n/**\n * Funcion que recuperar si tiene evento pre o post callback, los parametros llegados por funcion\n * prevalecen sobre los del CONFIG\n * @param object params\n */\nfunction _getEventsPosition(params) {\n var tipoDispositivoAux, positionEvents;\n\n tipoDispositivoAux = _configManager.deviceType;\n positionEvents = app.lookup(`posicion_${tipoDispositivoAux}[\"${params.position}\"]`, _configManager.configGDP);\n\n if (isEmpty(positionEvents)) return positionEvents;\n\n positionEvents.pre_callback = params.pre_callback || params.pre_callback;\n positionEvents.pre_event = params.pre_event || params.pre_event;\n positionEvents.post_callback = params.post_callback || params.post_callback;\n positionEvents.post_event = params.post_event || params.post_event;\n\n return positionEvents;\n}\n\n/**\n * Devuelve el nombre de la variable que almacenara el slot\n */\nfunction _getNombreSlot(params, dynamicSuffix = true) {\n var dynamicId, dynamic;\n\n dynamicId = _configManager.dynamicId;\n dynamic = dynamicId && dynamicSuffix ? `_${dynamicId}` : '';\n\n return `slot_${params.position.replace('-', '_')}${dynamic}`;\n}\n\n/**\n * Clave unica de la posicion\n */\nfunction _getClavePosicionInsertada(params) {\n return _getNombreSlot(params) + '_' + _configManager.getIdDiv(params);\n}\n\n/**\n * Refresh de una posicion\n */\nfunction _pintarPosicionRefresh(params) {\n showLog(`En pintarPosicionRefresh. Refrescamos la posicion ${params.position}`);\n window.googletag.pubads().refresh([app.lookup(_getNombreSlot(params))]);\n}\n\n/**\n * INICIO: Renderizado de tablas de informacion cuando vam_info_slot=1\n * --------------------------------------------------------------------------\n */\n/**\n * Metodo de entrada de tablas de informacion\n */\nfunction _infoSlotRender(params, isSlotRendered) {\n var idDiv, container$, width, height, dimension, arrayObj, numSlots, numTopics, numOas, max;\n\n idDiv = _configManager.getIdDiv(params);\n container$ = $(`#${idDiv}`);\n width = $(`#${idDiv} div iframe`).width();\n height = $(`#${idDiv} div iframe`).height();\n\n // Obtenemos el tamano de la publi pintada y la borramos\n if (isSlotRendered) {\n container$.empty();\n } else {\n // Si DFP devuelve isEmpty cogemos la primera dimension del array, o 150x150 si es fluid\n try {\n height = 150;\n width = 150;\n dimension = _configManager.getSizesGoogle(params.position);\n if (dimension && dimension.indexOf('fluid') < 0) {\n arrayObj = JSON.parse(dimension);\n\n if (Array.isArray(arrayObj[0])) {\n width = arrayObj[0][0];\n height = arrayObj[0][1];\n } else {\n width = arrayObj[0];\n height = arrayObj[1];\n }\n }\n } catch (e) {\n showError('Advertising:infoSlotRender:Error building size.', e);\n }\n\n container$.show();\n }\n\n // Rectangulo con color azul o rojo (si es local)\n container$.addClass('gdp_infoSlot_rectangle').html(`

${params.position} ${_infoSlotFormateaDimensiones(params)}

`);\n if (_isLocalPosition(params)) container$.addClass('gdp_infoSlot_localPosition');\n if (!isSlotRendered) container$.addClass('gdp_infoSlot_inactive');\n\n if (!$('#gdp_infoSlot_tableInfo').length > 0) {\n $('body').append('
');\n }\n\n // Tablas de info adicional\n _infoSlotRenderSlots(params);\n _infoSlotRenderTopics();\n _infoSlotRenderOAS(params);\n\n numSlots = $('#gdp_infoSlot_tableInfo-slots').length > 0 ? $('#gdp_infoSlot_tableInfo-slots tbody tr').length : 0;\n numTopics = $('#gdp_infoSlot_tableInfo-topics').length > 0 ? $('#gdp_infoSlot_tableInfo-topics tbody tr').length : 0;\n numOas = $('#gdp_infoSlot_tableInfo-oas').length > 0 ? $('#gdp_infoSlot_tableInfo-oas tbody tr').length : 0;\n max = Math.max(numSlots, numTopics);\n if (max > numSlots && $('#gdp_infoSlot_tableInfo-slots').length > 0) {\n for (let i = 0; i < max - numSlots; i++) {\n $('#gdp_infoSlot_tableInfo-slots tbody').append(' ');\n }\n }\n if (max > numTopics && $('#gdp_infoSlot_tableInfo-topics').length > 0) {\n for (let i = 0; i < max - numTopics; i++) {\n $('#gdp_infoSlot_tableInfo-topics tbody').append(' ');\n }\n }\n if (max > numOas && $('#gdp_infoSlot_tableInfo-oas').length > 0) {\n for (let i = 0; i < max - numOas; i++) {\n $('#gdp_infoSlot_tableInfo-oas tbody').append(' ');\n }\n }\n}\n\nfunction _applyFilter(value) {\n return value\n .replace(new RegExp(\"'fluid'\", 'g'), '[fluid]')\n .replace(new RegExp('\\\\],\\\\[', 'g'), '_')\n .replace(new RegExp(',', 'g'), 'x')\n .replace(new RegExp('\\\\[', 'g'), '')\n .replace(new RegExp('\\\\]', 'g'), '')\n .replace(new RegExp('_', 'g'), ',');\n}\n\nfunction _infoSlotFormateaDimensiones(params) {\n var\n result, dimensionsArray, mappingObj, sizeMapping,\n dimension, resolution, notRepeatedDimensions;\n\n result = '';\n dimensionsArray = [];\n mappingObj = {};\n sizeMapping = '';\n\n try {\n if (params.outOfPage) {\n dimensionsArray.push('oop');\n } else if (params.responsive &&\n Array.isArray(params.responsive) &&\n params.responsive.length > 0\n ) {\n mappingObj = _getSizeMapping(params);\n sizeMapping = ((typeof mappingObj !== 'undefined') && (typeof mappingObj.definition !== 'undefined')) ? mappingObj.definition : '';\n sizeMapping.split('.').forEach(function(size) {\n if (size.indexOf('addSize') > -1) {\n size = size.replace(new RegExp('addSize\\\\(', 'g'), '').replace(new RegExp('\\\\)', 'g'), '');\n dimensionsArray.push(size);\n }\n });\n } else {\n dimensionsArray.push(app.lookup(`posicion_${_configManager.deviceType}.${params.position}.dimensiones`, _configManager.configGDPMedio));\n }\n\n if (Array.isArray(dimensionsArray)) {\n if (params.outOfPage) { // Posicion OutOfPage\n result += '(oop)';\n } else if (!params.responsive) { // Posicion no responsive\n dimension = _applyFilter(dimensionsArray[0]);\n result += '(' + dimension + ')';\n } else { // Posicion responsive\n notRepeatedDimensions = new Set();\n dimensionsArray.forEach(function(dimen) {\n var filtered = _applyFilter(dimen);\n\n // Quitamos la resolucion\n resolution = filtered.substring(0, filtered.indexOf(','));\n dimension = filtered.substring(filtered.indexOf(',') + 1);\n notRepeatedDimensions.add(dimension);\n result += '
' + resolution + ': (' + dimension + ')';\n });\n\n // Si todas las dimensiones de responsive son la misma escribimos solo una\n if (notRepeatedDimensions.size === 1) result = '(' + dimension + ')';\n }\n }\n } catch (err) {\n showError('Advertising:infoSlotFormateaDimensiones:Error', err);\n }\n\n return result;\n}\n\n/**\n * Tabla de informacion de SLOTS\n */\nfunction _infoSlotRenderSlots(params) {\n if (!$('#gdp_infoSlot_tableInfo-slots').length) {\n $('#gdp_infoSlot_tableInfo').append('
');\n $('#gdp_infoSlot_tableInfo-slots thead').append('posiciones');\n }\n $('#gdp_infoSlot_tableInfo-slots tbody').append(`${params.position}`);\n}\n\n/**\n * Tabla de informacion de TOPICS\n */\nfunction _infoSlotRenderTopics() {\n var topics = _getTopics(true);\n if (topics.length > 0) {\n if (!$('#gdp_infoSlot_tableInfo-topics').length) {\n $('#gdp_infoSlot_tableInfo').append('
');\n $('#gdp_infoSlot_tableInfo-topics thead').append('topics');\n\n topics.forEach(function(topic) {\n $('#gdp_infoSlot_tableInfo-topics tbody').append(`${topic}`);\n });\n }\n }\n}\n\n/**\n * Tabla de informacion de OAS\n */\nfunction _infoSlotRenderOAS(params) {\n if (!$('#gdp_infoSlot_tableInfo-oas').length) {\n $('#gdp_infoSlot_tableInfo').append('
');\n $('#gdp_infoSlot_tableInfo-oas thead').append('oas');\n $('#gdp_infoSlot_tableInfo-oas tbody').append(`${_configManager.getOasSitepage(params)}`);\n }\n}\n\n/**\n * Devuelve un array con los topics que contiene la pagina, en caso de que los contenga y que\n * enableTopics este habilitado.\n * @return array\n */\nfunction _getTopics(forzarEnableTopics) {\n var topics = [];\n\n if ((_configManager.configGDPMedio.enableTopics || forzarEnableTopics) && window.voc_top) {\n topics = window.voc_top.split(',');\n }\n\n return topics;\n}\n\n/**\n * Funcion que devuelve true si la posicion es local, false si no lo es\n * @return boolean\n */\nfunction _isLocalPosition(params) {\n return params.position.includes('_local');\n}\n/**\n * FIN: Renderizado de tablas de informacion cuando vam_info_slot=1\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * INICIO: Capturador (modo preview)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Devuelve true si hay preview para la posicion indicada o false en caso contrario\n * @returns {boolean}\n */\nfunction _capturadorExistsPreview(params) {\n return _configManager.capturadorDataPreview &&\n _configManager.capturadorDataPreview[params.position];\n}\n\n/**\n * funcion que cambia la publicidad por defecto, por una que se indica\n */\nfunction _capturadorSetPreview(params) {\n var previewJSON, preview, idDiv, div, creatividad;\n\n try {\n previewJSON = JSON.parse(_configManager.capturadorDataPreview[params.position]);\n preview = previewJSON[0];\n idDiv = _configManager.getIdDiv(params);\n creatividad = ``;\n div = $(`#${idDiv}`);\n div.empty();\n div.html(creatividad);\n showLog(`En capturadorSetPreview. Pintada preview para la posicion ${params.position}`);\n } catch (err) {\n showError('Advertising:capturadorSetPreview:Error', err);\n }\n}\n/**\n * FIN: Capturador (modo preview)\n * --------------------------------------------------------------------------\n */\n\n\n\n// WEBPACK FOOTER //\n// ./src/advertising.js","import app from '../application';\nimport Amazon from './providers/amazon';\nimport Prebid from './providers/prebid';\nimport {\n showLog,\n showError\n} from '../logger';\nimport {HEADER_BIDDING_READY} from '../constants';\n\nconst GATEWAYS = [\n Amazon,\n Prebid\n];\nconst {RSVP} = window;\nvar _gatewaysPromises = [];\nvar _gatewaysAdded = [];\n\nwindow.googletag = window.googletag || {};\nwindow.googletag.cmd = window.googletag.cmd || [];\nwindow.customcmd = window.customcmd || [];\n\nexport default Object.preventExtensions({\n /**\n * Get promises from gateways.\n * NOTE: Init method must be call before isActive method\n * @param {string} device - device type\n * @param {object} config - configGDPMedio object\n * @param {integer} dynamicId - dynamicId(infinite-scroll)\n */\n init(config) {\n _gatewaysPromises = [];\n // NOTE: load promises of active gateways\n _loadActivesGateways.call(_gatewaysPromises, config);\n\n // NOTE: when all promises are resolved, rejected or timeout reached, resolve the HB-Promise\n return RSVP.all(_gatewaysPromises)\n .then(function() {\n showLog('HBManager:init:All gateways have finished');\n app.promised(HEADER_BIDDING_READY, true);\n })\n .catch(function(reason) {\n showError('HBManager:init:Error in gateways', reason);\n app.promised(HEADER_BIDDING_READY, false);\n });\n },\n /**\n * Set targeting to DFP request\n */\n setTargetings() {\n showLog('HBManager:setTargetings:Setting targetings for each added gateways');\n _gatewaysAdded.forEach(function(gateway) {\n gateway.setTargetings();\n });\n },\n /**\n * Check if there are gateways actives\n */\n isActive() {\n return _gatewaysPromises.length;\n }\n});\n\n/* Private */\n\n/**\n * Load active gateways by config\n * @param {object} configGDPMedio\n */\nfunction _loadActivesGateways(config) {\n _gatewaysAdded = [];\n GATEWAYS.forEach((gateway) => {\n if (gateway.isActive(config)) {\n showLog('HBManager:loadActivesGateways:Add promise', gateway.NAME);\n _gatewaysAdded.push(gateway);\n this.push(gateway.getLoadPromise(config));\n }\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/header-bidding/provider-manager.js","import app from '../../application';\nimport {\n showLog,\n showError,\n showWarn\n} from '../../logger';\nimport {\n DEFAULT_AMAZON_LOAD_TIMEOUT,\n AMAZON_URL,\n AMAZON_CONFIG\n} from '../../constants';\n\nimport './amazon-script';\n// NOTE: 'apstag' is the global variable that Amazon searches for\nvar _adserverRequestResponse = false;\n\nconst REASONS = {\n ERROR_LOAD_LIBRARY: 'ERROR_LOAD_LIBRARY',\n TIMEOUT_REACHED_GLOBAL: 'TIMEOUT_REACHED_GLOBAL',\n TIMEOUT_REACHED_FETCH_BIDS: 'TIMEOUT_REACHED_FETCH_BIDS',\n ERROR_INIT_CONFIG: 'ERROR_INIT_CONFIG'\n};\nconst {RSVP} = window;\nconst NAME = 'AMAZON';\n\nexport default Object.preventExtensions({\n NAME,\n isActive({hbAmazon}) {\n if (hbAmazon) {\n showLog('Amazon:Is active');\n } else {\n showLog('Amazon:Is NOT active');\n }\n return hbAmazon;\n },\n /**\n * Launch amazon behaviour\n * @param {object} adUnits - adUnits config\n * @param {object} biddersConfig\n * @param {integer} timeout\n * @return {Promise}\n */\n getLoadPromise({hbAmazon}) {\n return new RSVP.Promise(function(resolve, reject) {\n var timeout = hbAmazon.timeout || DEFAULT_AMAZON_LOAD_TIMEOUT;\n\n _adserverRequestResponse = false;\n _loadLibrary()\n .then(function() {\n showLog('Amazon:getLoadPromise:Library loaded');\n return _setConfig();\n })\n .then(function() {\n showLog('Amazon:getLoadPromise:apstag is loaded');\n return _fetchBid(hbAmazon);\n })\n .then(function() {\n showLog('Amazon:getLoadPromise:Bids fetched');\n resolve(true);\n })\n .catch(function(reason) {\n reject(reason);\n });\n\n setTimeout(function() {\n if (!_adserverRequestResponse) {\n showWarn('Amazon:getLoadPromise:Timeout reached', timeout);\n reject(REASONS.TIMEOUT_REACHED_GLOBAL);\n }\n }, timeout);\n }).catch(function(reason) {\n switch (reason) {\n case REASONS.TIMEOUT_REACHED_GLOBAL:\n showLog('Amazon:getLoadPromise:TIMEOUT reached global');\n break;\n case REASONS.TIMEOUT_REACHED_FETCH_BIDS:\n showLog('Amazon:getLoadPromise:TIMEOUT reached in _fetchBid');\n break;\n case REASONS.ERROR_LOAD_LIBRARY:\n showError('Amazon:getLoadPromise:Error loading library');\n break;\n case REASONS.ERROR_INIT_CONFIG:\n showError('Amazon:getLoadPromise:Error on init config');\n break;\n default:\n showError('Amazon:getLoadPromise:Error in Amazon process', reason);\n }\n return false;\n });\n },\n\n /**\n * Force setTargeting\n */\n setTargetings() {\n if (_adserverRequestResponse) {\n window.customcmd.push(function() {\n window.apstag.setDisplayBids();\n showLog('Amazon:setTargetings:Targetings added');\n });\n } else {\n showLog('Amazon:setTargetings:Targetings NOT added because no response from bidders');\n }\n }\n});\n\n/* Private */\n\n/**\n * Load Amazon library\n * @return {Promise}\n */\nfunction _loadLibrary() {\n showLog('Amazon:loadLibrary:Loading library');\n return app.load(AMAZON_URL)\n .catch(function(reason) {\n showError('Amazon:loadLibrary:Error', reason);\n return RSVP.reject(REASONS.ERROR_LOAD_LIBRARY);\n });\n}\n\n/**\n * Set apstag init config\n */\nfunction _setConfig() {\n return new RSVP.Promise(function(resolve, reject) {\n // NOTE: set custom config object\n showLog('Amazon:setConfig:Show Amazon config', AMAZON_CONFIG);\n try {\n window.apstag.init(AMAZON_CONFIG, function() {\n resolve();\n });\n } catch (error) {\n showError('Amazon:setConfig:Error', error);\n reject(REASONS.ERROR_INIT_CONFIG);\n }\n });\n}\n\n/**\n * Add slots config and make Amazon call\n * @param {object} config - hbAmazon config from configGDPMedio\n */\nfunction _fetchBid(config) {\n var bidConfig;\n\n bidConfig = {\n slots: config.slots,\n timeout: config.timeout || DEFAULT_AMAZON_LOAD_TIMEOUT\n };\n\n return new RSVP.Promise(function(resolve, reject) {\n showLog('Amazon:fetchBid:Add Slots', bidConfig.slots);\n showLog('Amazon:fetchBid:Request Amazon');\n window.apstag.fetchBids(bidConfig, function(bids) {\n showLog('Amazon:fetchBid:Response from Amazon', bids);\n // NOTE: When there are no bids returned, the bids array will be empty\n if (Object.keys(bids).length === 0) {\n reject(REASONS.TIMEOUT_REACHED_FETCH_BIDS);\n return;\n }\n showLog('Amazon:fetchBid:Targetings keys', window.apstag.targetingKeys());\n _adserverRequestResponse = true;\n resolve();\n });\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/header-bidding/providers/amazon.js","// NOTE: function to queue the apstag calls before the library load, the original load the library too(https://ams.amazon.com/webpublisher/docs/help/web-integration-documentation/integration-guide/javascript-guide/display.html)\n(function IIFE(apstagGlobalName, root) {\n if (root[apstagGlobalName]) return;\n function queue(c, r) {\n root[apstagGlobalName]._Q.push([c, r]);\n }\n root[apstagGlobalName] = {\n init: function() {\n queue('i', arguments);\n },\n fetchBids: function() {\n queue('f', arguments);\n },\n setDisplayBids: function() {},\n targetingKeys: function() {\n return [];\n },\n _Q:[]\n };\n}('apstag', window));\n\n\n\n// WEBPACK FOOTER //\n// ./src/header-bidding/providers/amazon-script.js","import app from '../../application';\nimport {\n showLog,\n showError,\n showWarn\n} from '../../logger';\nimport {\n DEFAULT_PREBID_LOAD_TIMEOUT,\n PREBID_URL,\n SHOW_LOGS\n} from '../../constants';\n\nconst REASONS = {\n EMPTY_ADUNITS: 'EMPTY_ADUNITS',\n ERROR_LOAD_LIBRARY: 'ERROR_LOAD_LIBRARY',\n TIMEOUT_REACHED_GLOBAL: 'TIMEOUT_REACHED_GLOBAL',\n TIMEOUT_REACHED_FETCH_BIDS: 'TIMEOUT_REACHED_FETCH_BIDS'\n};\nconst {RSVP} = window;\nconst NAME = 'PREBID';\n\nvar _adserverRequestResponse = false;\n\n// NOTE: This is the global variable that Prebid searches for\nwindow.pbjs = window.pbjs || {};\nwindow.pbjs.que = window.pbjs.que || [];\n\nexport default Object.preventExtensions({\n NAME,\n isActive({hbPrebid}) {\n if (hbPrebid) {\n showLog('Prebid:Is active');\n } else {\n showLog('Prebid:Is NOT active');\n }\n return hbPrebid;\n },\n /**\n * Launch prebid behaviour\n * @param {object} adUnits - adUnits config\n * @param {object} biddersConfig\n * @param {integer} timeout\n * @return {Promise}\n */\n getLoadPromise({hbPrebid}) {\n _adserverRequestResponse = false;\n return new RSVP.Promise(function(resolve, reject) {\n var timeout = hbPrebid.timeout || DEFAULT_PREBID_LOAD_TIMEOUT;\n _loadLibrary()\n .then(function() {\n showLog('Prebid:getLoadPromise:Library loaded');\n _setConfig(hbPrebid);\n return _fetchBid(hbPrebid);\n })\n .then(function() {\n showLog('Prebid:getLoadPromise:Bids fetched');\n resolve(true);\n })\n .catch(function(reason) {\n reject(reason);\n });\n\n setTimeout(() => {\n if (!_adserverRequestResponse) {\n showWarn('Prebid:getLoadPromise:Timeout reached', timeout);\n reject(REASONS.TIMEOUT_REACHED_GLOBAL);\n }\n }, timeout);\n }).catch(function(reason) {\n switch (reason) {\n case REASONS.TIMEOUT_REACHED_GLOBAL:\n showLog('Prebid:getLoadPromise:TIMEOUT reached global');\n break;\n case REASONS.TIMEOUT_REACHED_FETCH_BIDS:\n showLog('Prebid:getLoadPromise:TIMEOUT reached in _fetchBid');\n break;\n case REASONS.ERROR_LOAD_LIBRARY:\n showError('Prebid:getLoadPromise:Error loading library', reason);\n break;\n case REASONS.EMPTY_ADUNITS:\n showError('Prebid:getLoadPromise:There are not adUnits');\n break;\n default:\n showError('Prebid:getLoadPromise:Error in Prebid process', reason);\n }\n return false;\n });\n },\n\n /**\n * Force setTargeting\n */\n setTargetings() {\n if (_adserverRequestResponse) {\n window.customcmd.push(function() {\n window.pbjs.que.push(function() {\n window.pbjs.setTargetingForGPTAsync();\n showLog('Prebid:setTargetings:Targetings added');\n });\n });\n } else {\n showLog('Prebid:setTargetings:Targetings NOT added because no response from bidders');\n }\n }\n});\n\n/* Private */\n\n/**\n * Load prebid library\n * @return {Promise}\n */\nfunction _loadLibrary() {\n showLog('Prebid:loadLibrary:Loading library');\n return app.load(PREBID_URL)\n .catch(function(reason) {\n showError('Prebid:loadLibrary', reason);\n return RSVP.reject(REASONS.ERROR_LOAD_LIBRARY);\n });\n}\n\nfunction _setConfig(hbPrebid) {\n var biddersConfig, pbjsConfig;\n\n biddersConfig = hbPrebid.biddersConfig;\n // NOTE: set custom config object\n pbjsConfig = {\n debug : SHOW_LOGS,\n enableSendAllBids: hbPrebid.enableSendAllBids || true,\n priceGranularity : 'dense',\n consentManagement: {\n cmpApi: 'iab',\n timeout: 8000,\n allowAuctionWithoutConsent: true\n }\n };\n\n showLog('Prebid:setConfig:biddersConfig', biddersConfig);\n window.pbjs.bidderSettings = _fetchBiddersSettings(biddersConfig);\n window.pbjs.setConfig(pbjsConfig);\n showLog('Prebid:setConfig:Show Prebid config', window.pbjs.getConfig());\n}\n\n/**\n * Add adUnits config and make prebid call\n * @param {object} config - hbPrebid config from configGDPMedio\n */\nfunction _fetchBid(hbPrebid) {\n var adUnits, timeout;\n\n adUnits = hbPrebid.adUnits;\n timeout = hbPrebid.timeout || DEFAULT_PREBID_LOAD_TIMEOUT;\n\n return new RSVP.Promise(function(resolve, reject) {\n if (!adUnits.length) {\n showLog('Prebid:fetchBid:There are not adUnits');\n reject(REASONS.EMPTY_ADUNITS);\n return;\n }\n window.pbjs.que.push(function() {\n showLog('Prebid:fetchBid:Add adUnits', adUnits);\n window.pbjs.addAdUnits(adUnits);\n showLog('Prebid:fetchBid:Request Prebid');\n window.pbjs.requestBids({\n timeout,\n bidsBackHandler: function(biddersResponse) {\n showLog('Prebid:fetchBid:Response from Prebid', biddersResponse);\n if (Object.keys(biddersResponse).length === 0) {\n reject(REASONS.TIMEOUT_REACHED_FETCH_BIDS);\n return;\n }\n showLog('Prebid:fetchBid:Targetings', window.pbjs.getAdserverTargeting());\n _adserverRequestResponse = true;\n resolve();\n }\n });\n });\n });\n}\n\n/**\n * Build bidders settings from config\n * @param {object} biddersConfig - biddersConfig from configGDPMedio.hbPrebid\n * @return {object} bidderSettings\n */\nfunction _fetchBiddersSettings(biddersConfig) {\n const bidderSettings = {};\n\n Object.keys(biddersConfig).forEach(function(bidderName) {\n bidderSettings[bidderName] = {\n bidCpmAdjustment: function(bidCpm, bid) {\n var percent;\n\n percent = (1 - ('percent' in biddersConfig[bidderName] ? biddersConfig[bidderName].percent / 100 : 0));\n // NOTE: adjust the bid in real time before the auction takes place\n showLog('Prebid:fetchBiddersSettings:bidCpmAdjustment Bidder is:', bid.bidderCode, 'with percent:', percent);\n // NOTE: return bidCpm * .85; Ex.: rest 15% to the gross price\n return bidCpm * percent;\n }\n };\n });\n\n return bidderSettings;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/header-bidding/providers/prebid.js","import {\n DEFAULT_PREBID_LOAD_TIMEOUT,\n DEFAULT_AMAZON_LOAD_TIMEOUT,\n OLD_PREFIX,\n NEW_SUFFIX\n} from '../constants';\nimport {\n showLog,\n showWarn\n} from '../logger';\n\nexport default Object.preventExtensions({\n processConfig(configManager) {\n showLog('HBConfigManager:processConfig:Process HB config');\n _processPrebidConfig(configManager);\n _processAmazonConfig(configManager);\n }\n});\n\n/**\n * Process Prebid HB config to set dynamicId\n * @param {object} configManager\n */\nfunction _processPrebidConfig(configManager) {\n var property, adUnits, newConfig, biddersDisabled;\n var {headerBidding} = configManager.configGDPMedio;\n\n showLog('HBConfigManager:processPrebidConfig:Process Prebid config');\n\n if (!headerBidding) {\n showLog('HBConfigManager:processPrebidConfig:There are not Prebid configuration');\n configManager.configGDPMedio.hbPrebid = null;\n return;\n }\n\n property = `adUnits_${configManager.deviceType}`;\n if (!(property in headerBidding) || !headerBidding[property].length) {\n showLog('HBConfigManager:processPrebidConfig:There are not bidders to device type', configManager.deviceType);\n configManager.configGDPMedio.hbPrebid = null;\n return;\n }\n\n // NOTE: 'disabled' key has the disabled bidders separated by comma\n biddersDisabled = [];\n if ('disabled' in headerBidding.biddersConfig) {\n biddersDisabled = headerBidding.biddersConfig.disabled.map(function(current) {\n return current.trim();\n });\n }\n\n adUnits = [];\n headerBidding[property].forEach((current) => {\n var position, newBids = [];\n\n position = current.code.replace(new RegExp(`(${OLD_PREFIX}|${NEW_SUFFIX})`, 'g'), '');\n if (!configManager.existePosEnConfigGDPMedio(position)) {\n showWarn(`HBConfigManager:processPrebidConfig:Position ${position} does not exists in configGDPMedio`);\n return;\n }\n if (!configManager.isActive({position})) {\n showWarn(`HBConfigManager:processPrebidConfig:Position ${position} is not active`);\n return;\n }\n\n current.code += configManager.dynamicId ? `-${configManager.dynamicId}` : '';\n\n if (biddersDisabled.length) {\n current.bids.forEach((bid) => {\n if (biddersDisabled.indexOf(bid.bidder) < 0) {\n newBids.push(bid);\n }\n });\n } else {\n newBids = current.bids;\n }\n\n if (!newBids.length) {\n showWarn(`HBConfigManager:processPrebidConfig:Remove adUnit ${current.code} because all bidders are disabled`);\n return;\n }\n\n current.bids = newBids;\n adUnits.push(current);\n });\n\n newConfig = {\n adUnits: adUnits,\n biddersConfig: headerBidding.biddersConfig,\n enableSendAllBids: headerBidding.enableSendAllBids,\n timeout: headerBidding.timeout || DEFAULT_PREBID_LOAD_TIMEOUT\n };\n\n delete configManager.configGDPMedio.headerBidding;\n configManager.configGDPMedio.hbPrebid = newConfig;\n}\n\n/**\n * Process Amazon HB config to set dynamicId and slotName\n * @param {object} configManager\n */\nfunction _processAmazonConfig(configManager) {\n var property, slots, newConfig;\n var {hbAmazon} = configManager.configGDPMedio;\n\n if (!hbAmazon) {\n showLog('HBConfigManager:processAmazonConfig:There are not Amazon configuration');\n configManager.configGDPMedio.hbAmazon = null;\n return;\n }\n\n property = `slots_${configManager.deviceType}`;\n if (!(property in hbAmazon) || !hbAmazon[property].length) {\n showLog('HBConfigManager:processAmazonConfig:There are not slots to device type', configManager.deviceType);\n configManager.configGDPMedio.hbAmazon = null;\n return;\n }\n\n slots = [];\n hbAmazon[property].forEach((current) => {\n var position;\n\n position = current.slotID.replace(new RegExp(`(${OLD_PREFIX}|${NEW_SUFFIX})`, 'g'), '');\n if (!configManager.existePosEnConfigGDPMedio(position)) {\n showWarn(`HBConfigManager:processAmazonConfig:Position ${position} does not exists in configGDPMedio`);\n return;\n }\n if (!configManager.isActive({position})) {\n showWarn(`HBConfigManager:processAmazonConfig:Position ${position} is not active`);\n return;\n }\n\n current.slotName = _getAmazonSlotName(configManager, position);\n current.slotID += configManager.dynamicId ? `-${configManager.dynamicId}` : '';\n slots.push(current);\n });\n\n newConfig = {\n slots: slots,\n timeout: hbAmazon.timeout || DEFAULT_AMAZON_LOAD_TIMEOUT\n };\n\n configManager.configGDPMedio.hbAmazon = newConfig;\n}\n\nfunction _getAmazonSlotName(configManager, position) {\n var params;\n\n var container$ = $(`[data-voc-vam-position = '${position}']`, configManager.context$);\n if (container$.length) {\n params = configManager.normalizaParams(container$);\n } else {\n params = configManager.normalizaParams({position});\n }\n\n return configManager.getOasSitepage(params);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/header-bidding/config-manager.js","import {\n showLog,\n showError\n} from './logger';\nimport { GPT_URL } from './constants';\nconst _files = {};\n\n/**\n * Check if a object is empty or is undefined. Not be used for arrays or strings\n * @param {mixed} value\n * @return {boolean}\n */\nexport function isEmpty(value) {// OK\n if ((typeof value === 'object' && Object.keys(value).length) ||\n (typeof value !== 'object' && typeof value !== 'undefined')) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Get a URL param value\n * @param {string} paramName\n * @param {string} url\n */\nexport function getParameterByName(paramName, url = window.location.href) {\n var regExp, results;\n\n // NOTE: replace the '[element]' with '\\[element\\]' using '\\\\$&'\n paramName = paramName.replace(/[[\\]]/g, '\\\\$&');\n regExp = new RegExp(`[?&]${paramName}(=([^&#]+)|&|#|$)`);\n results = regExp.exec(url);\n\n if (!results) return '';\n if (!results[2]) return '';\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n}\n\nexport function load(url, options = {}) {\n var promise, file, key;\n\n key = url.split('?').shift();\n if (Object.hasOwnProperty.call(_files, key)) {return _files[key];}\n\n options.type = options.type || 'script';\n\n file = document.createElement(options.type);\n switch (options.type) {\n case 'link':\n file.type = 'text/css';\n file.rel = 'stylesheet';\n file.href = url;\n break;\n case 'script':\n default:\n file.type = 'text/javascript';\n file.src = url;\n file.async = true;\n options.text && (file.text = options.text);\n break;\n }\n\n promise = new window.RSVP.Promise((resolve, reject) => {\n file.onload = () => resolve(file);\n file.onerror = reject;\n\n document.head.appendChild(file);\n });\n\n _files[key] = promise;\n return promise;\n}\n\n/**\n * Carga del JS para la publicidad de Google\n */\nexport function cargaLibreriaGPT() {\n var gads, useSSL, node;\n window.googletag = window.googletag || {};\n window.googletag.cmd = window.googletag.cmd || [];\n window.customcmd = window.customcmd || [];\n try {\n if ($(`script[src*='${GPT_URL}']`).length === 0) {\n gads = document.createElement('script');\n gads.async = true;\n gads.type = 'text/javascript';\n useSSL = document.location.protocol === 'https:';\n gads.src = (useSSL ? 'https:' : 'http:') + `//${GPT_URL}`;\n node = document.getElementsByTagName('script')[0];\n node.parentNode.insertBefore(gads, node);\n window.googletag.cmd.push(function() {\n var func;\n showLog('First function', window.customcmd.length);\n while (window.customcmd.length) {\n func = window.customcmd.splice(0, 1)[0];\n window.googletag.cmd.push(func);\n }\n showLog('Finish Pushing to googletag.cmd', window.customcmd.length);\n window.customcmd = window.googletag.cmd;\n });\n }\n } catch (err) {\n showError('Utils:cargaLibreriaGPT:Error loading GPT library');\n }\n}\n\nexport function extend() {\n var args = arguments;\n var objectValues = Object.keys(args).map(e => args[e]);\n // sustituto de Object.values(args)\n\n objectValues.forEach(function(argument, pos) {\n pos !== 0 && Object.keys(argument).forEach((key) => {\n args[0][key] = argument[key];\n });\n });\n\n return args[0];\n}\n\nexport function endsWith(str, suffix) {\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\n}\n\nexport function startsWith(str, needle) {\n return str.indexOf(needle) === 0;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js","export function extend(destination, source) {\n Object.keys(source).forEach((key) => {\n destination[key] = source[key];\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/mixins/mixin.js","module.exports = {\"name\":\"vam\",\"version\":\"3.11.0\",\"description\":\"\",\"main\":\"src/index.js\",\"scripts\":{\"test\":\"./node_modules/.bin/nyc ./node_modules/.bin/mocha-webpack tests/index.js --require jsdom-global/register --webpack-config webpack.test.js\",\"tdd\":\"./node_modules/.bin/mocha-webpack tests/index.js --require jsdom-global/register --webpack-config webpack.test.js --watch\",\"start\":\"./node_modules/.bin/webpack-dev-server --open --config webpack.dev.js\",\"build\":\"./node_modules/.bin/webpack --optimize-minimize --config webpack.prod.js\",\"prebid\":\"cd ./node_modules/prebid.js/ && npm install && \\\"./node_modules/.bin/gulp\\\" build --modules=../../src/header-bidding/prebid-modules.json && cd ../..\"},\"contributors\":[\"Jose Manuel Ortega \",\"Ernesto V. \",\"Iván Pérez \",\"Mario Cadenas \"],\"license\":\"SEE LICENSE IN LICENSE.md\",\"devDependencies\":{\"babel-core\":\"^6.26.0\",\"babel-eslint\":\"^8.0.1\",\"babel-loader\":\"^7.1.2\",\"babel-plugin-syntax-dynamic-import\":\"^6.18.0\",\"babel-polyfill\":\"^6.16.0\",\"babel-preset-env\":\"^1.6.1\",\"chai\":\"^4.1.2\",\"chalk\":\"^1.1.3\",\"clean-webpack-plugin\":\"^0.1.17\",\"copy-webpack-plugin\":\"^4.3.1\",\"css-loader\":\"^0.28.4\",\"eslint\":\"^4.7.2\",\"eslint-config-airbnb-base\":\"^12.0.1\",\"eslint-plugin-import\":\"^2.7.0\",\"extract-text-webpack-plugin\":\"^1.0.1\",\"file-loader\":\"^1.1.6\",\"html-loader\":\"^0.5.5\",\"html-webpack-plugin\":\"^2.30.1\",\"json-loader\":\"^0.5.7\",\"mocha\":\"^4.0.1\",\"mocha-loader\":\"^1.0.0\",\"mocha-phantomjs\":\"^4.1.0\",\"mocha-webpack\":\"^1.0.1\",\"nyc\":\"^11.4.1\",\"style-loader\":\"^0.18.2\",\"webpack\":\"^3.10.0\",\"webpack-dev-server\":\"^2.9.7\",\"webpack-merge\":\"^4.1.1\",\"webpack-shell-plugin\":\"^0.5.0\"},\"dependencies\":{\"jquery-inview\":\"^1.1.2\",\"js-cookie\":\"^2.1.4\",\"prebid.js\":\"1.10.0\",\"rijndael-js\":\"^1.0.0\",\"rsvp\":\"^3.5.0\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./package.json\n// module id = 8\n// module chunks = 2 3 4","import HBConfigManager from './header-bidding/config-manager';\nimport app from './application';\nimport {\n isEmpty,\n getParameterByName,\n load,\n extend,\n endsWith,\n startsWith\n} from './utils';\nimport {\n showLog,\n showWarn,\n showError\n} from './logger';\nimport {\n DEFAULTS,\n SLOT_INACTIVE,\n OLD_PREFIX,\n NEW_SUFFIX,\n ALTOS_MINIMOS_DISPOSITIVOS,\n GPT_ID_VOCENTO,\n EDITIONS_NAMESPACE,\n CAPTURADOR_WS,\n VAM_CSS_URL,\n MCRYPT_KEY\n} from './constants';\n\nconst URL_PARAM_ALL = 'all';\n\nvar\n _dynamicId = -1,\n _prevEncryptedCode = '',\n _prevUnencryptedCode = ''\n;\n\nclass ConfigManager {\n constructor(configGDPMedio, configGDP) {\n _prevEncryptedCode = '';\n _prevUnencryptedCode = '';\n this.configGDPMedio = extend({}, configGDPMedio);\n this.configGDP = extend({}, configGDP);\n this.deviceType = _getTipoDispositivo.call(this);\n this.pageType = _getTipoPagina.call(this);\n this.dynamicId = ++_dynamicId;\n this.context$ = null;\n this.isResponsiveMedia = _isResponsiveMedia.call(this);\n this.capturadorDataPreview = '';\n this.valueUserType = _getValueUser();\n this.delayedPositions = _getDelayed.call(this);\n this.prioritizedPositions = _getPrioritized.call(this);\n this.globalTargetings = _getDefineSlotTargetings.call(this);\n }\n\n /**\n * Process the configGDPMedia\n */\n processConfig() {\n HBConfigManager.processConfig(this);\n }\n\n /**\n * Check if a position is enabled or disabled\n * @param {object} params\n * @return {boolean}\n */\n isActive(params) {// OK\n var container$, configPosition, configSchedules, currentDate, found;\n\n // check if all positions or the given in params are actives by URL\n if ('forceActivePosition' in this.configGDPMedio &&\n (this.configGDPMedio.forceActivePosition.indexOf('1') > -1 ||\n this.configGDPMedio.forceActivePosition.indexOf(URL_PARAM_ALL) > -1 ||\n this.configGDPMedio.forceActivePosition.indexOf(params.position) > -1)\n ) {\n return true;\n }\n\n container$ = $(`#${this.getIdDiv(params)}`);\n configPosition = app.lookup(`posicion_${this.deviceType}.${params.position}`, this.configGDP);\n\n // Checking that the config of the device type is added\n\n if (!isEmpty(configPosition)) {\n // Check if the position is active for the page type\n if (configPosition.desactivadoen && configPosition.desactivadoen.length\n && configPosition.desactivadoen !== ''\n && configPosition.desactivadoen.indexOf(this.pageType) !== -1\n ) {\n showLog(`ConfigManager:isActive:Position ${params.position} is not active for the pageType ${this.pageType}`);\n container$.trigger(SLOT_INACTIVE);\n return false;\n }\n\n // Check if the position has programming\n currentDate = Math.round(+new Date() / 1000);\n found = false;\n configSchedules = app.lookup(`posicion_${this.deviceType}.${params.position}.programaciones`, this.configGDP);\n if (!isEmpty(configSchedules) && configSchedules.length) {\n found = configSchedules.some(function(current) {\n var beginDate, endDate;\n beginDate = current.programacion ? current.programacion.fecha_in : 0;\n endDate = current.programacion ? current.programacion.fecha_fin : 0;\n return (beginDate === 0 || currentDate >= beginDate)\n && (endDate === 0 || currentDate <= endDate);\n });\n\n if (!found) {\n showLog(`ConfigManager:isActive:Position ${params.position} is not active for the current date`);\n container$.trigger(SLOT_INACTIVE);\n return false;\n }\n }\n } else {\n showLog(`ConfigManager:isActive:Position ${params.position} is not active`);\n container$.trigger(SLOT_INACTIVE);\n return false;\n }\n\n return true;\n }\n\n /**\n * Generate position identifier\n * FUTURE: Clean this method when all pages(ABC, MH, PPLL) use the\n * new ADS strategy(PREFIX or SUFIX come from GDP)\n * @param {object} params\n * @return {string}\n */\n getIdDiv(params) {// OK\n var adsId, dynamicId;\n\n showLog('ConfigManager:getIdDiv:Dinamic ID', params.dynamicId, this.dynamicId);\n dynamicId = this.dynamicId ? `-${this.dynamicId}` : '';\n if (params.dynamicId !== undefined) {\n dynamicId = params.dynamicId ? `-${params.dynamicId}` : '';\n }\n if (params.id && typeof params.id === 'string') {\n showLog('ConfigManager:getIdDiv:With Id param', params);\n adsId = params.id.indexOf(OLD_PREFIX) > -1 ? params.id : `${OLD_PREFIX}${params.id}`;\n if (!$(`#${adsId}`).length) {\n showLog('ConfigManager:getIdDiv:With Id param. Not found ID', adsId);\n adsId = params.id.indexOf(NEW_SUFFIX) > -1 ? params.id : `${params.id}${NEW_SUFFIX}`;\n }\n adsId += endsWith(adsId, dynamicId) ? '' : dynamicId;\n showLog('ConfigManager:getIdDiv:With Id param. Id calculated', adsId);\n } else {\n showLog('ConfigManager:getIdDiv:No Id param', params);\n adsId = `${OLD_PREFIX}${params.position}`;\n if (!$(`#${adsId}`).length) {\n showLog('ConfigManager:getIdDiv:No Id param. Not found ID', adsId);\n adsId = `${params.position}${NEW_SUFFIX}${dynamicId}`;\n }\n showLog('ConfigManager:getIdDiv:No Id param. Id calculated', adsId);\n }\n\n return adsId;\n }\n\n /**\n * Check if position exist in media config\n * @param {string} position\n * @param {string} deviceType\n * @returns {boolean} - TRUE if exist, FALSE otherwise\n */\n existePosEnConfigGDPMedio(position, deviceType = this.deviceType) {// OK\n var idAds;\n\n if (!isEmpty(app.lookup(`posicion_${deviceType}.${position}`, this.configGDPMedio))) {\n return true;\n }\n // If position do not exist, hide the container DIV\n idAds = this.getIdDiv({position});\n $(`#${idAds}`).length && $(`#${idAds}`).hide();\n\n return false;\n }\n\n /**\n * Normalize the position's parameters\n */\n normalizaParams(data) {// OK\n var params, outOfPage, idAds, offset;\n\n params = {};\n // jQuery object or JSON object\n if (data instanceof $) {\n extend(params, DEFAULTS, {\n position: data.data('voc-vam-position') || null,\n serverType: data.data('voc-vam-servertype') || _getServerType.call(this, params.position),\n hideNoAds: data.data('voc-vam-hidenoads'),\n outOfPage: data.data('voc-vam-outofpage'),\n defineSlot: data.data('voc-vam-defineslot') || _getDefineSlotParam.call(this),\n refresh: data.data('voc-vam-refresh'),\n responsive: data.data('voc-vam-responsive'),\n pre_callback: data.data('voc-vam-precallback') || '',\n pre_event: data.data('voc-vam-preevent') || '',\n post_callback: data.data('voc-vam-postcallback') || '',\n post_event: data.data('voc-vam-postevent') || '',\n oas: data.data('voc-vam-oas') || '',\n tags: data.data('voc-vam-tags'),\n dynamicId: this.dynamicId\n });\n } else {\n extend(params, DEFAULTS, {\n position: data.position || null,\n id: data.id || null,\n serverType: data.serverType || _getServerType.call(this, params.position),\n hideNoAds: data.hideNoAds,\n outOfPage: data.outOfPage,\n defineSlot: data.defineSlot || _getDefineSlotParam.call(this),\n refresh: data.refresh,\n responsive: data.responsive,\n pre_callback: data.pre_callback || '',\n pre_event: data.pre_event || '',\n post_callback: data.post_callback || '',\n post_event: data.post_event || '',\n oas: data.oas || '',\n tags: data.tags,\n dynamicId: data.dynamicId || this.dynamicId\n });\n }\n\n // if some required parameter is missing, return null\n if (params.position === null) {\n showWarn('ConfigManager:normalizaParams:Position param is required', data);\n return null;\n }\n\n if (!this.existePosEnConfigGDPMedio(params.position)) {\n showWarn(`ConfigManager:normalizaParams:Position ${params.position} does not exists in configGDPMedio`);\n return null;\n }\n\n // OutOfPage param\n if (typeof params.outOfPage !== 'boolean') {\n outOfPage = app.lookup(`posicion_${this.deviceType}.${params.position}.outofpage`, this.configGDPMedio);\n params.outOfPage = isEmpty(outOfPage) || typeof outOfPage !== 'boolean' ? false : outOfPage;\n }\n\n // ads container DIV\n idAds = this.getIdDiv(params);\n if (!$(`#${idAds}`).length && $(`[data-voc-vam-position = '${params.position}']`, this.context$).length && !$(`[data-voc-vam-position = '${params.position}']`, this.context$).attr('id')) {\n $(`[data-voc-vam-position = '${params.position}']`, this.context$).attr('id', idAds);\n }\n params.id = idAds;\n\n // global targetings\n if (!params.tags) {\n params.tags = app.lookup(`posicion_${this.deviceType}.${params.position}.targetings`, this.configGDPMedio) || {};\n }\n\n // offset\n offset = app.lookup(`posicion_${this.deviceType}.${params.position}.offset`, this.configGDP);\n if (!isEmpty(offset)) {\n $(`#${params.id}`).attr('data-offset', offset);\n showLog(`ConfigManager:normalizaParams:Offset ${offset} configurer for position: ${params.position}`);\n }\n\n // build the responsive parameter if it doesn't come in the data\n if (!params.outOfPage\n && !params.responsive\n && this.isResponsiveMedia) {\n params.responsive = _getResponsiveParam.call(this, params);\n }\n\n return params;\n }\n\n /**\n * Get OAS value from config\n * FUTURE: create final OAS config on GDP\n * @return string\n */\n getOasSitepage(params = {}) {\n var oasSitepage, decryptedURL, legacyAdUnit, regExp, result, macroEdition, edition;\n\n if (params.oas) {\n oasSitepage = params.oas.trim();\n } else {\n oasSitepage = app.lookup(`OAS.${this.deviceType}.${this.pageType}`, this.configGDP);\n oasSitepage = isEmpty(oasSitepage) ? '' : oasSitepage.trim();\n }\n\n // check if adUnit is forced by URL\n try {\n decryptedURL = ConfigManager.decryptedURL();\n if (window.location.href.indexOf('vam_adunit=') > -1 || window.location.href.indexOf('adunit=') > -1 || decryptedURL !== '') {\n legacyAdUnit = window.location.href.indexOf('vam_adunit=') > -1 ? 'vam_adunit' : 'adunit';\n regExp = new RegExp(`(\\\\?|&)${legacyAdUnit}=([^?&]+)`);\n result = (decryptedURL !== '') ? regExp.exec(decryptedURL) : regExp.exec(window.location.href);\n\n if (result) {\n oasSitepage = result[2].indexOf('/' + GPT_ID_VOCENTO + '/') > -1\n ? result[2]\n : '/' + GPT_ID_VOCENTO + '/' + result[2];\n }\n }\n } catch (err) {\n showError('ConfigManager:getOasSitepage:Error checking adUnit', err);\n }\n\n // check macro edition\n try {\n regExp = /{(\\/)?edicion(\\/)?}/;\n macroEdition = regExp.exec(oasSitepage);\n if (macroEdition) {\n edition = _getEdition();\n if (startsWith(macroEdition[0], '{/') && edition) edition = '/' + edition;\n if (endsWith(macroEdition[0], '/}') && edition) edition += '/';\n\n oasSitepage = oasSitepage.replace(macroEdition[0], edition);\n }\n } catch (err) {\n showError('ConfigManager:getOasSitepage:Error checking edition', err);\n }\n\n // Guardamos el valor del adunit calculado por si no lo esta\n if (typeof this.configGDP.OAS.adunit === 'undefined') this.configGDP.OAS.adunit = oasSitepage;\n\n return oasSitepage;\n }\n\n /**\n * Calculate the sizes for a given position\n * FUTURE: move config to GDP\n * @param {string} position\n * @param {string} deviceType - default is _deviceType\n * @return {object}\n */\n getSizesGoogle(position, deviceType = this.deviceType) {// OK\n var configSize, size, defineSlot;\n\n configSize = app.lookup(`posicion_${deviceType}.${position}.dimensiones`, this.configGDPMedio);\n\n size = !isEmpty(configSize) ? configSize : '[]';\n defineSlot = _getDefineSlotParam.call(this);\n\n if (size.indexOf('[fluid]') > -1) {\n if (!defineSlot) return ['fluid'];\n\n size = size.replace('[fluid]', '\\'fluid\\'');\n }\n\n return defineSlot ? size : JSON.parse(size);\n }\n\n /**\n * Detect forced config by URL.\n * Support params:\n * vam_adunit\n * vam_cmvkey\n * vam_debug\n * vam_enable_single_request\n * vam_enable_sync_rendering\n * vam_enable_krux\n * vam_force_positions\n * vam_info_slot\n */\n checkConfigFromURL() {\n var legacyCode, code, prebidDisabledBidders;\n if (typeof window.location === 'undefined') return;\n\n // Disable Prebid\n if ('headerBidding' in this.configGDPMedio &&\n window.location.href.indexOf('vam_prebid_disabled=') > -1\n ) {\n prebidDisabledBidders = getParameterByName('vam_prebid_disabled', window.location.href).split(',');\n this.configGDPMedio.headerBidding.biddersConfig.disabled = prebidDisabledBidders;\n if (prebidDisabledBidders.indexOf(URL_PARAM_ALL) > -1) {\n this.configGDPMedio.headerBidding = null;\n }\n }\n\n // Disable HB Amazon\n if ('hbAmazon' in this.configGDPMedio) {\n this.configGDPMedio.hbAmazon = window.location.href.indexOf('vam_amazon_disabled=1') > -1 || window.location.href.indexOf('gdp_enableAmazonAds=0') > -1 || !this.configGDPMedio.enableAmazonAds ? false : this.configGDPMedio.hbAmazon;\n }\n\n // Single Request\n this.configGDPMedio.singleRequest = window.location.href.indexOf('vam_single_request=1') > -1 || window.location.href.indexOf('gdp_singleRequest=1') > -1 || this.configGDPMedio.singleRequest;\n\n // SyncRendering\n this.configGDPMedio.syncRendering = window.location.href.indexOf('vam_sync_rendering=1') > -1 || window.location.href.indexOf('gdp_syncRendering=1') > -1 || this.configGDPMedio.syncRendering;\n\n // Krux\n this.configGDPMedio.enableKrux = window.location.href.indexOf('vam_krux=1') > -1 || window.location.href.indexOf('gdp_enableKrux=1') > -1 || this.configGDPMedio.enableKrux;\n\n // Force active position\n this.configGDPMedio.forceActivePosition = window.location.href.indexOf('vam_force_positions=') > -1 ? getParameterByName('vam_force_positions', window.location.href).split(',') : getParameterByName('gdp_forceActivePosition', window.location.href).split(',');\n\n // InfoSlot\n this.configGDPMedio.infoSlot = window.location.href.indexOf('vam_info_slot=1') > -1 || window.location.href.indexOf('gdp_infoSlot=1') > -1;\n if (this.configGDPMedio.infoSlot) {\n load(VAM_CSS_URL, {\n type: 'link'\n }).then(function() {\n showLog('ConfigManager:checkConfigFromURL:CSS loaded', VAM_CSS_URL);\n });\n }\n\n // Capturador (modo preview)\n this.configGDPMedio.preview = window.location.href.indexOf('vam_preview') > -1 || window.location.href.indexOf('preview') > -1;\n if (this.configGDPMedio.preview) {\n showLog('ConfigManager:checkConfigFromURL:Detected capture mode. Call capture SW');\n this.capturadorDataPreview = _capturadorGetPreviewData();\n\n // En modo capturador no pondremos priorizadas ni retrasadas\n this.configGDP.priorizadas = {};\n this.configGDP.retrasadas = {};\n }\n\n // Previsualizador\n if (window.location.href.indexOf('vam_code=') > -1 || window.location.href.indexOf('code=') > -1) {\n showLog('ConfigManager:checkConfigFromURL:Detected preview mode');\n legacyCode = window.location.href.indexOf('vam_code=') > -1 ? 'vam_code' : 'code';\n code = getParameterByName(legacyCode, window.location.href);\n _prevEncryptedCode = decodeURI(code);\n\n // En modo previsualizador no pondremos priorizadas ni retrasadas\n this.configGDP.priorizadas = {};\n this.configGDP.retrasadas = {};\n\n if (_prevEncryptedCode !== '') {\n import(/* webpackChunkName: \"rijndael-js\" */ 'rijndael-js').then(function(Rijndael) {\n showLog('ConfigManager:Rijndael library is loaded', Rijndael);\n _decriptUrl(Rijndael);\n });\n }\n }\n }\n\n /**\n * Comprobacion de si existen excepciones para la pagina donde nos encontramos.\n * @return object configGDP\n */\n checkExceptions() {\n var value, unixTime, beginDate, endDate;\n\n if (this.configGDPMedio.excepciones\n && Object.keys(this.configGDPMedio.excepciones).length > 0\n ) {\n showLog('ConfigManager:checkExceptions:There are configured exceptions');\n Object.keys(this.configGDPMedio.excepciones).forEach(function(key) {\n if (key !== 'priorizadas' && key !== 'retrasadas') {\n if (window.location.pathname === key || window.location.pathname.match(key)) {\n value = this.configGDPMedio.excepciones[key];\n unixTime = Math.round(new Date() / 1000);\n beginDate = value.fecha_in;\n endDate = value.fecha_fin;\n if ((beginDate === 0 || beginDate <= unixTime) &&\n (endDate === 0 || unixTime <= endDate)\n ) {\n this.configGDP = value;\n showLog(`ConfigManager:checkExceptions:Applying the following exception:\"${key}\"`);\n }\n }\n }\n }, this);\n }\n }\n\n /**\n * Funcion que devuelve la URL desencriptada\n * @returns {string}\n */\n static decryptedURL() {\n return _prevUnencryptedCode;\n }\n\n /**\n * Funcion que comprueba si una posicion es retrasada\n * FUTURE: listaRetrasadas come in array format from GDP\n */\n isDelayed(position) {\n return this.thereAreDelayedPositions() && this.delayedPositions.indexOf(position) > -1;\n }\n\n thereAreDelayedPositions() {\n return this.delayedPositions.length;\n }\n\n /**\n * Funcion que comprueba si una posicion es retrasada\n * FUTURE: listaRetrasadas come in array format from GDP\n */\n isPrioritized(position) {\n return this.thereArePrioritizedPositions() &&\n this.prioritizedPositions.indexOf(position) > -1;\n }\n\n thereArePrioritizedPositions() {\n return this.prioritizedPositions.length;\n }\n\n removePrioritizedPosition(position) {\n var index = this.prioritizedPositions.indexOf(position);\n\n if (index !== -1) {\n this.prioritizedPositions.splice(index, 1);\n }\n }\n}\n\nexport default ConfigManager;\n\n/* Private */\n\n/**\n * Get the device type depending on the size of the screen\n * @return string\n */\nfunction _getTipoDispositivo() {// OK\n var max, min, screenWidth, deviceType;\n\n deviceType = 'desktop';\n\n if (!this.configGDPMedio.responsive.esResponsive) {\n if (this.configGDPMedio && this.configGDPMedio.tipoDispositivo) {\n deviceType = this.configGDPMedio.tipoDispositivo;\n }\n } else {\n screenWidth = parseInt(window.innerWidth, 10);\n\n Object.keys(this.configGDPMedio.responsive).forEach(function(key) {\n var value = this.configGDPMedio.responsive[key];\n if ((key !== 'esResponsive') && (value.resolucionMaxima || value.resolucionMinima)) {\n max = value.resolucionMaxima ? value.resolucionMaxima : 999999;\n min = value.resolucionMinima ? value.resolucionMinima : 0;\n\n if ((screenWidth <= max) && (screenWidth > min)) {\n deviceType = key.replace('resolucion', '').toLowerCase();\n }\n }\n }, this);\n }\n\n return deviceType;\n}\n\n/**\n * Look for the medium where we are, from the configuration\n * @return string\n */\nfunction _getMedio() {// OK\n return this.configGDPMedio.medio ? this.configGDPMedio.medio : '';\n}\n\n/**\n * Get the page type from the URL pattern\n * NOTE: Each medium has its own URL rules so each one has its own function to calculate them\n * FUTURE: set the page type in global namespace on each page\n */\nfunction _getTipoPagina() {// OK\n var\n pageType = 'portada',\n medio = _getMedio.call(this)\n ;\n\n if (['abc', 'lavozdigital', 'abcdesevilla'].indexOf(medio) > -1) {\n pageType = _getTipoPaginaABC();\n } else if (medio === 'mujerhoy') {\n pageType = _getTipoPaginaMujerhoy();\n } else {\n pageType = _getTipoPaginaPortalesLocales();\n }\n\n return pageType;\n}\n\n/**\n * Get the page type from the URL for abc.es, sevilla.abc.es and lavozdigital.es\n * @return {string}\n */\nfunction _getTipoPaginaABC() {// OK\n var\n oldVideosRegExp, videosRegExp, oldGaleryRegExp2, oldGaleryRegExp,\n galeryRegExp, graphicRegExp, oldNewsRegExp, newsRegExp;\n\n oldVideosRegExp = /\\/videos\\/(.*)?\\/\\d{6}\\/\\d{2}\\/((?!index.html).)*.html/;\n videosRegExp = /_video.html/;\n if (videosRegExp.exec(window.location.pathname) || oldVideosRegExp.exec(window.location.pathname)) return 'video';\n\n oldGaleryRegExp2 = /\\/multimedia\\/fotos\\/(.*)?\\/((?!index.html).)*.html/;\n oldGaleryRegExp = /\\/fotos-(.*)?\\/\\d{8}\\/((?!index.html).)*.html/;\n galeryRegExp = /_galeria.html/;\n if (galeryRegExp.exec(window.location.pathname) || oldGaleryRegExp.exec(window.location.pathname) || oldGaleryRegExp2.exec(window.location.pathname)) return 'galeria';\n\n graphicRegExp = /\\/multimedia\\/(graficos\\/(.)*|infografias)\\/((?!index.html).)*.html/;\n if (graphicRegExp.exec(window.location.pathname)) return 'grafico';\n\n oldNewsRegExp = /\\d{8}\\/(.*)?((?!index.html).)*.html/;\n newsRegExp = /(_noticia.html|_directo.html)/;\n if (newsRegExp.exec(window.location.pathname) || oldNewsRegExp.exec(window.location.pathname)) return 'noticia';\n\n return 'portada';\n}\n\n/**\n * Get the page type from the URL for mujerhoy.com\n * @return {string}\n */\nfunction _getTipoPaginaMujerhoy() {// OK\n var\n videoRegExp, oldVideoRegExp, videoBlogRegExp, isVideo, galeryRegExp, oldGaleryRegExp,\n galeryBlogRegExp, isGalery, newsRegExp, newsBlogRegExp, newsRecipesRegExp, isNews;\n\n videoRegExp = /-vi.html/;\n oldVideoRegExp = /\\/videos\\/(.*)?\\/\\d{6}\\/\\d{2}\\/.*-mm.html/;\n videoBlogRegExp = /\\/videos\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/(.*).html/;\n isVideo = window.location.hostname.indexOf('blogs.') > -1\n ? videoBlogRegExp.exec(window.location.pathname)\n : videoRegExp.exec(window.location.pathname) || oldVideoRegExp.exec(window.location.pathname);\n if (isVideo) return 'video';\n\n galeryRegExp = /-ga.html/;\n oldGaleryRegExp = /^\\/galerias\\/(.*)?\\d{6}\\/\\d{2}\\/.*-mm.html/;\n galeryBlogRegExp = /\\/galerias\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/(.*).html/;\n isGalery = window.location.hostname.indexOf('blogs.') > -1\n ? galeryBlogRegExp.exec(window.location.pathname)\n : galeryRegExp.exec(window.location.pathname) || oldGaleryRegExp.exec(window.location.pathname);\n if (isGalery) return 'galeria';\n\n newsRegExp = /\\/\\d{6}\\/\\d{2}\\/((?!index.html).)*.html/;\n newsBlogRegExp = /\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/((?!index.html).)*.html/;\n newsRecipesRegExp = /\\/\\d{6}\\/((?!index.html).)*.html/;\n if (window.location.hostname.indexOf('blogs.') > -1) {\n isNews = newsBlogRegExp.exec(window.location.pathname);\n } else if (window.location.hostname.indexOf('recetas.') > -1) {\n isNews = newsRecipesRegExp.exec(window.location.pathname);\n } else {\n isNews = newsRegExp.exec(window.location.pathname);\n }\n if (isNews) return 'noticia';\n\n return 'portada';\n}\n\n/**\n * Get the page type from the URL for PPLL\n * @return {string}\n */\nfunction _getTipoPaginaPortalesLocales() {// OK\n var\n videoRegExp, oldVideoRegExp, galeryRegExp, oldGaleryRegExp, newsRegExp, oldNewsRegExp,\n graphicRegExp, oldGraphicRegExp, videoChatRegExp;\n\n videoRegExp = /-(vi|virc|vivo)(_amp)?.html/;\n oldVideoRegExp = /^\\/videos\\/(.*)?\\/\\d{6}\\/\\d{2}\\/.*-mm.html/;\n if (videoRegExp.exec(window.location.pathname) || oldVideoRegExp.exec(window.location.pathname)) return 'video';\n\n galeryRegExp = /-(ga|garc|gavo|ft|ftrc|ftvo)(_amp)?.html/;\n oldGaleryRegExp = /^\\/fotos\\/(.*)?\\d{6}\\/\\d{2}\\/.*-mm.html/;\n if (galeryRegExp.exec(window.location.pathname) || oldGaleryRegExp.exec(window.location.pathname)) return 'galeria';\n\n newsRegExp = /-(nt|ntrc|ntvo)(_amp)?.html/;\n oldNewsRegExp = /\\/\\d{6}\\/\\d{2}\\/((?!index.html).)*.html/;\n if (newsRegExp.exec(window.location.pathname) || oldNewsRegExp.exec(window.location.pathname)) return 'noticia';\n\n // NOTA: En PLs, a nivel de publicidad, contemplaremos graficos y videochats como noticias\n graphicRegExp = /-(in|inrc|invo)(_amp)?.html/;\n oldGraphicRegExp = /^\\/graficos\\/(.*)?\\/\\d{6}\\/\\d{2}\\/.*-mm.html/;\n videoChatRegExp = /\\/videochats\\/((?!index.html).)\\w+/;\n if (graphicRegExp.exec(window.location.pathname) ||\n oldGraphicRegExp.exec(window.location.pathname) ||\n videoChatRegExp.exec(window.location.pathname)\n ) return 'noticia';\n\n return 'portada';\n}\n\n/**\n * Get defineSlot param from config\n * @return {boolean|undefined}\n */\nfunction _getDefineSlotParam() {// OK\n return this.configGDPMedio.defineSlot || undefined;\n}\n\n/**\n * Get the serverType of given position\n * @param {string} position\n * @return {string}\n */\nfunction _getServerType(position) {// OK\n var configServerType, serverType = 'google';\n\n configServerType = app.lookup(\n `posicion_${this.deviceType}.${position}.tipo`,\n this.configGDPMedio\n );\n serverType = !isEmpty(configServerType) ? configServerType : serverType;\n\n return serverType;\n}\n\n/**\n * Check if is responsive from config\n * @return {boolean}\n */\nfunction _isResponsiveMedia() {// OK\n var isResponsive = app.lookup('responsive.esResponsive', this.configGDPMedio);\n\n return !isEmpty(isResponsive) ? isResponsive : false;\n}\n\n/**\n * Build responsive param for the position\n * @return object\n */\nfunction _getResponsiveParam(params) {// OK\n if (params.responsive\n && Array.isArray(params.responsive)\n && params.responsive.length\n ) {\n return params.responsive;\n }\n\n /**\n * It doesn't have responsive param but it is\n * responsive medium so we build responsive param with\n * the corresponding resolutions and sizes\n */\n if (this.isResponsiveMedia) {\n return _createResponsive.call(this, params.position);\n }\n\n return false;\n}\n\n/**\n * Build responsive param\n * FUTURE: move config to GDP\n * @return object\n */\nfunction _createResponsive(position) {// OK\n var responsive, resolution, minWidth, maxWidth, dimension, googleSize, size;\n\n showLog('ConfigManager:createResponsive:Build responsive for', position);\n responsive = [];\n this.configGDPMedio.dispositivos.forEach(function(device) {\n if (!this.existePosEnConfigGDPMedio(position, device)) return;\n\n resolution = app.lookup(`responsive.resolucion${device}`, this.configGDPMedio);\n if (!isEmpty(resolution)) {\n minWidth = resolution.resolucionMinima;\n maxWidth = resolution.resolucionMaxima;\n\n if (!isEmpty(minWidth) && !isEmpty(maxWidth) && (minWidth || maxWidth)) {\n dimension = [\n parseInt(minWidth, 10) || 0,\n ALTOS_MINIMOS_DISPOSITIVOS[device]\n ];\n\n googleSize = this.getSizesGoogle(position, device);\n try {\n if (googleSize && googleSize.indexOf('fluid') > -1) {\n size = 'fluid';\n } else {\n size = JSON.parse(googleSize);\n }\n } catch (e) {\n showWarn(`ConfigManager:createResponsive:Processing position ${position}: ${e}`);\n size = googleSize;\n }\n\n // Insert the dimension mapping ordered from lowest to highest by width\n responsive.push([dimension, size]);\n }\n }\n }, this);\n responsive.sort(function(pair1, pair2) {\n return pair1[0][0] - pair2[0][0];\n });\n\n responsive.sort(function(pair1, pair2) {\n return pair1[0][0] - pair2[0][0];\n });\n showLog(`ConfigManager:createResponsive:Build responsive param for position ${position}`, responsive);\n\n return responsive;\n}\n\n/**\n * Get edition from config\n */\nfunction _getEdition() {// OK\n var editions = app.lookup(EDITIONS_NAMESPACE);\n\n return editions.current || (editions.main || '');\n}\n\n/**\n * Invoca al Servicio Web del Capturador para obtener las creatividades indicadas en el parametro\n * preview directamente desde DFP.\n */\nfunction _capturadorGetPreviewData() {\n var legacyPreview, url, data;\n\n legacyPreview = window.location.href.indexOf('vam_preview') > -1 ? 'vam_preview' : 'preview';\n url = CAPTURADOR_WS + '?id=' + getParameterByName(legacyPreview);\n data = '';\n $.ajax({\n url: url,\n type: 'POST',\n async: false,\n success: function (result) {\n data = result;\n }\n });\n\n return data;\n}\n\n/**\n * Convert Gigya user format to advertising format\n */\nfunction _getValueUser() {// OK\n var valueUser, arrayUsers = {\n suscriptor: 's',\n trial: 't',\n registrado: 'r',\n anonimo: 'a'\n };\n\n valueUser = arrayUsers[app.getUserType()] || 'a';\n\n return valueUser;\n}\n\nfunction _getDelayed() {\n var delayedPositions;\n\n delayedPositions = app.lookup(`retrasadas.${this.deviceType}.listaPosiciones`, this.configGDP);\n\n if (isEmpty(delayedPositions) || !delayedPositions.length) {\n showLog('ConfigManager:getDelayed:There are NOT delayed positions');\n return [];\n }\n\n showLog('ConfigManager:getDelayed:There are delayed positions:', delayedPositions);\n delayedPositions = delayedPositions.split(',').filter(function(position) {\n return position.trim();\n });\n\n return delayedPositions;\n}\n\nfunction _getPrioritized() {\n var prioritizedPositions;\n\n prioritizedPositions = app.lookup(`priorizadas.${this.deviceType}.listaPosiciones`, this.configGDP);\n\n if (isEmpty(prioritizedPositions) || !prioritizedPositions.length) {\n showLog('ConfigManager:getPrioritized:There are NOT prioritized positions');\n return [];\n }\n\n showLog('ConfigManager:getDelayed:There are prioritized positions:', prioritizedPositions);\n prioritizedPositions = prioritizedPositions.split(',').filter(function(position) {\n return position.trim();\n });\n\n return prioritizedPositions;\n}\n\n/**\n * Decrypt url to get cmvkey param\n * @param {object} mcrypt - Rijndael object\n */\nfunction _decriptUrl(Rijndael) {\n var legacyCmvkey, mcrypt, preparedCode;\n showLog('ConfigManager:decriptUrl:Actual prevUnencryptedCode', _prevUnencryptedCode, 'and prevEncryptedCode', _prevEncryptedCode);\n if (_prevUnencryptedCode === '' && _prevEncryptedCode !== '') {\n mcrypt = new Rijndael(MCRYPT_KEY, 'cbc');\n showLog('ConfigManager:decriptUrl:Decrypting', mcrypt);\n preparedCode = atob(_prevEncryptedCode).split('').map(function(value) {\n return value.charCodeAt(0);\n });\n _prevUnencryptedCode = '?' + mcrypt.decrypt(preparedCode, 256, MCRYPT_KEY);\n showLog('ConfigManager:decriptUrl:', _prevUnencryptedCode);\n // NOTE: remove special characters from string\n _prevUnencryptedCode = _prevUnencryptedCode.replace(\n /[^A-Za-z 0-9.,?\"\"!@#$%^&*()\\-_=+;:<>/\\\\|}{[\\]`~]*/g,\n ''\n );\n\n if (endsWith(_prevUnencryptedCode, '&vam_cmvkey=') ||\n endsWith(_prevUnencryptedCode, '&cmvkey=')\n ) {\n legacyCmvkey = endsWith(_prevUnencryptedCode, '&vam_cmvkey=')\n ? '&vam_cmvkey='\n : '&cmvkey=';\n _prevUnencryptedCode = _prevUnencryptedCode.replace(legacyCmvkey, '');\n }\n showLog(`ConfigManager:decriptUrl:String decrypted: ${_prevUnencryptedCode}`);\n }\n\n return _prevUnencryptedCode;\n}\n\n/**\n * Funcion que obtiene los tag definidos en los archivos de configuración\n * FUTURE: move config to GDP\n * @return object\n */\nfunction _getDefineSlotTargetings() {\n var medioTargetings, pageTargetings, targetings, defineSlotTargetings;\n\n medioTargetings = this.configGDPMedio.targetings ? this.configGDPMedio.targetings : {};\n pageTargetings = this.configGDP.targetings ? this.configGDP.targetings : {};\n targetings = {};\n extend(targetings, medioTargetings, pageTargetings);\n\n defineSlotTargetings = '';\n Object.keys(targetings).forEach(function(key) {\n defineSlotTargetings += `.setTargeting(\"${key}\", \"${targetings[key]}\")`;\n });\n\n return defineSlotTargetings;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/config-manager.js"],"sourceRoot":""}