{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///vam.js","webpack:///webpack/bootstrap c342a605c2fbc6ac6580","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","PREBID_AUCTION_ENDED","PREBID_SET_TARGETINGS","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","_app$lookup","lookup","media","rawSection","data","forcedOas","section","_utils","urlToSection","oasOptions","params","JSON","parse","VERSION","_package","_package2","_application","_advertising","_configManager","_window","Vocento","Publicidad","jQuery","datos","getOasSitepage","getSizesGoogle","getValueUser","ready","config","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","replace","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","RegExp","exec","chunck","pair","keyChunk","valueChunk","_getTopics","enableTpag","pageType","outOfPage","_getSizeMapping","definition","defineSlot","_getNombreSlot","_getClavePosicionInsertada","_insertedPositions","_executeDefineSlot","eval","_notDisplayedSlots","_display","index","idDiv","_providerManager2","isActive","getIsEmptyResponse","display","setTargetings","getTargetingsCount","_setTargetingsTimeout","catch","singleRequest","splice","mappingName","finalDefinition","addSize","viewportSize","responsiveSizes","singleSize","j","_displayStandarQueued","_standardDelayed","Advertising","_displayPrioritized","prioritizedPositions","_pintaListaPosiciones","listaPositions","sonPosicionesPriorizadas","container$","posCuyoDivExiste","existePosEnConfigGDPMedio","normalizaParams","stringify","pushAdUnitForTargetings","id","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","_ref","headerBidding","timeoutSetTargetings","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","gatewayName","NAME","_gatewaysAdUnitCodes","adUnitCodes","getLoadPromise","_amazon","_amazon2","_prebid","_prebid2","_gatewaysPromises","cmd","all","reason","adUnits","g","response","emptyResponse","adUnit","counter","30","_loadLibrary","REASONS","ERROR_LOAD_LIBRARY","_setConfig","apstag","ERROR_INIT_CONFIG","_fetchBid","bidConfig","slots","fetchBids","bids","_emptyResponse","TIMEOUT_REACHED_FETCH_BIDS","targetingKeys","_adserverRequestResponse","TIMEOUT_REACHED_GLOBAL","hbAmazon","_ref2","setDisplayBids","31","apstagGlobalName","queue","r","_Q","32","hbPrebid","biddersConfig","pbjsConfig","debug","enableSendAllBids","priceGranularity","consentManagement","cmpApi","allowAuctionWithoutConsent","pbjs","bidderSettings","_fetchBiddersSettings","setConfig","getConfig","EMPTY_ADUNITS","que","onEvent","_auctionHasEnded","_setTargettingsEvent","addAdUnits","requestBids","bidsBackHandler","biddersResponse","getAdserverTargeting","bidderName","bidCpmAdjustment","bidCpm","bid","percent","bidderCode","auctionId","offEvent","_targetingsCount","addUnits","setTargetingForGPTAsync","33","_processPrebidConfig","newConfig","biddersDisabled","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","sectionUrl","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","tipoContenido","_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","modifyOAS","dynamicOas","configPosition","configSchedules","currentDate","forceActivePosition","desactivadoen","round","Date","some","beginDate","endDate","programacion","fecha_in","fecha_fin","adsId","offset","oas","attr","oasSitepage","legacyAdUnit","macroEdition","edition","OAS","adunit","configSize","legacyCode","prebidDisabledBidders","enableAmazonAds","priorizadas","retrasadas","decodeURI","bind","unixTime","excepciones","match","thereAreDelayedPositions","_modifyOAS","newOas","option"],"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.13.2/\";\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.13.2/\" + 'prebid.js';\nvar PREBID_AUCTION_ENDED = exports.PREBID_AUCTION_ENDED = 'vam:headerbidding-auctionended';\nvar PREBID_SET_TARGETINGS = exports.PREBID_SET_TARGETINGS = 'vam:headerbidding-settargetings';\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 _app$lookup = _application2.default.lookup(_constants.CONFIG_NAMESPACE),\n media = _app$lookup.media,\n options = _app$lookup.options;\n\n var rawSection = context$.data('sectionUrl') || '';\n var forcedOas = context$.data('voc-vam-force-oas') || '';\n var section = (0, _utils.urlToSection)(rawSection);\n var oasOptions = { section: section, forcedOas: forcedOas };\n var configManager = void 0;\n\n configManager = new _configManager2.default(media, options, oasOptions);\n\n if (context$.data('voc-vam-configgdp')) {\n context$.data('voc-vam-configgdp', null);\n }\n\n (0, _logger.showLog)('Reload event has been invoked. Config value: ', { media: configManager.configGDPMedio, options: configManager.configGDP });\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\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 _setTargetingsTimeout = 50;\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 var _ref = configManager.configGDPMedio.headerBidding ? configManager.configGDPMedio.headerBidding : {},\n timeoutSetTargetings = _ref.timeoutSetTargetings;\n\n _configManager = null;\n _standardDelayed = [];\n _gptInitialized = false;\n _insertedPositions = {};\n _notDisplayedSlots = [];\n _completadasPriorizadas = false;\n _reload = reload;\n _setTargetingsTimeout = timeoutSetTargetings || 50;\n _configManager = configManager;\n _configManager.context$ = context$;\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 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 if (_providerManager2.default.isActive()) {\n _providerManager2.default.pushAdUnitForTargetings(params.id);\n }\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\n if (_providerManager2.default.isActive() && !_reload) {\n _application2.default.whenUntil(_constants.PREBID_AUCTION_ENDED, 0).then(function () {\n if (!_providerManager2.default.getIsEmptyResponse()) {\n _providerManager2.default.setTargetings();\n _application2.default.whenUntil('' + _constants.PREBID_SET_TARGETINGS + _providerManager2.default.getTargetingsCount(), _setTargetingsTimeout).then(function () {\n window.googletag.display(idDiv);\n }).catch(function () {\n window.googletag.display(idDiv);\n });\n } else {\n window.googletag.display(idDiv);\n }\n }).catch(function () {\n if (!_reload) {\n _providerManager2.default.setTargetings();\n }\n window.googletag.display(idDiv);\n });\n } else {\n window.googletag.display(idDiv);\n }\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 if (_providerManager2.default.isActive()) {\n _providerManager2.default.pushAdUnitForTargetings(params.id);\n }\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 // HBProviderManager.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 if (_providerManager2.default.isActive()) {\n _providerManager2.default.pushAdUnitForTargetings(params.id);\n }\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 if (_providerManager2.default.isActive()) {\n _providerManager2.default.pushAdUnitForTargetings(params.id);\n }\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 // HBProviderManager.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 // HBProviderManager.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\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 // HBProviderManager.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 // HBProviderManager.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 = [];\nvar _gatewaysAdUnitCodes = [];\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 var adUnits = void 0;\n _gatewaysAdUnitCodes.forEach(function (g) {\n if (g.gatewayName === gateway.NAME) {\n adUnits = g.adUnitCodes;\n }\n });\n gateway.setTargetings(adUnits);\n });\n },\n\n /**\n * Check if there are gateways actives\n */\n isActive: function isActive() {\n return _gatewaysPromises.length;\n },\n getIsEmptyResponse: function getIsEmptyResponse() {\n var response = false;\n _gatewaysAdded.forEach(function (gateway) {\n if (gateway.emptyResponse) {\n response = true;\n }\n });\n return response;\n },\n pushAdUnitForTargetings: function pushAdUnitForTargetings(adUnit) {\n _gatewaysAdUnitCodes.forEach(function (gateway) {\n gateway.adUnitCodes.push(adUnit);\n });\n },\n getTargetingsCount: function getTargetingsCount() {\n var counter = 0;\n _gatewaysAdded.forEach(function (gateway) {\n if (gateway.NAME === 'PREBID') {\n counter = gateway.getTargetingsCount();\n }\n });\n return counter;\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 var gatewayName = gateway.NAME;\n if (gateway.isActive(config)) {\n (0, _logger.showLog)('HBManager:loadActivesGateways:Add promise', gateway.NAME);\n _gatewaysAdded.push(gateway);\n _gatewaysAdUnitCodes.push({\n gatewayName: gatewayName,\n adUnitCodes: []\n });\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;\nvar _emptyResponse = true;\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 get emptyResponse() {\n return _emptyResponse;\n },\n set emptyResponse(response) {\n _emptyResponse = response;\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 _emptyResponse = Object.keys(bids).length === 0;\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 _emptyResponse = true;\nvar _targetingsCount = 0;\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 get emptyResponse() {\n return _emptyResponse;\n },\n set emptyResponse(response) {\n _emptyResponse = response;\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(addUnits) {\n if (_adserverRequestResponse) {\n window.customcmd.push(function () {\n window.pbjs.que.push(function () {\n window.pbjs.setTargetingForGPTAsync(addUnits);\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 getTargetingsCount: function getTargetingsCount() {\n return _targetingsCount;\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 window.pbjs.onEvent('auctionEnd', _auctionHasEnded);\n window.pbjs.onEvent('setTargeting', _setTargettingsEvent);\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 _emptyResponse = Object.keys(biddersResponse).length === 0;\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\nfunction _auctionHasEnded() {\n var auctionId = arguments[0].auctionId;\n\n\n _application2.default.promised(_constants.PREBID_AUCTION_ENDED, auctionId);\n window.pbjs.offEvent('auctionEnd', _auctionHasEnded);\n}\n\nfunction _setTargettingsEvent() {\n _targetingsCount++;\n _application2.default.promised('' + _constants.PREBID_SET_TARGETINGS + _targetingsCount, true);\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;\nexports.urlToSection = urlToSection;\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\nfunction urlToSection(sectionUrl) {\n return sectionUrl.replace(/^\\/|\\/$/g, '');\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.13.2\",\"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.12.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 var modifyOAS = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n _classCallCheck(this, ConfigManager);\n\n _prevEncryptedCode = '';\n _prevUnencryptedCode = '';\n this.configGDPMedio = $.extend(true, {}, configGDPMedio);\n this.configGDP = $.extend(true, {}, configGDP);\n this.modifyOAS = modifyOAS;\n this.dynamicOas();\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: 'dynamicOas',\n value: function dynamicOas() {\n var _this = this;\n\n var _modifyOAS = this.modifyOAS,\n section = _modifyOAS.section,\n forcedOas = _modifyOAS.forcedOas;\n\n var newOas = forcedOas ? section + '/' + forcedOas : section;\n\n if (!section || !forcedOas) return;\n\n Object.keys(this.configGDP.OAS).forEach(function (device) {\n Object.keys(_this.configGDP.OAS[device]).forEach(function (option) {\n if ((0, _utils.endsWith)(_this.configGDP.OAS[device][option], 'portada') || option === 0) {\n if (device !== 'adunit') {\n _this.configGDP.OAS[device][option] = _this.configGDP.OAS[device][option].replace(new RegExp('portada?$', 'g'), newOas);\n }\n } else {\n _this.configGDP.OAS[device][option] = _this.configGDP.OAS[device][option] + '/' + section;\n }\n });\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 (window.tipoContenido && window.tipoContenido !== 'portadilla') {\n return window.tipoContenido;\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() {\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.13.2/\";\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 c342a605c2fbc6ac6580","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 PREBID_AUCTION_ENDED = 'vam:headerbidding-auctionended';\nexport const PREBID_SET_TARGETINGS = 'vam:headerbidding-settargetings';\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';\nimport { urlToSection } from './utils';\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 const { media, options } = app.lookup(CONFIG_NAMESPACE);\n const rawSection = context$.data('sectionUrl') || '';\n const forcedOas = context$.data('voc-vam-force-oas') || '';\n const section = urlToSection(rawSection);\n const oasOptions = { section, forcedOas };\n let configManager;\n\n configManager = new ConfigManager(media, options, oasOptions);\n\n if (context$.data('voc-vam-configgdp')) {\n context$.data('voc-vam-configgdp', null);\n }\n\n showLog('Reload event has been invoked. Config value: ', { media: configManager.configGDPMedio, options: configManager.configGDP });\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\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 PREBID_SET_TARGETINGS,\n PREBID_AUCTION_ENDED\n} from './constants';\n\nvar\n _configManager = null,\n _standardDelayed = [],\n _gptInitialized = false,\n _insertedPositions = {},\n _notDisplayedSlots = [],\n _completadasPriorizadas = false,\n _reload = false,\n _setTargetingsTimeout = 50\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 const { timeoutSetTargetings } = configManager.configGDPMedio.headerBidding\n ? configManager.configGDPMedio.headerBidding\n : {};\n _configManager = null;\n _standardDelayed = [];\n _gptInitialized = false;\n _insertedPositions = {};\n _notDisplayedSlots = [];\n _completadasPriorizadas = false;\n _reload = reload;\n _setTargetingsTimeout = timeoutSetTargetings || 50;\n _configManager = configManager;\n _configManager.context$ = context$;\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 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 if (HBProviderManager.isActive()) {\n HBProviderManager.pushAdUnitForTargetings(params.id);\n }\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\n if (HBProviderManager.isActive() && !_reload) {\n app.whenUntil(PREBID_AUCTION_ENDED, 0)\n .then(() => {\n if (!HBProviderManager.getIsEmptyResponse()) {\n HBProviderManager.setTargetings();\n app.whenUntil(`${PREBID_SET_TARGETINGS}${HBProviderManager.getTargetingsCount()}`, _setTargetingsTimeout)\n .then(() => {\n window.googletag.display(idDiv);\n }).catch(() => {\n window.googletag.display(idDiv);\n });\n } else {\n window.googletag.display(idDiv);\n }\n })\n .catch(() => {\n if (!_reload) {\n HBProviderManager.setTargetings();\n }\n window.googletag.display(idDiv);\n });\n } else {\n window.googletag.display(idDiv);\n }\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 if (HBProviderManager.isActive()) {\n HBProviderManager.pushAdUnitForTargetings(params.id);\n }\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 if (HBProviderManager.isActive()) {\n HBProviderManager.pushAdUnitForTargetings(params.id);\n }\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 if (HBProviderManager.isActive()) {\n HBProviderManager.pushAdUnitForTargetings(params.id);\n }\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\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 = [];\nvar _gatewaysAdUnitCodes = [];\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((gateway) => {\n let adUnits;\n _gatewaysAdUnitCodes.forEach(g => {\n if (g.gatewayName === gateway.NAME) {\n adUnits = g.adUnitCodes;\n }\n });\n gateway.setTargetings(adUnits);\n });\n },\n /**\n * Check if there are gateways actives\n */\n isActive() {\n return _gatewaysPromises.length;\n },\n getIsEmptyResponse() {\n let response = false;\n _gatewaysAdded.forEach((gateway) => {\n if (gateway.emptyResponse) {\n response = true;\n }\n });\n return response;\n },\n pushAdUnitForTargetings(adUnit) {\n _gatewaysAdUnitCodes.forEach((gateway) => {\n gateway.adUnitCodes.push(adUnit);\n });\n },\n getTargetingsCount() {\n let counter = 0;\n _gatewaysAdded.forEach(gateway => {\n if (gateway.NAME === 'PREBID') {\n counter = gateway.getTargetingsCount();\n }\n });\n return counter;\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 const gatewayName = gateway.NAME;\n if (gateway.isActive(config)) {\n showLog('HBManager:loadActivesGateways:Add promise', gateway.NAME);\n _gatewaysAdded.push(gateway);\n _gatewaysAdUnitCodes.push({\n gatewayName,\n adUnitCodes: []\n });\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\nlet _adserverRequestResponse = false;\nlet _emptyResponse = true;\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 get emptyResponse() {\n return _emptyResponse;\n },\n set emptyResponse(response) {\n _emptyResponse = response;\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((resolve, reject) => {\n showLog('Amazon:fetchBid:Add Slots', bidConfig.slots);\n showLog('Amazon:fetchBid:Request Amazon');\n window.apstag.fetchBids(bidConfig, (bids) => {\n showLog('Amazon:fetchBid:Response from Amazon', bids);\n // NOTE: When there are no bids returned, the bids array will be empty\n _emptyResponse = Object.keys(bids).length === 0;\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 PREBID_AUCTION_ENDED,\n PREBID_SET_TARGETINGS\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\nlet _emptyResponse = true;\nlet _targetingsCount = 0;\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 get emptyResponse() {\n return _emptyResponse;\n },\n set emptyResponse(response) {\n _emptyResponse = response;\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(addUnits) {\n if (_adserverRequestResponse) {\n window.customcmd.push(function() {\n window.pbjs.que.push(function() {\n window.pbjs.setTargetingForGPTAsync(addUnits);\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 getTargetingsCount() {\n return _targetingsCount;\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((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(() => {\n window.pbjs.onEvent('auctionEnd', _auctionHasEnded);\n window.pbjs.onEvent('setTargeting', _setTargettingsEvent);\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: (biddersResponse) => {\n showLog('Prebid:fetchBid:Response from Prebid', biddersResponse);\n _emptyResponse = Object.keys(biddersResponse).length === 0;\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\nfunction _auctionHasEnded() {\n const { auctionId } = arguments[0];\n\n app.promised(PREBID_AUCTION_ENDED, auctionId);\n window.pbjs.offEvent('auctionEnd', _auctionHasEnded);\n}\n\nfunction _setTargettingsEvent() {\n _targetingsCount++;\n app.promised(`${PREBID_SET_TARGETINGS}${_targetingsCount}`, true);\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\nexport function urlToSection(sectionUrl) {\n return sectionUrl.replace(/^\\/|\\/$/g, '');\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.13.2\",\"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.12.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, modifyOAS = {}) {\n _prevEncryptedCode = '';\n _prevUnencryptedCode = '';\n this.configGDPMedio = $.extend(true, {}, configGDPMedio);\n this.configGDP = $.extend(true, {}, configGDP);\n this.modifyOAS = modifyOAS;\n this.dynamicOas();\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 dynamicOas() {\n const { section, forcedOas } = this.modifyOAS;\n const newOas = forcedOas ? `${section}/${forcedOas}` : section;\n\n if (!section || !forcedOas) return;\n\n Object.keys(this.configGDP.OAS).forEach(device => {\n Object.keys(this.configGDP.OAS[device]).forEach(option => {\n if (endsWith(this.configGDP.OAS[device][option], 'portada') || option === 0) {\n if (device !== 'adunit') {\n this.configGDP.OAS[device][option] = this.configGDP.OAS[device][option].replace(new RegExp('portada?$', 'g'), newOas);\n }\n } else {\n this.configGDP.OAS[device][option] = `${this.configGDP.OAS[device][option]}/${section}`;\n }\n });\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 (window.tipoContenido && window.tipoContenido !== 'portadilla') {\n return window.tipoContenido;\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":""}