{"version":3,"sources":["webpack:///./src/js/components/Component.js","webpack:///./src/js/components/PhoneSwap.js","webpack:///./node_modules/js-cookie/dist/js.cookie.js"],"names":["domTree","WeakMap","configuration","Component","el","config","arguments","length","undefined","_classCallCheck","this","Error","$el","jQuery","$","set","hasOwnProperty","dom","setupDefaults","addListeners","get","elements","__webpack_require__","PhoneSwap","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","setPPCFranchiseId","setLocalizedFranchiseId","idInQueryString","localizedFID","ppcFID","setPPCFranchiseIdCookie","parsePhoneNumbers","swap","$phoneElements","phoneNumbers","idCookieName","metadataCookieName","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","Symbol","iterator","next","done","origNum","value","getAttribute","includes","replace","addPhoneNumberToList","strippedNum","err","return","num","push","data","fid","URL","window","location","searchParams","isValidFranchiseId","getFranchiseIdFromCookie","Cookies","expires","cookieName","yoTrackInfo","_typeof","numbers","yotrackId","id","YoTrack","api","isSEMSession","swapPhones","line","console","log","getMetadata","metadata","factory","assign","target","i","source","key","init","converter","defaultAttributes","name","attributes","document","Date","now","toUTCString","encodeURIComponent","decodeURIComponent","escape","stringifiedAttributes","attributeName","split","cookie","write","create","cookies","jar","parts","slice","join","found","read","e","remove","withAttributes","withConverter","freeze","path","module","exports"],"mappings":"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","file":"23.cc9fdf4ba1343a749ea3.js","sourcesContent":["const domTree = new WeakMap();\r\nconst configuration = new WeakMap();\r\n\r\n/**\r\n * Component is a class that should be extended for every component that's being made. It\r\n * is a helper class to keep the code uniform.\r\n *\r\n * __PLEASE NOTE__: This is only to be extended, not instantiated.\r\n *\r\n * @example\r\n * import Component from 'component';\r\n *\r\n * class Foo extends Component {\r\n *   construction(el){\r\n *     super(el);\r\n *   }\r\n *\r\n *   setupDefaults(){\r\n *     // ...defaults go here\r\n *   }\r\n *\r\n *   addListeners(){\r\n *     // ...listeners go here\r\n *   }\r\n * }\r\n *\r\n * // Create a new Foo component\r\n * new Foo('.foo');\r\n */\r\nclass Component {\r\n  /**\r\n   * Component constructor - see {@link config} on how to pass in additional configuration to the constructor\r\n   *\r\n   * @param {string|Object} el - Main DOM element, you can pass a string such as `'.foo'` __or__ a jQuery object such as `$('.foo')`\r\n   * @param {Object} [config={ }] - Additional component configuration; reachable with `this.config`\r\n   */\r\n  constructor(el, config = {}){\r\n    if (typeof el === 'undefined') {\r\n      throw new Error('You must provide an element as a String type or a jQuery object type');\r\n    }\r\n\r\n    /**\r\n     * Main class element, this will be a jQuery instance\r\n     * This can be reachable at any time in your superclass with `this.$el`\r\n     *\r\n     * @type {Object}\r\n     */\r\n    this.$el = el instanceof jQuery ? el : $(el);\r\n\r\n    if (this.$el.length === 0) return;\r\n\r\n    domTree.set(this, {});\r\n    configuration.set(this, config);\r\n\r\n    if (this.config.hasOwnProperty('dom')) {\r\n      this.dom = this.config.dom;\r\n    }\r\n\r\n    this.setupDefaults();\r\n    this.addListeners();\r\n  }\r\n\r\n  /**\r\n   * This method is used for override;\r\n   * It's called directly after the element and configuration have been set up\r\n   * @abstract\r\n   */\r\n  setupDefaults(){}\r\n\r\n  /**\r\n   * This method is used for override;\r\n   * It's called directly after `setupDefaults()`, so everything is ready and setup at this point.\r\n   * @abstract\r\n   */\r\n  addListeners(){}\r\n\r\n  /**\r\n   * Get component configuration\r\n   *\r\n   * @example\r\n   * class Foo extends Component {\r\n   *   construction(el, config){\r\n   *     super(el, config);\r\n   *   }\r\n   *\r\n   *   setupDefaults(){\r\n   *     console.log(this.config.name); // Outputs \"Foo\"\r\n   *   }\r\n   * }\r\n   *\r\n   * // Create a new Foo component with some configuration\r\n   * new Foo('.foo', {\r\n   *   name: 'Foo'\r\n   * });\r\n   *\r\n   * @type {Object}\r\n   */\r\n  get config(){\r\n    return configuration.get(this);\r\n  }\r\n\r\n  /**\r\n   * Set DOM object\r\n   *\r\n   * @example\r\n   * class Foo extends Component {\r\n   *   construction(el){\r\n   *     super(el);\r\n   *   }\r\n   *\r\n   *   setupDefaults(){\r\n   *     this.dom = {\r\n   *       $container: this.$el.find('.container')\r\n   *     }\r\n   *   }\r\n   *\r\n   *   addListeners(){\r\n   *     //DOM object is available\r\n   *     console.log(this.dom.$container);\r\n   *   }\r\n   * }\r\n   *\r\n   * // Create a new Foo component\r\n   * new Foo('.foo');\r\n   *\r\n   * @type {Object}\r\n   */\r\n  set dom(elements){\r\n    elements = {\r\n      ...this.dom,\r\n      ...elements\r\n    };\r\n\r\n    domTree.set(this, elements);\r\n  }\r\n\r\n  /**\r\n   * Get DOM object\r\n   *\r\n   * @example\r\n   * this.dom\r\n   *\r\n   * @type {Object}\r\n   */\r\n  get dom(){\r\n    return domTree.get(this);\r\n  }\r\n}\r\n\r\nexport default Component;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/Component.js","import Component from 'component';\r\nimport Cookies from 'js-cookie';\r\n\r\nclass PhoneSwap extends Component {\r\n  constructor(el) {\r\n    super(el);\r\n\r\n    this.setPPCFranchiseId();\r\n    this.setLocalizedFranchiseId();\r\n\r\n    // If the PPC query params exists, then skip this and go right to the phone swap\r\n    if (!this.idInQueryString) {\r\n      if (typeof this.localizedFID !== 'undefined') {\r\n        this.ppcFID = this.localizedFID;\r\n        this.setPPCFranchiseIdCookie(this.ppcFID);\r\n      }\r\n    }\r\n\r\n    this.parsePhoneNumbers();\r\n    this.swap();\r\n  }\r\n\r\n  setupDefaults() {\r\n    this.$phoneElements = this.$el;\r\n    this.phoneNumbers = [];\r\n    this.ppcFID = null; //Franchise ID passed in from PPC campaign\r\n    this.localizedFID = null; //Franchise ID of the localized franchise\r\n    this.idCookieName = 'yotrack-fid';\r\n    this.metadataCookieName = 'YoTrackMetaDataWidget';\r\n    this.idInQueryString = false;\r\n  }\r\n\r\n  parsePhoneNumbers() {\r\n    for(const item of this.$phoneElements) {\r\n      let origNum = item.getAttribute('href');\r\n\r\n      if (origNum.includes('tel:')) {\r\n        origNum = origNum.replace('tel:', '');\r\n\r\n        if (origNum !== '') {\r\n          this.addPhoneNumberToList(origNum);\r\n\r\n          const strippedNum = origNum.replace(/\\D/g, '');\r\n          this.addPhoneNumberToList(strippedNum);\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addPhoneNumberToList(num) {\r\n    if (!this.phoneNumbers.includes(num)) {\r\n      this.phoneNumbers.push(num);\r\n    }\r\n  }\r\n\r\n  // Get FID of the current localized page\r\n  setLocalizedFranchiseId() {\r\n    this.localizedFID = $('[data-fid]').data('fid');\r\n  }\r\n\r\n  // Get FID associated with a particular PPC campaign\r\n  setPPCFranchiseId() {\r\n    const url = new URL(window.location);\r\n    let fid = url.searchParams.get('fid');\r\n\r\n    if (!this.isValidFranchiseId(fid)) {\r\n      fid = this.getFranchiseIdFromCookie(this.idCookieName);\r\n    } else {\r\n      this.idInQueryString = true;\r\n      this.setPPCFranchiseIdCookie(fid);\r\n    }\r\n\r\n    this.ppcFID = fid;\r\n  }\r\n\r\n  setPPCFranchiseIdCookie(fid) {\r\n    Cookies.set(this.idCookieName, fid, { expires: 14 });\r\n  }\r\n\r\n  getFranchiseIdFromCookie(cookieName) {\r\n    const fid = Cookies.get(cookieName);\r\n\r\n    if (this.isValidFranchiseId(fid)) {\r\n      return fid;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  isValidFranchiseId(fid) {\r\n    if (typeof fid === 'undefined' || fid === null || fid === 'undefined' || fid === '') {\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n\r\n  swap() {\r\n    if (!this.isValidFranchiseId(this.ppcFID) || this.phoneNumbers.length === 0) {\r\n      return;\r\n    }\r\n    //get info attached to body tag.  jquery will automatically parse JSON\r\n    const yoTrackInfo = $('[data-hfc-yotrack-info]').data('hfc-yotrack-info');\r\n    if (typeof (yoTrackInfo) === 'object') {\r\n\r\n      const numbers = this.phoneNumbers;\r\n      //yotrack id is embedded in html attribute\r\n      const yotrackId = yoTrackInfo.id;\r\n      const cookieName = this.metadataCookieName;\r\n\r\n      window.YoTrack(yotrackId,\r\n        (err, api) => {\r\n          api.isSEMSession((err, isSEMSession) => {\r\n            if (isSEMSession) {\r\n              if (err) {\r\n                window.YoTrack(yotrackId,\r\n                  (err, api) => {\r\n                    api.swapPhones(numbers,\r\n                      (err, line) => {\r\n                        console.log('Error: ', err)\r\n                        console.log('Phone Number: ', line)\r\n                      })\r\n                  })\r\n              } else {\r\n                api.swapPhones(numbers,\r\n                  (err, line) => {\r\n                    console.log('Error: ', err)\r\n                    console.log('Phone Number: ', line)\r\n                  })\r\n              }\r\n\r\n              api.getMetadata((err, metadata) => {\r\n                Cookies.set(cookieName, metadata, { expires: 1 });\r\n                console.log('Meta-data: ', metadata)\r\n              });\r\n            }\r\n          });\r\n        });\r\n    }\r\n  }\r\n}\r\n\r\n\r\nexport default PhoneSwap;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/PhoneSwap.js","/*! js-cookie v3.0.5 | MIT */\n;\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n    var current = global.Cookies;\n    var exports = global.Cookies = factory();\n    exports.noConflict = function () { global.Cookies = current; return exports; };\n  })());\n})(this, (function () { 'use strict';\n\n  /* eslint-disable no-var */\n  function assign (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        target[key] = source[key];\n      }\n    }\n    return target\n  }\n  /* eslint-enable no-var */\n\n  /* eslint-disable no-var */\n  var defaultConverter = {\n    read: function (value) {\n      if (value[0] === '\"') {\n        value = value.slice(1, -1);\n      }\n      return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n    },\n    write: function (value) {\n      return encodeURIComponent(value).replace(\n        /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n        decodeURIComponent\n      )\n    }\n  };\n  /* eslint-enable no-var */\n\n  /* eslint-disable no-var */\n\n  function init (converter, defaultAttributes) {\n    function set (name, value, attributes) {\n      if (typeof document === 'undefined') {\n        return\n      }\n\n      attributes = assign({}, defaultAttributes, attributes);\n\n      if (typeof attributes.expires === 'number') {\n        attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n      }\n      if (attributes.expires) {\n        attributes.expires = attributes.expires.toUTCString();\n      }\n\n      name = encodeURIComponent(name)\n        .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n        .replace(/[()]/g, escape);\n\n      var stringifiedAttributes = '';\n      for (var attributeName in attributes) {\n        if (!attributes[attributeName]) {\n          continue\n        }\n\n        stringifiedAttributes += '; ' + attributeName;\n\n        if (attributes[attributeName] === true) {\n          continue\n        }\n\n        // Considers RFC 6265 section 5.2:\n        // ...\n        // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n        //     character:\n        // Consume the characters of the unparsed-attributes up to,\n        // not including, the first %x3B (\";\") character.\n        // ...\n        stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n      }\n\n      return (document.cookie =\n        name + '=' + converter.write(value, name) + stringifiedAttributes)\n    }\n\n    function get (name) {\n      if (typeof document === 'undefined' || (arguments.length && !name)) {\n        return\n      }\n\n      // To prevent the for loop in the first place assign an empty array\n      // in case there are no cookies at all.\n      var cookies = document.cookie ? document.cookie.split('; ') : [];\n      var jar = {};\n      for (var i = 0; i < cookies.length; i++) {\n        var parts = cookies[i].split('=');\n        var value = parts.slice(1).join('=');\n\n        try {\n          var found = decodeURIComponent(parts[0]);\n          jar[found] = converter.read(value, found);\n\n          if (name === found) {\n            break\n          }\n        } catch (e) {}\n      }\n\n      return name ? jar[name] : jar\n    }\n\n    return Object.create(\n      {\n        set,\n        get,\n        remove: function (name, attributes) {\n          set(\n            name,\n            '',\n            assign({}, attributes, {\n              expires: -1\n            })\n          );\n        },\n        withAttributes: function (attributes) {\n          return init(this.converter, assign({}, this.attributes, attributes))\n        },\n        withConverter: function (converter) {\n          return init(assign({}, this.converter, converter), this.attributes)\n        }\n      },\n      {\n        attributes: { value: Object.freeze(defaultAttributes) },\n        converter: { value: Object.freeze(converter) }\n      }\n    )\n  }\n\n  var api = init(defaultConverter, { path: '/' });\n  /* eslint-enable no-var */\n\n  return api;\n\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/js-cookie/dist/js.cookie.js\n// module id = 669\n// module chunks = 23"],"sourceRoot":""}