{"version":3,"sources":["webpack:///./src/js/components/Component.js","webpack:///./src/js/components/JumpLink.js","webpack:///./src/js/helpers/jumpToTarget.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__","_jumpToTarget","JumpLink","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","call","jumpTarget","attr","on","onClickLink","bind","removeClass","e","stopPropagation","preventDefault","jumpToTarget","target","$target","headerHeight","outerHeight","scrollDistance","offset","top","stop","animate","scrollTop","duration","easing","step","now","fx","newOffset","end"],"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,sWCrJfmB,EAAAC,EAAA,yCACAC,EAAAD,EAAA,SACME,cACJ,SAAAA,EAAYrB,GAAI,mGAAAK,CAAAC,KAAAe,oKAAAC,CAAAhB,MAAAe,EAAAE,WAAAC,OAAAC,eAAAJ,IAAAK,KAAApB,KACRN,uUAFaD,sDAMnBO,KAAKqB,WAAarB,KAAKE,IAAIoB,KAAK,+CAGhCtB,KAAKE,IAAIqB,GAAG,QAAWvB,KAAKwB,YAA5BC,KAAuBzB,OAAkB0B,YAAY,8CAE3CC,GACVA,EAAEC,kBACFD,EAAEE,kBACF,EAAAf,EAAAgB,cAAa9B,KAAKqB,+BAIPN,kGCpBFe,eAAe,SAAAC,GAC1B,IAAMC,EAAU5B,EAAE2B,GACZE,EAAe7B,EAAE,eAAe8B,cAChCC,EAAiBH,EAAQI,SAASC,IAAMJ,EAE9C7B,EAAE,cAAckC,OAAOC,SACnBC,UAAWL,IAEXM,SAAU,IACVC,OAAQ,QACRC,KAAM,SAACC,EAAKC,GAGV,IAAMC,EAAYd,EAAQI,SAASC,IAAMJ,EACrCY,EAAGE,MAAQD,IACbD,EAAGE,IAAMD","file":"24.667463e622d662fcbfd7.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 { jumpToTarget } from '../helpers/jumpToTarget';\r\nclass JumpLink extends Component {\r\n constructor(el) {\r\n super(el);\r\n }\r\n\r\n setupDefaults() {\r\n this.jumpTarget = this.$el.attr('href');\r\n }\r\n addListeners() {\r\n this.$el.on('click', ::this.onClickLink).removeClass('d-none');\r\n }\r\n onClickLink(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n jumpToTarget(this.jumpTarget);\r\n }\r\n}\r\n\r\nexport default JumpLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/components/JumpLink.js","export const jumpToTarget = target => {\r\n const $target = $(target);\r\n const headerHeight = $('#siteHeader').outerHeight();\r\n const scrollDistance = $target.offset().top - headerHeight;\r\n // console.log('scrollDistance', scrollDistance);\r\n $('html, body').stop().animate(\r\n { scrollTop: scrollDistance },\r\n {\r\n duration: 900,\r\n easing: 'swing',\r\n step: (now, fx) => {\r\n // Where is the target now located on the page?\r\n // i.e. its location will change as images etc. are lazy loaded\r\n const newOffset = $target.offset().top - headerHeight;\r\n if (fx.end !== newOffset) {\r\n fx.end = newOffset;\r\n }\r\n }\r\n }\r\n );\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/helpers/jumpToTarget.js"],"sourceRoot":""}