blob: 2cf477ece4991189401fdd5ed807971089ebc80c [file] [log] [blame]
{
"version": 3,
"sources": ["unit.ts"],
"sourcesContent": ["/**\n * @license\n * Copyright 2021 The Go Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style\n * license that can be found in the LICENSE file.\n */\n\nconst headerHeight = 3.5;\nconst breadcumbHeight = 2.5;\n\n/**\n * MainLayoutController calculates dynamic height values for header elements\n * to support variable size sticky positioned elements in the header so that\n * banners and breadcumbs may overflow to multiple lines.\n */\nexport class MainLayoutController {\n private headerObserver: IntersectionObserver;\n private navObserver: IntersectionObserver;\n private asideObserver: IntersectionObserver;\n\n constructor(\n private mainHeader?: Element | null,\n private mainNav?: Element | null,\n private mainAside?: Element | null\n ) {\n this.headerObserver = new IntersectionObserver(\n ([e]) => {\n if (e.intersectionRatio < 1) {\n for (const x of document.querySelectorAll('[class^=\"go-Main-header\"')) {\n x.setAttribute('data-fixed', 'true');\n }\n } else {\n for (const x of document.querySelectorAll('[class^=\"go-Main-header\"')) {\n x.removeAttribute('data-fixed');\n }\n this.handleResize();\n }\n },\n { threshold: 1, rootMargin: `${breadcumbHeight * 16}px` }\n );\n this.navObserver = new IntersectionObserver(\n ([e]) => {\n if (e.intersectionRatio < 1) {\n this.mainNav?.classList.add('go-Main-nav--fixed');\n this.mainNav?.setAttribute('data-fixed', 'true');\n } else {\n this.mainNav?.classList.remove('go-Main-nav--fixed');\n this.mainNav?.removeAttribute('data-fixed');\n }\n },\n { threshold: 1, rootMargin: `-${headerHeight * 16 + 10}px` }\n );\n this.asideObserver = new IntersectionObserver(\n ([e]) => {\n if (e.intersectionRatio < 1) {\n this.mainHeader?.setAttribute('data-raised', 'true');\n } else {\n this.mainHeader?.removeAttribute('data-raised');\n }\n },\n { threshold: 1, rootMargin: `-${headerHeight * 16 + 20}px 0px 0px 0px` }\n );\n this.init();\n }\n\n private init() {\n this.handleResize();\n window.addEventListener('resize', this.handleResize);\n this.mainHeader?.addEventListener('dblclick', this.handleDoubleClick);\n if (this.mainHeader?.hasChildNodes()) {\n const headerSentinel = document.createElement('div');\n this.mainHeader.prepend(headerSentinel);\n this.headerObserver.observe(headerSentinel);\n }\n if (this.mainNav?.hasChildNodes()) {\n const navSentinel = document.createElement('div');\n this.mainNav.prepend(navSentinel);\n this.navObserver.observe(navSentinel);\n }\n if (this.mainAside) {\n const asideSentinel = document.createElement('div');\n this.mainAside.prepend(asideSentinel);\n this.asideObserver.observe(asideSentinel);\n }\n }\n\n private handleDoubleClick: EventListener = e => {\n const target = e.target;\n if (target === this.mainHeader?.lastElementChild) {\n window.getSelection()?.removeAllRanges();\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n };\n\n private handleResize = () => {\n const setProp = (name: string, value: string) =>\n document.documentElement.style.setProperty(name, value);\n setProp('--js-unit-header-height', '0');\n setTimeout(() => {\n const mainHeaderHeight = (this.mainHeader?.getBoundingClientRect().height ?? 0) / 16;\n setProp('--js-unit-header-height', `${mainHeaderHeight}rem`);\n setProp('--js-sticky-header-height', `${headerHeight}rem`);\n setProp('--js-unit-header-top', `${(mainHeaderHeight - headerHeight) * -1}rem`);\n });\n };\n}\n\nconst el = <T extends HTMLElement>(selector: string) => document.querySelector<T>(selector);\nnew MainLayoutController(el('.js-mainHeader'), el('.js-mainNav'), el('.js-mainAside'));\n"],
"mappings": "AAAA,AAOA,GAAM,GAAe,IACf,EAAkB,IAOjB,OAA2B,CAKhC,YACU,EACA,EACA,EACR,CAHQ,kBACA,eACA,iBA+DF,uBAAmC,GAAK,CAtFlD,QAwFI,AAAI,AADW,EAAE,SACF,SAAK,aAAL,cAAiB,mBAC9B,WAAO,iBAAP,QAAuB,kBACvB,OAAO,SAAS,CAAE,IAAK,EAAG,SAAU,aAIhC,kBAAe,IAAM,CAC3B,GAAM,GAAU,CAAC,EAAc,IAC7B,SAAS,gBAAgB,MAAM,YAAY,EAAM,GACnD,EAAQ,0BAA2B,KACnC,WAAW,IAAM,CAlGrB,QAmGM,GAAM,GAAoB,YAAK,aAAL,cAAiB,wBAAwB,SAAzC,OAAmD,GAAK,GAClF,EAAQ,0BAA2B,GAAG,QACtC,EAAQ,4BAA6B,GAAG,QACxC,EAAQ,uBAAwB,GAAI,GAAmB,GAAgB,YA7EzE,KAAK,eAAiB,GAAI,sBACxB,CAAC,CAAC,KAAO,CACP,GAAI,EAAE,kBAAoB,EACxB,OAAW,KAAK,UAAS,iBAAiB,4BACxC,EAAE,aAAa,aAAc,YAE1B,CACL,OAAW,KAAK,UAAS,iBAAiB,4BACxC,EAAE,gBAAgB,cAEpB,KAAK,iBAGT,CAAE,UAAW,EAAG,WAAY,GAAG,EAAkB,SAEnD,KAAK,YAAc,GAAI,sBACrB,CAAC,CAAC,KAAO,CAzCf,YA0CQ,AAAI,EAAE,kBAAoB,EACxB,SAAK,UAAL,QAAc,UAAU,IAAI,sBAC5B,QAAK,UAAL,QAAc,aAAa,aAAc,SAEzC,SAAK,UAAL,QAAc,UAAU,OAAO,sBAC/B,QAAK,UAAL,QAAc,gBAAgB,gBAGlC,CAAE,UAAW,EAAG,WAAY,IAAI,EAAe,GAAK,SAEtD,KAAK,cAAgB,GAAI,sBACvB,CAAC,CAAC,KAAO,CArDf,QAsDQ,AAAI,EAAE,kBAAoB,EACxB,QAAK,aAAL,QAAiB,aAAa,cAAe,QAE7C,QAAK,aAAL,QAAiB,gBAAgB,gBAGrC,CAAE,UAAW,EAAG,WAAY,IAAI,EAAe,GAAK,qBAEtD,KAAK,OAGC,MAAO,CAjEjB,UAqEI,GAHA,KAAK,eACL,OAAO,iBAAiB,SAAU,KAAK,cACvC,QAAK,aAAL,QAAiB,iBAAiB,WAAY,KAAK,mBAC/C,QAAK,aAAL,cAAiB,gBAAiB,CACpC,GAAM,GAAiB,SAAS,cAAc,OAC9C,KAAK,WAAW,QAAQ,GACxB,KAAK,eAAe,QAAQ,GAE9B,GAAI,QAAK,UAAL,cAAc,gBAAiB,CACjC,GAAM,GAAc,SAAS,cAAc,OAC3C,KAAK,QAAQ,QAAQ,GACrB,KAAK,YAAY,QAAQ,GAE3B,GAAI,KAAK,UAAW,CAClB,GAAM,GAAgB,SAAS,cAAc,OAC7C,KAAK,UAAU,QAAQ,GACvB,KAAK,cAAc,QAAQ,MAyB3B,EAAK,AAAwB,GAAqB,SAAS,cAAiB,GAClF,GAAI,GAAqB,EAAG,kBAAmB,EAAG,eAAgB,EAAG",
"names": []
}