{"version":3,"sources":["webpack:///./src/client/default/js/components/productTileComponent.js","webpack:///./src/client/default/js/base/baseComponent.js","webpack:///./src/client/default/js/utilities/URLDecoder.js","webpack:///./src/client/default/js/utilities/dataLayerUtils.js"],"names":["ProductTileComponent","element","handleClick","handlePromoCatClick","handleChangePromoPushTitleInAvancassa","pricebookPromoLabel","this","$el","querySelector","isAvancassa","$options","avancassa","promoLabelAvancassa","closest","classList","add","appendChild","contains","value","str","toString","endsWith","slice","indexOf","replaceAll","addEventListener","e","iscategory","isVolantiniTile","window","location","hash","currentUrl","href","prevPosition","split","newHash","replace","getPosition","newUrl","history","replaceState","dataLayer","productToPush","currencycode","dataset","currencyCode","productTile","JSON","parse","productJson","list","getPathName","document","pathname","vdglist","sendProductClickEventToDataLayer","EMIT","CUSTOM_MESSAGES","TRACKING_EVENTS","update","eventCategory","eventAction","eventLabel","activeElement","className","match","target","triggerSelectItemEvent","position","offsetTop","offsetParent","compensate","val","modifier","body","url","lastSegment","filter","Boolean","pop","join","promocat","$on","currentTarget","optionGaeventcategory","optionGaeventaction","optionGaeventlabel","cardSize","qtyincart","editorialProductCard","product","id","productName","name","promotionInfo","productPromotionInfo","price","productPrice","brand","itemType","dimension53","parentWrapper","tileIndex","Array","from","querySelectorAll","findIndex","sendSelectItemEventToDataLayer","productBreadcrumbs","sendSelectPromotionEventToDataLayer","BaseComponent","_componentElement","setAttribute","_checkMessages","compOptions","options","Object","keys","entry","includes","forEach","optionValue","cleanEntry","cleanOptionKey","convertType","deepFreeze","getAttribute","events","cb","elements","Bean","on","stopPropagation","one","off","fire","container","message","_loading","LOADER_EVENTS","show","error","icon","setTimeout","hide","option","optionReturn","key","charAt","toLocaleLowerCase","BaseGiaComponent","pathName","dontUseCustomPathName","urlPathNameTable","urlPathNameOrSandbox","length","parsePathName","getCustomPathName","console","log","sendAddOrRemoveProductToDataLayer","eventName","productImpressions","breadcrumbs","dataLayerObj","event","ecommerce","items","item_id","item_name","item_brand","promotion_name","quantity","item_type","appendItemCategories","appendPriceAndDiscount","appendListIdAndName","appendCardSize","push","event_category","event_action","event_label","product_name","click","actionField","products","index","item_list_id","promotion_id","creative_name","location_id","sales","sendAddShippingInfoToDataLayer","shippingMethod","shipping_tier","getSelectedShippingMethodID","map","sendNavEventToDataLayer","link","isInternal","isPayback","area","type","action","depth","text","sendErrorEventToDataLayer","errorLocation","error_name","error_location","event_detail","sendFormInvalidEventToDataLayer","formValidityObj","formId","eventDetail","detail","errors","inputField","method","item_category","htmlValue","item_category2","item_category3","item_category4","discount","toFixed","itemListName","item_list_name","size"],"mappings":"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","file":"js/component-productTileComponent-js.chunks.js","sourcesContent":["import BaseComponent from '../base/baseComponent';\nimport { sendSelectItemEventToDataLayer, sendProductClickEventToDataLayer, sendSelectPromotionEventToDataLayer } from '../utilities/dataLayerUtils';\n\nimport { match } from '../utilities/resolutionHandler';\nimport { getPathName } from '../utilities/URLDecoder';\n\nexport default class ProductTileComponent extends BaseComponent {\n  constructor(element) {\n    super(element);\n    this.handleClick();\n    this.handlePromoCatClick();\n    this.handleChangePromoPushTitleInAvancassa();\n  }\n\n  //Changing promo label in avancassa with offer promo label (i.e: offerta, payback, etc ..)\n  handleChangePromoPushTitleInAvancassa() {\n    let pricebookPromoLabel = this.$el.querySelector('span[data-option-pricebook-description]');\n    let isAvancassa = this.$options.avancassa && this.$options.avancassa === true;\n    if (pricebookPromoLabel && isAvancassa) {\n      let promoLabelAvancassa = this.$el.closest('.promo-push-cart')?.querySelector('.promo-label');\n      if (promoLabelAvancassa) {\n        promoLabelAvancassa.querySelector('span')?.classList.add('d-none');\n        promoLabelAvancassa.appendChild(pricebookPromoLabel);\n      }\n    }\n  }\n\n  isVolantiniTile() {\n    return this.$el.classList.contains('flyer-tile');\n  }\n\n  parsePathName(value) {\n    let str = value.toString();\n\n    if (str.endsWith(',')) {\n      str = str.slice('', -1);\n    }\n    if (str.endsWith('.html')) {\n      str = str.slice('', -5);\n    }\n    if (str.indexOf(',') == 0) {\n      str = str.slice(1);\n    }\n\n    return str.replaceAll(',', '/');\n  }\n\n  handleClick() {\n    this.$el.addEventListener('click', (e) => {\n      if ((this.$options.iscategory || this.isVolantiniTile()) && window.location.hash.indexOf('position') > -1) {\n        let hash = window.location.hash;\n        let currentUrl = window.location.href;\n        let prevPosition = hash.split('position=')[1];\n        let newHash = hash.replace(prevPosition, this.getPosition(this.$el));\n\n        let newUrl = currentUrl.replace(hash, newHash);\n        window.history.replaceState('', '', newUrl);\n      }\n      if (!window.dataLayer) return;\n      const currencycode = this.$el.querySelector('.add-to-cart')?.dataset.currencyCode;\n      let productToPush;\n      const productTile = this.$el.closest('.product.tile');\n      if (productTile) {\n        productToPush = JSON.parse(productTile.dataset.productJson);\n      }\n      if (productToPush) {\n        let list = getPathName(document.location.pathname, this.$options.vdglist);\n        if (this.$el.closest('.zero-search-results')) {\n          list = 'searchresult_0';\n        }\n        if (this.$el.closest('.editorial-product-card')?.classList.contains('half-width')) list = list + '_card_single';\n        else if (this.$el.closest('.editorial-product-card')?.classList.contains('full-width')) list = list + '_card_double';\n\n        sendProductClickEventToDataLayer(productToPush, currencycode, list);\n      }\n      if (this.isVolantiniTile()) {\n        this.EMIT(this.CUSTOM_MESSAGES.TRACKING_EVENTS.update, {\n          eventCategory: 'Volantini',\n          eventAction: 'Products',\n          eventLabel: 'Open'\n        });\n      } else {\n        let isTooltip = document.activeElement.className.match('tooltip') || e.target.className.match('tooltip') || e.target.className.match('discount');\n        if (!isTooltip) {\n          this.triggerSelectItemEvent();\n        }\n      }\n    });\n  }\n\n  getPosition(element) {\n    var position = 0;\n\n    while (element) {\n      position += element.offsetTop;\n      element = element.offsetParent;\n    }\n\n    return this.compensate(position);\n  }\n\n  compensate(val) {\n    let infostrip = document.querySelector('.information-strip.is-visible');\n    let modifier = 0;\n    if (infostrip) {\n      modifier = modifier + 50;\n    }\n    if (match(null, 'md')) {\n      return val - 170 - modifier;\n    } else if (document.body.classList.contains('push-app-in')) {\n      return val - 180 - modifier;\n    } else {\n      return val - 130 - modifier;\n    }\n  }\n\n  getLastSegment(url) {\n    if (url) {\n      let lastSegment = url\n        .split('/')\n        .filter(Boolean)\n        .pop();\n      return (\n        lastSegment\n          .split('.')\n          .slice(0, -1)\n          .join('.') || lastSegment\n      );\n    } else {\n      return '';\n    }\n  }\n\n  handlePromoCatClick() {\n    let promocat = this.$el.querySelector('.promocat');\n    if (promocat) {\n      this.$on(\n        'click.link',\n        (e) => {\n          if (e.currentTarget.dataset.optionGaeventcategory && e.currentTarget.dataset.optionGaeventaction) {\n            this.EMIT(this.CUSTOM_MESSAGES.TRACKING_EVENTS.update, {\n              eventCategory: e.currentTarget.dataset.optionGaeventcategory,\n              eventAction: e.currentTarget.dataset.optionGaeventaction,\n              eventLabel: e.currentTarget.dataset.optionGaeventlabel\n            });\n          }\n        },\n        promocat\n      );\n    }\n  }\n\n  triggerSelectItemEvent() {\n    let qtyincart = 0;\n    let cardSize;\n    if (this.$el.querySelector('.add-to-cart.show-quantity')) {\n      qtyincart = this.$el.querySelector('.js-itemquantity').value;\n    }\n    const editorialProductCard = this.$el.closest('.editorial-product-card');\n    if (editorialProductCard && editorialProductCard.classList.contains('half-width')) {\n      cardSize = '_card_single';\n    } else if (editorialProductCard && editorialProductCard.classList.contains('full-width')) {\n      cardSize = '_card_double';\n    }\n    let product = {\n      id: JSON.parse(this.$el.closest('.product.tile').dataset.productJson).id,\n      productName: JSON.parse(this.$el.closest('.product.tile').dataset.productJson).name,\n      promotionInfo: this.$options.productPromotionInfo,\n      price: this.$options.productPrice,\n      qtyincart: qtyincart,\n      brand: JSON.parse(this.$el.closest('.product.tile').dataset.productJson).brand,\n      itemType: JSON.parse(this.$el.closest('.product.tile').dataset.productJson).dimension53,\n      cardSize: cardSize\n    };\n    //Element glide__slides for vivi di gusto, multisearch and spesa online. Element product-grid for specific category.\n    let parentWrapper = this.$el.closest('.product-grid')\n      ? this.$el.closest('.product-grid')\n      : this.$el.closest('.glide__slides')\n      ? this.$el.closest('.glide__slides')\n      : this.$el.closest('.editorial-product-card')\n      ? this.$el.closest('.editorial-product-card')\n      : this.$el.closest('.js-tile-container');\n    if (parentWrapper) {\n      let tileIndex = Array.from(parentWrapper.querySelectorAll('.product.tile')).findIndex((productTile) => {\n        return productTile.dataset && productTile.dataset.productJson && JSON.parse(productTile.dataset.productJson).id === product.id;\n      });\n      sendSelectItemEventToDataLayer(product, this.$options.productBreadcrumbs, tileIndex);\n    }\n    sendSelectPromotionEventToDataLayer(product);\n  }\n}\n","/* eslint-disable new-cap */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable no-underscore-dangle */\n\nimport Bean from 'bean';\nimport deepFreeze from '../utilities/freeze';\nimport BaseGiaComponent from './baseGiaComponent';\n\nexport default class BaseComponent extends BaseGiaComponent {\n  /**\n   * @returns {HTMLElement}\n   */\n  get $el() {\n    return /** @type {HTMLElement} */ (this._componentElement);\n  }\n\n  get $options() {\n    const compOptions = {};\n    const options = { ...this.$el.dataset };\n    const optionsEntires = Object.keys(options).filter((entry) => entry.includes('option'));\n    optionsEntires.forEach((entry) => {\n      const cleanEntry = BaseComponent.cleanOptionKey(entry);\n      let optionValue;\n      if (options[entry].includes('{') && options[entry].includes('}')) {\n        optionValue = JSON.parse(options[entry].replace(/'/g, '\"'));\n      } else {\n        optionValue = BaseComponent.convertType(options[entry]);\n      }\n      compOptions[cleanEntry] = optionValue;\n    });\n    return deepFreeze(compOptions);\n  }\n\n  get COMPONENT_NAME() {\n    return this.$el.getAttribute('data-component');\n  }\n\n  /**\n   *\n   * constructor\n   *\n   * @param {Element} element\n   */\n  constructor(element) {\n    super(element);\n    this._componentElement = element;\n    this._componentElement.setAttribute('data-component-init', 'true');\n    this._checkMessages();\n  }\n\n  static convertType(option) {\n    let optionReturn;\n    switch (option) {\n      case 'false':\n        optionReturn = false;\n        break;\n      case 'true':\n        optionReturn = true;\n        break;\n      case 'null':\n        optionReturn = null;\n        break;\n      default:\n        optionReturn = option;\n        break;\n    }\n\n    return optionReturn;\n  }\n\n  static cleanOptionKey(key) {\n    const str = key.replace('option', '');\n    return `${str.charAt(0).toLocaleLowerCase()}${str.slice(1)}`;\n  }\n\n  /**\n   *\n   * $on\n   *\n   * @param {String} events\n   * @param {Function} cb\n   * @param {Element} [element = this.$el]\n   * @param {Array|String|Element} [elements = null]\n   */\n  $on(events, cb, element = this.$el, elements = null) {\n    if (!element || !events || !cb) return;\n    if (!elements) {\n      Bean.on(element, events, (e) => {\n        if (e) e.stopPropagation();\n        cb(e);\n      });\n    } else {\n      Bean.on(element, events, elements, (e) => {\n        if (e) e.stopPropagation();\n        cb(e);\n      });\n    }\n  }\n\n  /**\n   *\n   * $one\n   *\n   * @param {String} events\n   * @param {Function} cb\n   * @param {Element} [element = this.$el]\n   */\n  $one(events, cb, element = this.$el) {\n    Bean.one(element, events, cb);\n  }\n\n  /**\n   *\n   * $off\n   *\n   * @param {String} events\n   * @param {Element} [element = this.$el]\n   */\n  $off(events, element = this.$el) {\n    Bean.off(element, events);\n  }\n\n  /**\n   *\n   * $fire\n   *\n   * @param {String} events\n   * @param {Element} [element = this.$el]\n   */\n  $fire(events, element = this.$el) {\n    Bean.fire(element, events);\n  }\n\n  /**\n   *\n   * Activate loader\n   *\n   * @param {HTMLElement} [container]\n   * @param {String} [message]\n   */\n  loading(container, message) {\n    this._loading = true;\n    this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.show, {\n      container: container || document.body,\n      message: message ?? null\n    });\n  }\n\n  /**\n   *\n   * Deactivate loader\n   *\n   * @param {HTMLElement} [container]\n   * @param {String} [message]\n   * @param {Boolean} [error=false]\n   * @param {String} [icon]\n   */\n  endLoading(container, message, error = false, icon) {\n    this._loading = false;\n    setTimeout(() => {\n      if (!this._loading) {\n        this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.hide, {\n          container: container || document.body,\n          message,\n          error,\n          icon\n        });\n      }\n    }, 400);\n  }\n}\n","/**\n * @property {string} pathName\n * @property {boolean} dontUseCustomPathName\n *\n * @returns {string}\n */\nexport function getPathName(pathName, dontUseCustomPathName) {\n  let list = dontUseCustomPathName === 'true' ? dontUseCustomPathName : getCustomPathName(pathName);\n  console.log('URLDecoder list: ' + list);\n  return list;\n}\n\nfunction getCustomPathName(pathName) {\n  let urlPathNameTable = pathName.split('/');\n  let urlPathNameOrSandbox = urlPathNameTable[1] === 's' ? 'isSandbox' : urlPathNameTable;\n  return urlPathNameTable[1].length === 0\n    ? 'homepage'\n    : urlPathNameTable[1] === 'p' || urlPathNameTable[1] === 'dettaglio-prodotto'\n    ? 'product-page'\n    : parsePathName(urlPathNameOrSandbox);\n}\n\nfunction parsePathName(value) {\n  let str = value.toString();\n\n  if (str.endsWith(',')) {\n    str = str.slice('', -1);\n  }\n  if (str.endsWith('.html')) {\n    str = str.slice('', -5);\n  }\n  if (str.indexOf(',') == 0) {\n    str = str.slice(1);\n  }\n\n  return str.replaceAll(',', '/');\n}\n","import { getPathName } from '../utilities/URLDecoder';\n\nexport var sendAddOrRemoveProductToDataLayer = function(eventName, productImpressions, price, breadcrumbs, promotionInfo) {\n  if (!eventName || !productImpressions) {\n    return;\n  }\n  if (window.dataLayer) {\n    let dataLayerObj = {\n      event: eventName,\n      ecommerce: {\n        items: [\n          {\n            item_id: productImpressions.id,\n            item_name: productImpressions.name,\n            item_brand: productImpressions.brand,\n            promotion_name: promotionInfo && promotionInfo.name ? promotionInfo.name : '',\n            quantity: productImpressions.quantity || 1,\n            item_type: productImpressions.dimension53\n          }\n        ]\n      }\n    };\n    if (breadcrumbs) {\n      appendItemCategories(breadcrumbs, dataLayerObj.ecommerce.items[0]);\n    }\n    if (price) {\n      appendPriceAndDiscount(price, dataLayerObj.ecommerce.items[0]);\n    }\n    appendListIdAndName(dataLayerObj.ecommerce.items[0]);\n    if (productImpressions.cardSize) {\n      appendCardSize(productImpressions.cardSize, dataLayerObj.ecommerce.items[0]);\n    }\n    window.dataLayer.push(dataLayerObj);\n  }\n};\n\nexport var sendProductClickEventToDataLayer = function(productToPush, currencycode, list) {\n  if (!window.dataLayer) return;\n  window.dataLayer.push({\n    event: 'product click',\n    event_category: 'ecommerce',\n    event_action: 'Product Click',\n    event_label: productToPush.product_name,\n    ecommerce: {\n      currencyCode: currencycode,\n      click: {\n        actionField: {\n          list: list\n        },\n        products: [productToPush]\n      }\n    }\n  });\n};\n\nexport var sendSelectItemEventToDataLayer = function(product, breadcrumbs, tileIndex) {\n  if (!window.dataLayer) return;\n  let dataLayerObj = {\n    event: 'select_item',\n    ecommerce: {\n      items: [\n        {\n          item_id: product.id,\n          item_name: product.productName,\n          promotion_name: product.promotionInfo && product.promotionInfo.name ? product.promotionInfo.name : '',\n          item_brand: product.brand,\n          quantity: product.qtyincart,\n          index: tileIndex,\n          item_type: product.itemType\n        }\n      ]\n    }\n  };\n  if (product.cardSize) {\n    dataLayerObj.ecommerce.items[0].item_list_id = product.cardSize;\n  }\n  if (breadcrumbs) {\n    appendItemCategories(breadcrumbs, dataLayerObj.ecommerce.items[0]);\n  }\n  if (product.price) {\n    appendPriceAndDiscount(product.price, dataLayerObj.ecommerce.items[0]);\n  }\n  appendListIdAndName(dataLayerObj.ecommerce.items[0]);\n  window.dataLayer.push(dataLayerObj);\n};\n\nexport var sendSelectPromotionEventToDataLayer = function(product) {\n  if (!window.dataLayer) return;\n  if ((product.promotionInfo && product.promotionInfo.name) || (product.price && product.price.list && product.price.list)) {\n    let dataLayerObj = {\n      event: 'select_promotion',\n      ecommerce: {\n        items: [\n          {\n            item_id: product.id,\n            item_name: product.productName,\n            promotion_name: product.promotionInfo && product.promotionInfo.name ? product.promotionInfo.name : '',\n            promotion_id: product.promotionInfo && product.promotionInfo.id ? product.promotionInfo.id : product.promotionInfo.name ? product.promotionInfo.name : '',\n            creative_name: 'product card',\n            location_id: 'product listing',\n            price: product.price.sales.value,\n            item_type: product.itemType\n          }\n        ]\n      }\n    };\n    window.dataLayer.push(dataLayerObj);\n  }\n};\n\nexport var getItemListName = function(breadcrumbs) {\n  var itemListName = '';\n  for (let i = 0; i < breadcrumbs.length; i++) {\n    itemListName = itemListName + breadcrumbs[i].categoryId;\n    if (i + 1 !== breadcrumbs.length) {\n      itemListName = itemListName + '/';\n    }\n  }\n  return itemListName;\n};\n\nexport var sendAddShippingInfoToDataLayer = function(products, shippingMethod) {\n  if (window.dataLayer) {\n    window.dataLayer.push({\n      event: 'add_shipping_info',\n      ecommerce: {\n        shipping_tier: getSelectedShippingMethodID(shippingMethod),\n        items: products.map((product) => {\n          var breadcrumbs = product.breadcrumbs;\n          let dataLayerObj = {\n            item_id: product.id,\n            item_name: product.productName,\n            item_brand: product.brand,\n            quantity: product.qtyincart,\n            item_type: product.itemType\n          };\n          appendItemCategories(breadcrumbs, dataLayerObj);\n          appendPriceAndDiscount(product.price, dataLayerObj);\n          return dataLayerObj;\n        })\n      }\n    });\n  }\n};\n\nexport var sendNavEventToDataLayer = function(link) {\n  if (!window.dataLayer) return;\n  let isInternal = !link.url || link.url.includes('/s/carrefour-IT/') || link.url.includes('carrefour.it/');\n  window.dataLayer.push({\n    event: link.isPayback ? 'button_click' : 'nav_click',\n    area: link.area,\n    type: link.type,\n    action: isInternal ? 'redirect_internal' : 'outbound',\n    depth: 'level_0',\n    text: link.text\n  });\n};\nexport var sendErrorEventToDataLayer = function(errorLocation, error) {\n  if (window.dataLayer) {\n    window.dataLayer.push({\n      event: 'error',\n      error_name: error,\n      error_location: errorLocation,\n      event_detail: error\n    });\n  }\n};\n\nexport var sendFormInvalidEventToDataLayer = function(formValidityObj, formId) {\n  if (window.dataLayer) {\n    let eventDetail = [];\n    if (formValidityObj && formValidityObj.detail && formValidityObj.detail.errors) {\n      eventDetail = formValidityObj.detail.errors.map((inputField) => {\n        return inputField.id;\n      });\n    }\n    window.dataLayer.push({\n      event: 'error',\n      error_name: 'form_filed_error',\n      error_location: formId ? formId : formValidityObj && formValidityObj.target && formValidityObj.target.id ? formValidityObj.target.id : 'form',\n      event_detail: eventDetail.join('|')\n    });\n  }\n};\n\nvar getSelectedShippingMethodID = function(method) {\n  switch (method) {\n    case 'pickup_in_store':\n      return 'click_and_collect';\n    case 'drive':\n      return 'click_and_collect_drive';\n    case 'deliveryExpress':\n      return 'home_delivery_same_day';\n    case 'delivery':\n      return 'home_delivery_next_day';\n    case 'deliverySatellite':\n      return 'home_delivery_next_day';\n\n    default:\n      return null;\n  }\n};\n\nlet appendItemCategories = function(breadcrumbs, dataLayerObj) {\n  dataLayerObj.item_category = breadcrumbs && breadcrumbs.length > 1 ? breadcrumbs[1].htmlValue.replace(/`/g, \"'\") : '';\n  dataLayerObj.item_category2 = breadcrumbs && breadcrumbs.length > 2 ? breadcrumbs[2].htmlValue.replace(/`/g, \"'\") : '';\n  dataLayerObj.item_category3 = breadcrumbs && breadcrumbs.length > 3 ? breadcrumbs[3].htmlValue.replace(/`/g, \"'\") : '';\n  dataLayerObj.item_category4 = breadcrumbs && breadcrumbs.length > 4 ? breadcrumbs[4].htmlValue.replace(/`/g, \"'\") : '';\n};\n\nlet appendPriceAndDiscount = function(price, dataLayerObj) {\n  dataLayerObj.discount = price.list && price.list.value ? (price.list.value - price.sales.value).toFixed(2) : '';\n  dataLayerObj.price = price.sales.value;\n};\n\nlet appendListIdAndName = function(dataLayerObj) {\n  var itemListName;\n  if (document.location.pathname.indexOf('wishlist') > 0) {\n    itemListName = 'le_mie_liste';\n  } else if (dataLayerObj.item_list_id) {\n    itemListName = getPathName(document.location.pathname, false) + dataLayerObj.item_list_id;\n  } else {\n    itemListName = getPathName(document.location.pathname, false);\n  }\n  if (document.querySelector('.minicart-sidebar-wrapper.toggleActive')) {\n    dataLayerObj.item_list_id = 'mini-cart';\n    dataLayerObj.item_list_name = 'mini-cart';\n  } else if (document.querySelector('.zero-search-results')) {\n    dataLayerObj.item_list_id = 'searchresult_0';\n    dataLayerObj.item_list_name = 'searchresult_0';\n  } else {\n    dataLayerObj.item_list_id = itemListName;\n    dataLayerObj.item_list_name = itemListName;\n  }\n};\n\nexport var appendCardSize = function(size, dataLayerObj) {\n  var itemListName;\n  let pathName = getPathName(document.location.pathname, false);\n  if (size === 'Half Width') {\n    itemListName = pathName + '_card_single';\n  } else {\n    itemListName = pathName + '_card_double';\n  }\n  if (dataLayerObj) {\n    dataLayerObj.item_list_id = itemListName;\n    dataLayerObj.item_list_name = itemListName;\n  } else {\n    return itemListName;\n  }\n};\n"],"sourceRoot":""}