{"version":3,"sources":["webpack:///./src/js/components/Component.js","webpack:///./src/js/components/Header.js"],"names":["domTree","WeakMap","configuration","Component","el","config","arguments","length","undefined","_classCallCheck","this","Error","$el","jQuery","$","set","hasOwnProperty","dom","setupDefaults","addListeners","get","elements","_component","__webpack_require__","Header","_this","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","initHeader","$headerSearch","find","$searchTrigger","$mainContent","$menuTrigger","$primaryNav","$primaryNavItems","on","onSearchTrigger","bind","isPositionStickySupported","e","stopPropagation","preventDefault","toggleHeaderSearch","_this2","toggleClass","hasClass","Promise","resolve","removeClass","then","setTimeout","show","addClass","element","height","prop","css","document","querySelector","classList","toggle","includes"],"mappings":"ohBAAA,IAAMA,EAAU,IAAIC,QACdC,EAAgB,IAAID,QA4BpBE,aAOJ,SAAAA,EAAYC,GAAgB,IAAZC,EAAYC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,MAC1B,+FAD0BG,CAAAC,KAAAP,QACR,IAAPC,EACT,MAAM,IAAIO,MAAM,wEASlBD,KAAKE,IAAMR,aAAcS,EAAST,EAAKU,EAAEV,GAEjB,IAApBM,KAAKE,IAAIL,SAEbP,EAAQe,IAAIL,SACZR,EAAca,IAAIL,KAAML,GAEpBK,KAAKL,OAAOW,eAAe,SAC7BN,KAAKO,IAAMP,KAAKL,OAAOY,KAGzBP,KAAKQ,gBACLR,KAAKS,0IAuCL,OAAOjB,EAAckB,IAAIV,gCA6BnBW,GACNA,OACKX,KAAKO,IACLI,GAGLrB,EAAQe,IAAIL,KAAMW,mBAYlB,OAAOrB,EAAQoB,IAAIV,yBAIRP,mXCrJfmB,EAAAC,EAAA,yCACAA,EAAA,QAEMC,cACJ,SAAAA,EAAYpB,EAAIC,gGAAQI,CAAAC,KAAAc,GAAA,IAAAC,mKAAAC,CAAAhB,MAAAc,EAAAG,WAAAC,OAAAC,eAAAL,IAAAM,KAAApB,KAChBN,EAAIC,IADY,OAEtBoB,EAAKM,aAFiBN,qUADLtB,sDAOjBO,KAAKO,KACHe,cAAetB,KAAKE,IAAIqB,KAAK,kBAC7BC,eAAgBxB,KAAKE,IAAIqB,KAAK,2BAC9BE,aAAcrB,EAAE,gBAChBsB,aAAc1B,KAAKE,IAAIqB,KAAK,yBAC5BI,YAAa3B,KAAKE,IAAIqB,KAAK,gBAC3BK,iBAAkB5B,KAAKE,IAAIqB,KAAK,8DAKlCvB,KAAKO,IAAIiB,eAAeK,GAAG,QAAW7B,KAAK8B,gBAA3CC,KAAsC/B,4CAIlCA,KAAKgC,oEAKKC,GACdA,EAAEC,kBACFD,EAAEE,iBACFnC,KAAKoC,kEAGc,IAAAC,EAAArC,KACnBA,KAAKO,IAAIiB,eAAec,YAAY,aAE/BtC,KAAKE,IAAIqC,SAAS,oBAgBrBC,QAAQC,QAAQzC,KAAKO,IAAIe,cAAcoB,YAAY,cAAcC,KAC/D,WACEC,WAAW,WACTP,EAAKnC,IAAIwC,YAAY,oBACrBL,EAAK9B,IAAImB,aAAamB,KAAK,SAC1B,OApBPL,QAAQC,QAAQzC,KAAKE,IAAI4C,SAAS,qBAAqBH,KAAK,WAUxD,IAeWI,EACTC,GAzBJX,EAAK9B,IAAIe,cAAcwB,SAAS,aAChCT,EAAK9B,IAAIqB,iBAAiBc,YAAY,WAElCL,EAAK9B,IAAIoB,YAAYY,SAAS,WAqBrBQ,EApBHV,EAAK9B,IAAIoB,YAqBfqB,EAAS5C,EAAE2C,GAASE,KAAK,gBAC/B7C,EAAE2C,GAASG,IAAI,SAAaF,EAA5B,MACAJ,WAAW,WACTxC,EAAE2C,GAASG,IAAI,SAAU,KACzB9C,EAAE2C,GAASL,YAAY,SACtB,GAzBCL,EAAK9B,IAAIoB,YAAYe,YAAY,QACjCL,EAAK9B,IAAImB,aAAagB,YAAY,aAClCtC,EAAE,QAAQsC,YAAY,mBACtBtC,EAAE,eAAesC,YAAY,QACPS,SAASC,cAAc,WAC/BC,UAAUC,OAAO,yEAyBrC,OAAOtD,KAAKE,IAAIgD,IAAI,YAAYK,SAAS,6BAI9BzC","file":"30.01dfb71268d53c99b089.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 { BREAKPOINT } from '../constants';\r\n\r\nclass Header extends Component {\r\n  constructor(el, config) {\r\n    super(el, config);\r\n    this.initHeader();\r\n  }\r\n\r\n  setupDefaults() {\r\n    this.dom = {\r\n      $headerSearch: this.$el.find('.header-search'),\r\n      $searchTrigger: this.$el.find('.header-search__trigger'),\r\n      $mainContent: $('#mainContent'),\r\n      $menuTrigger: this.$el.find('.header-menu__trigger'),\r\n      $primaryNav: this.$el.find('.primary-nav'),\r\n      $primaryNavItems: this.$el.find('.primary-nav__item')\r\n    };\r\n  }\r\n\r\n  addListeners() {\r\n    this.dom.$searchTrigger.on('click', ::this.onSearchTrigger);\r\n  }\r\n\r\n  initHeader() {\r\n    if (this.isPositionStickySupported()) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  onSearchTrigger(e) {\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n    this.toggleHeaderSearch();\r\n  }\r\n\r\n  toggleHeaderSearch() {\r\n    this.dom.$searchTrigger.toggleClass('is-active');\r\n\r\n    if (!this.$el.hasClass('is-search-active')) {\r\n      Promise.resolve(this.$el.addClass('is-search-active')).then(() => {\r\n        this.dom.$headerSearch.addClass('is-active');\r\n        this.dom.$primaryNavItems.removeClass('is-open');\r\n\r\n        if (this.dom.$primaryNav.hasClass('open')){\r\n          slideUp(this.dom.$primaryNav);\r\n          this.dom.$primaryNav.removeClass('open');\r\n          this.dom.$menuTrigger.removeClass('is-active');\r\n          $('html').removeClass('has-menu-active');\r\n          $('.parent-nav').removeClass('open');\r\n          const headerElement = document.querySelector('.header');\r\n          headerElement.classList.toggle('is-menu-active');\r\n        }\r\n      });\r\n    } else {\r\n      Promise.resolve(this.dom.$headerSearch.removeClass('is-active')).then(\r\n        () => {\r\n          setTimeout(() => {\r\n            this.$el.removeClass('is-search-active');\r\n            this.dom.$menuTrigger.show('fast');\r\n          }, 230);\r\n        }\r\n      );\r\n    }\r\n\r\n    function slideUp(element) {\r\n      const height = $(element).prop('scrollHeight');\r\n      $(element).css('height', `${height}px`);\r\n      setTimeout(() => {\r\n        $(element).css('height', '0');\r\n        $(element).removeClass('open');\r\n      }, 0);\r\n    }\r\n  }\r\n\r\n  isPositionStickySupported() {\r\n    return this.$el.css('position').includes('sticky');\r\n  }\r\n}\r\n\r\nexport default Header;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/Header.js"],"sourceRoot":""}