{"version":3,"file":"anchorOffsetter.js","names":["document","history","location","HISTORY_SUPPORT","pushState","anchorScrolls","ANCHOR_REGEX","OFFSET_HEIGHT_PX","init","scrollToCurrent","window","addEventListener","bind","body","delegateAnchors","getFixedOffset","scrollIfAnchor","href","pushToHistory","match","rect","anchorOffset","test","getElementsByName","decodeURI","slice","getBoundingClientRect","pageYOffset","top","scrollTo","pageXOffset","title","pathname","me","hash","e","elem","target","nodeName","getAttribute","preventDefault","apply"],"sources":["utils/anchorOffsetter.js"],"sourcesContent":["(function(document, history, location) {\r\n var HISTORY_SUPPORT = !!(history && history.pushState);\r\n\r\n var anchorScrolls = {\r\n ANCHOR_REGEX: /^#(.|\\s)+/,\r\n OFFSET_HEIGHT_PX: 100,\r\n\r\n /**\r\n * Establish events, and fix initial scroll position if a hash is provided.\r\n */\r\n init: function() {\r\n this.scrollToCurrent();\r\n window.addEventListener('hashchange', this.scrollToCurrent.bind(this));\r\n document.body.addEventListener('click', this.delegateAnchors.bind(this));\r\n },\r\n\r\n /**\r\n * Return the offset amount to deduct from the normal scroll position.\r\n * Modify as appropriate to allow for dynamic calculations\r\n */\r\n getFixedOffset: function() {\r\n return this.OFFSET_HEIGHT_PX;\r\n },\r\n\r\n /**\r\n * If the provided href is an anchor which resolves to an element on the\r\n * page, scroll to it.\r\n * @param {String} href\r\n * @return {Boolean} - Was the href an anchor.\r\n */\r\n scrollIfAnchor: function(href, pushToHistory) {\r\n var match, rect, anchorOffset;\r\n\r\n if(!this.ANCHOR_REGEX.test(href)) {\r\n return false;\r\n }\r\n\r\n match = document.getElementsByName(decodeURI(href.slice(1)))[0]\r\n if(match) {\r\n rect = match.getBoundingClientRect();\r\n anchorOffset = window.pageYOffset + rect.top - this.getFixedOffset();\r\n window.scrollTo(window.pageXOffset, anchorOffset);\r\n\r\n // Add the state to history as-per normal anchor links\r\n if(HISTORY_SUPPORT && pushToHistory) {\r\n history.pushState({}, document.title, location.pathname + href);\r\n }\r\n }\r\n\r\n return !!match;\r\n },\r\n\r\n /**\r\n * Attempt to scroll to the current location's hash.\r\n */\r\n scrollToCurrent: function() {\r\n var me = this;\r\n window.addEventListener('load', function () {\r\n me.scrollIfAnchor(window.location.hash);\r\n });\r\n },\r\n\r\n /**\r\n * If the click event's target was an anchor, fix the scroll position.\r\n */\r\n delegateAnchors: function(e) {\r\n var elem = e.target;\r\n\r\n if(\r\n elem.nodeName === 'A' &&\r\n this.scrollIfAnchor(elem.getAttribute('href'), true)\r\n ) {\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n\r\n anchorScrolls.init.apply(anchorScrolls);\r\n})(window.document, window.history, window.location);"],"mappings":";;AAAA,CAAC,UAASA,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAE;EACrC,IAAIC,eAAe,GAAG,CAAC,EAAEF,OAAO,IAAIA,OAAO,CAACG,SAAS,CAAC;EAEtD,IAAIC,aAAa,GAAG;IAClBC,YAAY,EAAE,WAAW;IACzBC,gBAAgB,EAAE,GAAG;IAErB;AACJ;AACA;IACIC,IAAI,EAAE,gBAAW;MACf,IAAI,CAACC,eAAe,EAAE;MACtBC,MAAM,CAACC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAACF,eAAe,CAACG,IAAI,CAAC,IAAI,CAAC,CAAC;MACtEZ,QAAQ,CAACa,IAAI,CAACF,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACG,eAAe,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED;AACJ;AACA;AACA;IACIG,cAAc,EAAE,0BAAW;MACzB,OAAO,IAAI,CAACR,gBAAgB;IAC9B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;IACIS,cAAc,EAAE,wBAASC,IAAI,EAAEC,aAAa,EAAE;MAC5C,IAAIC,KAAK,EAAEC,IAAI,EAAEC,YAAY;MAE7B,IAAG,CAAC,IAAI,CAACf,YAAY,CAACgB,IAAI,CAACL,IAAI,CAAC,EAAE;QAChC,OAAO,KAAK;MACd;MAEAE,KAAK,GAAGnB,QAAQ,CAACuB,iBAAiB,CAACC,SAAS,CAACP,IAAI,CAACQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MAC/D,IAAGN,KAAK,EAAE;QACRC,IAAI,GAAGD,KAAK,CAACO,qBAAqB,EAAE;QACpCL,YAAY,GAAGX,MAAM,CAACiB,WAAW,GAAGP,IAAI,CAACQ,GAAG,GAAG,IAAI,CAACb,cAAc,EAAE;QACpEL,MAAM,CAACmB,QAAQ,CAACnB,MAAM,CAACoB,WAAW,EAAET,YAAY,CAAC;;QAEjD;QACA,IAAGlB,eAAe,IAAIe,aAAa,EAAE;UACnCjB,OAAO,CAACG,SAAS,CAAC,CAAC,CAAC,EAAEJ,QAAQ,CAAC+B,KAAK,EAAE7B,QAAQ,CAAC8B,QAAQ,GAAGf,IAAI,CAAC;QACjE;MACF;MAEA,OAAO,CAAC,CAACE,KAAK;IAChB,CAAC;IAED;AACJ;AACA;IACIV,eAAe,EAAE,2BAAW;MACxB,IAAIwB,EAAE,GAAG,IAAI;MACbvB,MAAM,CAACC,gBAAgB,CAAC,MAAM,EAAE,YAAY;QACxCsB,EAAE,CAACjB,cAAc,CAACN,MAAM,CAACR,QAAQ,CAACgC,IAAI,CAAC;MAC3C,CAAC,CAAC;IACN,CAAC;IAED;AACJ;AACA;IACIpB,eAAe,EAAE,yBAASqB,CAAC,EAAE;MAC3B,IAAIC,IAAI,GAAGD,CAAC,CAACE,MAAM;MAEnB,IACED,IAAI,CAACE,QAAQ,KAAK,GAAG,IACrB,IAAI,CAACtB,cAAc,CAACoB,IAAI,CAACG,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EACpD;QACAJ,CAAC,CAACK,cAAc,EAAE;MACpB;IACF;EACF,CAAC;EAEDnC,aAAa,CAACG,IAAI,CAACiC,KAAK,CAACpC,aAAa,CAAC;AACzC,CAAC,EAAEK,MAAM,CAACV,QAAQ,EAAEU,MAAM,CAACT,OAAO,EAAES,MAAM,CAACR,QAAQ,CAAC"}