{"version":3,"file":"sdp.umd.js","sources":["../resource/js/utils.js","../resource/js/advertising/contanst.js","../resource/js/advertising/advertisingBase.js","../resource/js/advertising/AdBasic.js","../resource/js/advertising/AdFixed.js","../resource/js/advertising/AdPopUp.js","../resource/js/advertising/AdFactory.js","../resource/js/main.js"],"sourcesContent":["/**\r\n * @typedef {Object} AdParam\r\n * @property {boolean|null} singleAd\r\n * @property {string|null} section\r\n * @property {boolean} development\r\n * @property {string|null} client\r\n * @property {number|null} intervalPopUp\r\n * @property {boolean} isDiagram\r\n *\r\n */\r\n\r\n/*\r\n * @return {AdParam}\r\n */\r\n\r\nexport function getParam () {\r\n return {\r\n singleAd: document.currentScript.getAttribute('data-singleAd') ?? null,\r\n section: document.currentScript.getAttribute('data-section') ?? null,\r\n development: (document.currentScript.getAttribute('data-development') ?? false) == 'true',\r\n client: document.currentScript.getAttribute('data-client') ?? null,\r\n intervalPopUp: document.currentScript.getAttribute('data-intervalPopUp') ?? 60,\r\n isDiagram: (document.currentScript.getAttribute('data-isDiagram') ?? '') == 'true'\r\n }\r\n}\r\n","import { getParam } from '../utils'\r\n\r\nexport const _DESKTOP_ = 1\r\nexport const _MOVIL_ = 2\r\nexport const movilMaxWidth = 768\r\nexport const ACTION = {\r\n click: 1,\r\n print: 2\r\n}\r\nexport const AD_TYPE = {\r\n Basic: 1,\r\n PopUp: 2,\r\n Fixed: 3,\r\n Multiple: 4\r\n}\r\n\r\nexport const STATUS_ERROR = -1\r\nexport const URL_BASE = import.meta.env.VITE_URL_BASE\r\n\r\nexport const AdParam = getParam()\r\n","import { ACTION, AdParam, STATUS_ERROR, URL_BASE, _DESKTOP_ } from './contanst'\r\n\r\nexport class Advertising {\r\n constructor (data) {\r\n this.data = data\r\n this.container = {}\r\n }\r\n\r\n executeScript (script) {\r\n if (!script.src) {\r\n const f = new Function(script.textContent)\r\n f()\r\n } else {\r\n const s = document.createElement('script')\r\n s.src = script.src\r\n document.head.appendChild(s)\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @returns {undefined}\r\n */\r\n init () {\r\n this.container = document.querySelector(`[data-element=\"${this.data.id}\"]`)\r\n this.container.innerHTML = this.data.html\r\n if (this.data.ads[-1]) {\r\n this.container.querySelectorAll('script').forEach(this.executeScript)\r\n }\r\n this.container.querySelectorAll('[data-type=\"3\"] iframe').forEach((iframe) => {\r\n iframe.onload = () => {\r\n const doc = iframe.contentDocument\r\n const style = document.createElement('style')\r\n style.innerHTML = 'body{margin:0;padding:0;overflow:hidden;}'\r\n doc.head.append(style)\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * funcion para el setear la accion de click en una publicidad\r\n * @param {type} elements\r\n * @returns {undefined}\r\n */\r\n addClick (elements) {\r\n const _this = this\r\n for (let i = 0; i < elements.length; i++) {\r\n elements[i].addEventListener('click', function clickAd () {\r\n const code = _this.getCodeAd(this)\r\n _this.AddDispatched(_this.data.ads[code], ACTION.click, (!_this.data.containerClick))\r\n this.removeEventListener('click', clickAd, false)\r\n })\r\n }\r\n }\r\n\r\n /**\r\n * se guarda el dispositivo en el que se esta mostrando la publicadad\r\n * @param int media\r\n * @returns null\r\n */\r\n setMedia (media) {\r\n this.data.media = media\r\n }\r\n\r\n /**\r\n * se obtenien el codigo de la publicadad desde el atributo id del elemento\r\n * @param {type} element\r\n * @returns {Number|CAdvertising.getCodeAd.list|String}\r\n */\r\n getCodeAd (element) {\r\n const css = element.classList\r\n let code = 0\r\n for (let i = 0; i < css.length; i++) {\r\n if (css[i].indexOf('Ad-') != -1) {\r\n const list = css[i].split('-')\r\n code = list.length == 3 ? list[1] : '-' + list[2]\r\n }\r\n }\r\n return code\r\n }\r\n\r\n /**\r\n * funcion para el setear la accion de cuando aparece en pantalla en una publicidad\r\n * @param {type} elements\r\n * @returns null\r\n */\r\n addPrint (elements) {\r\n const _this = this\r\n let container = document.querySelector(`[data-element=\"${this.data.id}\"]`)\r\n let topAD = container.offsetTop\r\n /* busco la altura especifica en donde empiza el contenedor */\r\n while (1) {\r\n if (container.offsetParent) {\r\n container = container.offsetParent\r\n topAD += container.offsetTop\r\n } else {\r\n break\r\n }\r\n }\r\n /* funcion que verifica si esta en la posicion especifica y si no fue ya ejecutado el imprimir */\r\n const printDispatched = () => {\r\n const posScreen = window.scrollY + container.clientHeight\r\n if (posScreen > topAD && posScreen < (topAD + container.clientHeight)) {\r\n for (let i = 0; i < elements.length; i++) {\r\n if (elements.length == 1 || elements[i].classList.contains('active')) {\r\n const code = _this.getCodeAd(elements[i])\r\n if (!_this.data.ads[code].print) {\r\n _this.addScriptPrint(_this.data.ads[code])\r\n _this.AddDispatched(_this.data.ads[code], ACTION.print, (!_this.data.containerPrint))\r\n _this.data.ads[code].print = true\r\n _this.data.containerPrint = true\r\n }\r\n return\r\n }\r\n }\r\n }\r\n }\r\n window.addEventListener('scroll', printDispatched)\r\n if (elements.length > 1) { document.getElementById('carousel-' + this.data.id).addEventListener('slid.bs.carousel', printDispatched) }\r\n\r\n printDispatched()\r\n }\r\n\r\n /**\r\n * se agrega el script que tiene acciones de tercero para cuando se muestra la publicidad\r\n * @returns null\r\n */\r\n addScriptPrint (ad) {\r\n if (ad.scriptPrint != null) {\r\n const container = document.querySelector(`[data-element=\"${this.data.id}\"]`)\r\n const div = document.createElement('div')\r\n div.innerHTML = ad.scriptPrint\r\n container.append(div)\r\n div.querySelectorAll('script').forEach(this.executeScript)\r\n }\r\n }\r\n\r\n /**\r\n * creacion de carousel de publicidad\r\n * @returns null\r\n */\r\n createCarousel () {\r\n const carousel = document.querySelector(`[data-element=\"${this.data.id}\"]`)\r\n carousel.querySelector('.item').classList.add('active')\r\n if (this.data.media === _DESKTOP_) {\r\n carousel.querySelector('.carousel-inner').style.minHeight = this.data.dimensions.desktop.height + 'px'\r\n } else {\r\n carousel.querySelector('.carousel-inner').style.minHeight = this.data.dimensions.movil.height + 'px'\r\n }\r\n\r\n const carouselControl = new bootstrap.Carousel(carousel, {\r\n interval: (this.data.carousel.interval * 1000),\r\n ride: 'carousel'\r\n })\r\n if (carousel.querySelector('video')) {\r\n const videos = carousel.querySelectorAll('.carousel-item:not(.active) video')\r\n for (let i = 0; i < videos.lenght; i++) {\r\n videos[i].pause()\r\n }\r\n carousel.addEventListener('slide.bs.carousel', function () {\r\n if (this.querySelector('.active video')) {\r\n this.querySelector('.active video').pause()\r\n }\r\n })\r\n carousel.addEventListener('slid.bs.carousel', function () {\r\n if (this.querySelector('.active video')) {\r\n this.querySelector('.active video').play()\r\n }\r\n })\r\n }\r\n carouselControl.cycle()\r\n }\r\n\r\n /**\r\n * llamado a calledAdvertisign para setear la impresion de tantalla o un click\r\n * @param {type} ad\r\n * @param int event\r\n * @param bool eventContainer envia true si ahi que setear un evento en la tabla del historico del contenedor en caso contrario flase\r\n * @returns {undefined}\r\n */\r\n AddDispatched (ad, event, eventContainer) {\r\n if (AdParam.development) {\r\n return\r\n }\r\n const data = {\r\n codeAd: ad.codeAd,\r\n codeRemote: ad.remote,\r\n version: ad.version,\r\n section: this.data.section,\r\n media: this.data.media\r\n }\r\n /* if (eventContainer) { */\r\n data.idContainer = this.data.idContainer\r\n data.addContainer = true\r\n data.origin = ad.origin\r\n /* } else {\r\n data.addContainer = false;\r\n } */\r\n fetch(`${URL_BASE}/${event == ACTION.click ? 'setClick' : 'setPrint'}`, {\r\n method: 'POST',\r\n body: JSON.stringify(data)\r\n }).then(r => r.json())\r\n .then(json => this.OnResponse(json))\r\n }\r\n\r\n OnResponse (Response) {\r\n if (Response.Status === STATUS_ERROR) {\r\n console.error('PUBLICIDAD: ERROR ' + Response.Message)\r\n return\r\n }\r\n switch (Response.Action) {\r\n case 1:\r\n // console.log(\"PUBLICIDAD: agregado correctamente el evento \" + (Response.Data.event == CLICK ? \"click\" : \"print\") + \" AD-\" + Response.Data.ad);\r\n break\r\n }\r\n }\r\n\r\n show = function () {\r\n\r\n }\r\n}\r\n","import { Advertising } from './advertisingBase'\r\nimport { AdParam } from './contanst'\r\n\r\nexport class AdBasic extends Advertising {\r\n create () {\r\n this.init()\r\n if (!AdParam.isDiagram) {\r\n this.createEvent()\r\n }\r\n }\r\n\r\n createEvent () {\r\n const container = document.querySelector(`[data-element=\"${this.data.id}\"]`)\r\n const items = container.querySelectorAll('.item')\r\n if (items.length > 1) {\r\n this.createCarousel()\r\n }\r\n this.addClick(items)\r\n this.addPrint(items)\r\n }\r\n}\r\n","import { Advertising } from './advertisingBase'\r\nimport { AdParam } from './contanst'\r\n\r\nexport class AdFixed extends Advertising {\r\n create () {\r\n this.init()\r\n if (!AdParam.isDiagram) {\r\n this.createEvent()\r\n const fixed = this.container.querySelector('.Ad-fixed')\r\n fixed.querySelector('span').addEventListener('click', function (e) {\r\n e.preventDefault()\r\n fixed.close = true\r\n fixed.classList.remove('show')\r\n })\r\n window.addEventListener('scroll', function () {\r\n if (window.scrollY > 150 && !fixed.close) {\r\n fixed.classList.add('show')\r\n } else {\r\n fixed.classList.remove('show')\r\n }\r\n })\r\n }\r\n }\r\n\r\n setPosition (pos) {\r\n const container = document.getElementById('fixed-' + this.data.id)\r\n container.classList.add(pos)\r\n }\r\n\r\n createEvent () {\r\n const container = document.getElementById('fixed-' + this.data.id)\r\n const items = container.querySelectorAll('.item')\r\n if (items.length > 1) {\r\n this.createCarousel()\r\n }\r\n this.addClick(items)\r\n this.addPrint(items)\r\n }\r\n}\r\n","import { Advertising } from './advertisingBase'\r\nimport { AdParam } from './contanst'\r\n\r\nexport class AdPopUp extends Advertising {\r\n create () {\r\n // verifico si ya paso mas de X veces por esta seccion y muestro de nuevo el popUp\r\n const dateLast = window.sessionStorage.getItem('popup-' + this.data.id)\r\n if (!dateLast || (dateLast && Math.floor((new Date() - new Date(dateLast)) / 1000) > AdParam.intervalPopUp) || AdParam.development) {\r\n window.sessionStorage.setItem('popup-' + this.data.id, new Date())\r\n } else {\r\n return\r\n }\r\n if (this.data.notData) {\r\n return\r\n }\r\n this.init()\r\n this.container.querySelector('.pr-close').addEventListener('click', this.close)\r\n if (!AdParam.isDiagram) {\r\n this.createEvent()\r\n this.show()\r\n }\r\n }\r\n\r\n createEvent () {\r\n const container = document.getElementById('p-' + this.data.id)\r\n const items = container.querySelectorAll('.item')\r\n if (items.length > 1) {\r\n this.createCarousel()\r\n }\r\n this.addClick(items)\r\n this.addPrint(items)\r\n }\r\n\r\n close () {\r\n const container = document.getElementById('p-' + this.data.id)\r\n document.querySelector('body').classList.remove('modal-open')\r\n container.classList.add('hide')\r\n container.remove()\r\n }\r\n\r\n show () {\r\n const container = document.getElementById('p-' + this.data.id)\r\n if (container.querySelector('.pr-content article').innerHTML == '') {\r\n this.close()\r\n } else {\r\n document.querySelector('body').classList.add('modal-open')\r\n container.classList.remove('hide')\r\n }\r\n }\r\n}\r\n","import { AdBasic } from './AdBasic'\r\nimport { AdFixed } from './AdFixed'\r\nimport { AdPopUp } from './adPopUp'\r\n\r\nimport { STATUS_ERROR, URL_BASE, _DESKTOP_, _MOVIL_, movilMaxWidth, AdParam, AD_TYPE } from './contanst'\r\n\r\nclass FactoryBase {\r\n constructor (lazy = true) {\r\n this.lazy = lazy\r\n\r\n this.setScreen()\r\n this.ads = null\r\n }\r\n\r\n setScreen () {\r\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || window.innerWidth < movilMaxWidth) {\r\n this.screen = _MOVIL_\r\n } else {\r\n this.screen = _DESKTOP_\r\n }\r\n }\r\n\r\n get () {\r\n this.data.client = AdParam.client\r\n this.data.development = AdParam.development\r\n fetch(`${URL_BASE}${this.getMethod}`, {\r\n method: 'POST',\r\n body: JSON.stringify(this.data)\r\n }).then(r => r.json())\r\n .then(json => this.Response(json))\r\n }\r\n\r\n InitAds (data) {\r\n try {\r\n this.ads = this.Create(data)\r\n if (this.ads == null) {\r\n if (data.type != AD_TYPE.Multiple) {\r\n console.error('No se pudo crear el tipo de publiciad(' + Response.data.type + ')')\r\n console.error(Response.data.type + 'tipo no existente')\r\n }\r\n return\r\n }\r\n /* seteo el tipo de dispositivo en el cual estoy para su posterior uso */\r\n this.ads.setMedia(this.screen)\r\n\r\n /* creao la publicidad y lo pongo en pantalla */\r\n this.ads.create()\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n\r\n /**\r\n * devuelvo un objeto de publicidad dependiendo del tipo\r\n * @param data\r\n * @returns {CAdBasic|CAdPopUp|CAdFixed}\r\n */\r\n Create (data) {\r\n let ad = null\r\n switch (parseInt(data.type)) {\r\n case AD_TYPE.Basic:\r\n ad = new AdBasic(data)\r\n break\r\n case AD_TYPE.PopUp:\r\n ad = new AdPopUp(data)\r\n break\r\n case AD_TYPE.Fixed:\r\n ad = new AdFixed(data)\r\n break\r\n case AD_TYPE.Multiple:\r\n data.containers.forEach(data => Object.keys(data.ads).length ? this.InitAds(data) : new FactoryAds(data.id, this.containerAds))\r\n break\r\n }\r\n return ad\r\n }\r\n}\r\n\r\n/*\r\n * class para la busqueda de la publicidad y construir segun su tipo\r\n * @param int identificador elemnto del html al que pertenece\r\n * @param int ContainerAd identificador del contenedor a publicidad a usar\r\n * @returns {CFactoryAds}\r\n */\r\nexport class FactoryAds extends FactoryBase {\r\n constructor (id, ContainerAds, quantity = 1, lazy = true) {\r\n super(lazy)\r\n this.screen = _DESKTOP_\r\n this.id = id\r\n this.containerAds = ContainerAds\r\n this.quantity = quantity\r\n this.data = {\r\n id: this.id,\r\n containerAds: this.containerAds,\r\n quantity: this.quantity,\r\n screen: this.screen,\r\n section: AdParam.section,\r\n lazy: this.lazy\r\n }\r\n this.getMethod = 'getAdContainer'\r\n }\r\n\r\n Response (Response) {\r\n if (Response.status == STATUS_ERROR) {\r\n console.error(Response.Message)\r\n return\r\n }\r\n this.InitAds(Response.data.ad)\r\n }\r\n}\r\n\r\n/*\r\n * class para la busqueda de la publicidad y construir segun su tipo\r\n * @param int identificador elemnto del html al que pertenece\r\n * @param int ContainerAd identificador del contenedor a publicidad a usar\r\n * @returns {CFactoryAds}\r\n */\r\nexport class FactoryAdsContainers extends FactoryBase {\r\n constructor (containers, lazy = true) {\r\n super(lazy)\r\n this.containers = containers\r\n this.data = {\r\n containers: Object.entries(this.containers).map(([key, container]) => (\r\n {\r\n id: container.length == 1 ? container[0] : container,\r\n containerAds: key,\r\n quantity: container.length,\r\n screen: this.screen,\r\n section: AdParam.section,\r\n lazy: this.lazy\r\n }\r\n ))\r\n }\r\n this.getMethod = 'getAdVariousContainer'\r\n }\r\n\r\n Response (Response) {\r\n if (Response.status == STATUS_ERROR) {\r\n console.error(Response.Message)\r\n return\r\n }\r\n\r\n for (const i in Response.data.containers) {\r\n this.InitAds(Response.data.containers[i])\r\n }\r\n }\r\n}\r\n","import { FactoryAds, FactoryAdsContainers } from './advertising/AdFactory'\r\nimport { AdParam } from './advertising/contanst'\r\n\r\ntry {\r\n if (!AdParam.section) {\r\n throw Error('no se encontro el data-attribute Section')\r\n }\r\n /* if (!AdParam.client) {\r\n throw Error('no se encontro el data-attribute client')\r\n } */\r\n const containers = document.querySelectorAll(\"[data-type='adContainer']\")\r\n const quantityContainerForType = {}\r\n containers.forEach((container) => {\r\n if (!quantityContainerForType[container.getAttribute('data-adContainer')]) {\r\n quantityContainerForType[container.getAttribute('data-adContainer')] = []\r\n }\r\n quantityContainerForType[container.getAttribute('data-adContainer')].push(container.getAttribute('data-element'))\r\n })\r\n\r\n // Reemplaza 'mi_parametro' con el nombre del parĂ¡metro que deseas obtener\r\n if (AdParam.singleAd) {\r\n for (const i in quantityContainerForType) {\r\n const adFactory = new FactoryAds(quantityContainerForType[i].length == 1 ? quantityContainerForType[i][0] : quantityContainerForType[i], i, quantityContainerForType[i].length)\r\n adFactory.get()\r\n }\r\n } else {\r\n const adFactory = new FactoryAdsContainers(quantityContainerForType)\r\n adFactory.get()\r\n }\r\n} catch (ex) {\r\n console.error(ex)\r\n}\r\n"],"names":["getParam","_DESKTOP_","_MOVIL_","movilMaxWidth","ACTION","AD_TYPE","STATUS_ERROR","URL_BASE","AdParam","Advertising","data","__publicField","script","s","iframe","doc","style","elements","_this","clickAd","code","media","element","css","i","list","container","topAD","printDispatched","posScreen","ad","div","carousel","carouselControl","videos","event","eventContainer","r","json","Response","AdBasic","items","AdFixed","fixed","pos","AdPopUp","dateLast","FactoryBase","lazy","FactoryAds","id","ContainerAds","quantity","FactoryAdsContainers","containers","key","quantityContainerForType","ex"],"mappings":"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"}