{"version":3,"file":"hugo-uswds.min.js","mappings":"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","sources":["webpack://HugoUSWDS/webpack/universalModuleDefinition","webpack://HugoUSWDS/./src/constants.ts","webpack://HugoUSWDS/./src/in-page-nav.ts","webpack://HugoUSWDS/external umd \"jQuery\"","webpack://HugoUSWDS/webpack/bootstrap","webpack://HugoUSWDS/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jQuery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"HugoUSWDS\", [\"jQuery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"HugoUSWDS\"] = factory(require(\"jQuery\"));\n\telse\n\t\troot[\"HugoUSWDS\"] = factory(root[\"jQuery\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE__145__) => {\nreturn ","export namespace Constants {\r\n export const SELECTOR_MAIN_ELEMENT = \"main\";\r\n}\r\n ","const jQuery = require('jquery')\r\n\r\nconst $: JQueryStatic = jQuery;\r\n\r\nexport namespace InPageNav {\r\n const CLASS = \"site-in-page-nav\";\r\n const LINK_CLASS = \"site-in-page-nav__link\";\r\n const SCROLL_OFFSET: number = -120;\r\n const CURRENT_CLASS = `usa-current`;\r\n const IN_PAGE_NAV_HEADING_SELECTORS = \"h2, h3, h4\";\r\n\r\n export function init(main: JQuery) {\r\n let sectionId = scrollToCurrentSection();\r\n $(`.${CLASS}`).each((_, nav) => {\r\n let currentNav = new Nav(nav, main);\r\n if (sectionId) {\r\n currentNav.scrollNavToSectionId(sectionId);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scrolls the page to the section corresponding to the current hash fragment, if one exists.\r\n */\r\n function scrollToCurrentSection() : (string | undefined) {\r\n let sectionId = getSectionIdFromFragment(window.location.hash);\r\n if (sectionId) {\r\n let heading = document.getElementById(sectionId);\r\n if (heading) {\r\n scrollToSection(heading);\r\n return sectionId;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n function getContentScrollOffset() : number {\r\n// return (this.nav.dataset.scrollOffset || SCROLL_OFFSET) as number;\r\n return SCROLL_OFFSET;\r\n }\r\n\r\n /**\r\n * Scroll smoothly to a section based on the passed in element\r\n *\r\n * @param el - Id value with the number sign removed\r\n */\r\n function scrollToSection(el: HTMLElement) {\r\n let scrollOffset = getContentScrollOffset();\r\n\r\n window.scroll({\r\n behavior: \"smooth\",\r\n top: el.offsetTop - scrollOffset,\r\n });\r\n \r\n if (window.location.hash.slice(1) !== el.id) {\r\n window.history.pushState(null, \"\", `#${el.id}`);\r\n }\r\n }\r\n\r\n function getSectionIdFromAnchor(element: HTMLAnchorElement) : string {\r\n return getSectionIdFromFragment(element.hash);\r\n }\r\n\r\n function getSectionIdFromFragment(text: string) : string {\r\n return text.slice(1);\r\n }\r\n\r\n export class Nav {\r\n private readonly nav: HTMLElement;\r\n private readonly content: JQuery;\r\n private intersections: Map;\r\n\r\n constructor(nav: HTMLElement, content: JQuery) {\r\n this.nav = nav;\r\n this.content = content;\r\n \r\n this.initLinks();\r\n this.intersections = this.initObserver();\r\n }\r\n\r\n initLinks() {\r\n $(this.nav).find(`.${LINK_CLASS}`)\r\n .on(\"click\",(ev) => { this.handleClick(ev)})\r\n .on(\"keypress\",(ev) => { this.handleKeypress(ev)});\r\n }\r\n\r\n protected handleClick(event: JQuery.ClickEvent) {\r\n event.preventDefault();\r\n this.handleClickFromLink(event.currentTarget);\r\n }\r\n \r\n protected handleKeypress(event: JQuery.KeyPressEvent) {\r\n let code = event.keyCode || event.which;\r\n if (code == 13) { /* enter */\r\n event.preventDefault();\r\n this.handleEnterFromLink(event.currentTarget);\r\n }\r\n }\r\n\r\n private getSectionHeadings() : JQuery {\r\n let headingSelectors = this.nav.dataset.headingSelectors || IN_PAGE_NAV_HEADING_SELECTORS;\r\n return this.content.find(`${headingSelectors}`);\r\n }\r\n\r\n private initObserver() : Map {\r\n const options : IntersectionObserverInit = {\r\n root: document,\r\n threshold: 1,\r\n rootMargin: \"48px 0px 0px 0px\"\r\n };\r\n \r\n let observer = new window.IntersectionObserver((entries) => {\r\n this.handleIntersection(entries);\r\n }, options);\r\n \r\n let sectionHeadings = this.getSectionHeadings();\r\n// console.trace(sectionHeadings.get());\r\n\r\n let result = new Map();\r\n sectionHeadings.each((_, element) => {\r\n observer.observe(element);\r\n\r\n let key = element.id;\r\n result.set(key, 0);\r\n });\r\n return result;\r\n }\r\n\r\n getNavAnchorBySectionId(id: string) : (HTMLAnchorElement | undefined) {\r\n let fragment = encodeURI(`#${id}`);\r\n return $(this.nav).find(`a[href='${fragment}'`)[0] as HTMLAnchorElement;\r\n }\r\n\r\n protected handleIntersection(entries: IntersectionObserverEntry[]) {\r\n let nav = $(this.nav);\r\n let allLinks = nav.find(`.${LINK_CLASS}`);\r\n let spied = entries.map((entry) => {\r\n if (entry.isIntersecting === true && entry.intersectionRatio >= 1) {\r\n let id = entry.target.id;\r\n// console.warn(`Intersection of ${id}: ${entry.intersectionRatio}`);\r\n// allLinks.removeClass(CURRENT_CLASS);\r\n let spy = this.getNavAnchorBySectionId(id);\r\n// spy.classList.add(CURRENT_CLASS);\r\n return spy;\r\n }\r\n return undefined;\r\n }).find((spy) => spy !== undefined);\r\n/*\r\n let spied = entries.map((entry) => {\r\n let id = entry.target.id;\r\n console.warn(`Intersection of ${id}: ${entry.intersectionRatio}`);\r\n let spy = this.getNavAnchorBySectionId(id);\r\n if (entry.isIntersecting === true && entry.intersectionRatio == 1) {\r\n spy.addClass(CURRENT_CLASS);\r\n return spy[0];\r\n }\r\n spy.removeClass(CURRENT_CLASS);\r\n return undefined;\r\n }).find((spy) => spy !== undefined);\r\n*/\r\n if (spied) {\r\n this.makeActive(getSectionIdFromAnchor(spied));\r\n// this.scrollNavToActive();\r\n }\r\n/*\r\n if (spied !== undefined) {\r\n this.scrollNavToAnchor(spied);\r\n }\r\n*/\r\n }\r\n\r\n scrollNavToSectionId(sectionId: string) : void {\r\n let el = this.getNavAnchorBySectionId(sectionId);\r\n if (el) {\r\n this.scrollNavToAnchor(el);\r\n }\r\n }\r\n\r\n scrollNavToActive() : void {\r\n let nav = $(this.nav);\r\n let anchor = nav.find(`a.${CURRENT_CLASS}`);\r\n if (anchor.length > 0) {\r\n this.scrollNavToAnchor(anchor[0] as HTMLAnchorElement);\r\n }\r\n }\r\n\r\n makeActive(sectionId: string) {\r\n let nav = $(this.nav);\r\n nav.find(`.${LINK_CLASS}`).removeClass(CURRENT_CLASS);\r\n let anchor = this.getNavAnchorBySectionId(sectionId);\r\n\r\n if (anchor === undefined) {\r\n return;\r\n }\r\n\r\n anchor.classList.add(CURRENT_CLASS);\r\n this.scrollNavToAnchor(anchor);\r\n }\r\n\r\n /**\r\n * Scroll the in-page-nav to the active element\r\n * @param el the active navigation anchor\r\n */\r\n scrollNavToAnchor(el: HTMLAnchorElement) : void {\r\n let nav = $(this.nav);\r\n\r\n let navPosition = this.findPosition(this.nav);\r\n let elPosition = this.findPosition(el);\r\n let navInnerHeight = nav.innerHeight();\r\n\r\n if (navPosition === undefined || elPosition === undefined || navInnerHeight === undefined) {\r\n return;\r\n }\r\n\r\n let elOffset = elPosition - navPosition;\r\n// console.info(`${el} offset: ${elOffset} nav: ${navPosition} anchor: ${elPosition}`);\r\n\r\n let halfHeight = navInnerHeight / 2;\r\n\r\n let position;\r\n if (elOffset < halfHeight) {\r\n position = 0;\r\n// console.info(`above: y: ${elOffset}, half: ${halfHeight}, position: ${position}`);\r\n } else {\r\n position = elOffset - halfHeight;\r\n// console.info(`below: y: ${elOffset}, half: ${halfHeight}, position: ${position}`);\r\n }\r\n\r\n this.nav.scroll({\r\n behavior: \"smooth\",\r\n top: position,\r\n });\r\n }\r\n\r\n private findPosition(el: HTMLElement) {\r\n let result = 0;\r\n if (el.offsetParent) {\r\n let obj : (undefined | HTMLElement) = el;\r\n do {\r\n// console.info(`${obj}: ${obj.offsetTop}`)\r\n result += obj.offsetTop;\r\n obj = obj.offsetParent as HTMLElement;\r\n } while (obj);\r\n return result;\r\n }\r\n }\r\n\r\n /**\r\n * Handle click from link\r\n *\r\n * @param {JQuery} el An element within the in-page nav component\r\n */\r\n protected handleClickFromLink(anchor: HTMLAnchorElement) {\r\n let id = getSectionIdFromAnchor(anchor);\r\n let target = document.getElementById(id) as HTMLElement;\r\n scrollToSection(target);\r\n// this.makeActive(id);\r\n }\r\n\r\n /**\r\n * Handle the enter event from a link within the in-page nav component\r\n *\r\n * @param {KeyboardEvent} event An event within the in-page nav component\r\n */\r\n protected handleEnterFromLink(anchor: HTMLAnchorElement) {\r\n let id = getSectionIdFromAnchor(anchor);\r\n let target = document.getElementById(id) as HTMLElement;\r\n \r\n if (target.parentElement) {\r\n let parent : HTMLElement = target.parentElement;\r\n parent.tabIndex = 0;\r\n parent.focus();\r\n $(parent).one(\"blur\", () => parent.tabIndex = -1);\r\n }\r\n scrollToSection(target);\r\n// this.makeActive(id);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__145__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/*\r\nconst inPageNavigation = behavior(\r\n {\r\n [CLICK]: {\r\n [`.${IN_PAGE_NAV_LINK_CLASS}`](event) {\r\n event.preventDefault();\r\n if (this.disabled) return;\r\n handleClickFromLink(this);\r\n },\r\n },\r\n keydown: {\r\n [`.${IN_PAGE_NAV_LINK_CLASS}`]: keymap({\r\n Enter: handleEnterFromLink,\r\n }),\r\n },\r\n },\r\n {\r\n init(root) {\r\n selectOrMatches(`.${IN_PAGE_NAV_CLASS}`, root).forEach((inPageNavEl) => {\r\n createInPageNav(inPageNavEl);\r\n scrollToCurrentSection();\r\n });\r\n },\r\n }\r\n);\r\n*/\r\n\r\nconst jQuery = require('jquery')\r\nimport { Constants } from \"./constants\";\r\nimport { InPageNav } from \"./in-page-nav\";\r\n\r\ndeclare var window : any;\r\nwindow.$ = window.jQuery = jQuery;\r\n\r\njQuery(() => {\r\n const main = jQuery(`${Constants.SELECTOR_MAIN_ELEMENT}`);\r\n InPageNav.init(main);\r\n});\r\n"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE__145__","Constants","SELECTOR_MAIN_ELEMENT","InPageNav","$","LINK_CLASS","SCROLL_OFFSET","CURRENT_CLASS","scrollToSection","el","scrollOffset","window","scroll","behavior","top","offsetTop","location","hash","slice","id","history","pushState","getSectionIdFromAnchor","element","getSectionIdFromFragment","text","init","main","sectionId","heading","document","getElementById","scrollToCurrentSection","each","_","nav","currentNav","Nav","scrollNavToSectionId","content","this","initLinks","intersections","initObserver","find","on","ev","handleClick","handleKeypress","event","preventDefault","handleClickFromLink","currentTarget","keyCode","which","handleEnterFromLink","getSectionHeadings","headingSelectors","dataset","options","threshold","rootMargin","observer","IntersectionObserver","entries","handleIntersection","sectionHeadings","result","Map","observe","key","set","getNavAnchorBySectionId","fragment","encodeURI","spied","map","entry","isIntersecting","intersectionRatio","target","spy","undefined","makeActive","scrollNavToAnchor","scrollNavToActive","anchor","length","removeClass","classList","add","navPosition","findPosition","elPosition","navInnerHeight","innerHeight","position","elOffset","halfHeight","offsetParent","obj","parentElement","tabIndex","focus","one","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","jQuery"],"sourceRoot":""}