{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/frontend/lib/isDesktop.js","webpack:///./app/frontend/packs/unitPageDigital.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","this","oldJsonpFunction","slice","isDesktop","device","UAParser","window","navigator","userAgent","getDevice","undefined","type","includes","SCROLL_OFFSET","smoothTopicNav","isIE11","MSInputMethodContext","document","documentMode","$","on","e","preventDefault","link","target","closest","pos","getAttribute","offset","top","scroll","left","behavior","stickyBreadcrumb","$breadcrumbWrapper","breadcrumb","children","$shim","css","position","width","getElementById","offsetHeight","height","insertAfter","onScroll","setPosition","offsetTop","stickyTopicNav","$sidebar","scrollSpyTopicNav","$navAnchors","filter","a","innerHTML","trim","remove","findActiveAnchor","aMap","createAnchorMap","$anchorHrefs","map","toArray","anchorMap","join","selector","sortBy","find","idx","next","adjustedPosition","innerHeight","documentElement","removeClass","removeAttr","anchorHref","anchor","addClass","attr","scrollSidePanel","unitContentContainer","unitHeading","contextNav","alert","querySelector","alertHeight","unitHeadingHeight","setSidePanelContentHeight","contextNavOffset","unitPageOnScroll","stickyNav","scrollSpy","sticky","sidePanel","currentPosition","pageYOffset","scrollTop","console","warn","unitPage","init","page","unitContent","classList","add"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,GACR,CACA,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,EAC9C,CACGA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,IAEtE,CAEA,OAAOD,CACR,CAGA,IAAIQ,EAAmB,CAAC,EAKpBhB,EAAkB,CACrB,GAAI,GAGDK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,CAAC,GAUX,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,OACf,CAIAH,EAAoBM,EAAIlB,EAGxBY,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,SAASL,EAASM,EAAMC,GAC3CV,EAAoBW,EAAER,EAASM,IAClC3B,OAAO8B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,GAEhE,EAGAV,EAAoBe,EAAI,SAASZ,GACX,oBAAXa,QAA0BA,OAAOC,aAC1CnC,OAAO8B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DpC,OAAO8B,eAAeT,EAAS,aAAc,CAAEe,OAAO,GACvD,EAOAlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKxC,OAAOyC,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBxC,OAAO8B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBQ,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,EAAM,EAAEC,KAAK,KAAMD,IAC9I,OAAOF,CACR,EAGAtB,EAAoB0B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAgB,OAAG,EAClD,WAA8B,OAAOA,CAAQ,EAE9C,OADAJ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,CACR,EAGAV,EAAoBW,EAAI,SAASgB,EAAQC,GAAY,OAAO9C,OAAOC,UAAUC,eAAeC,KAAK0C,EAAQC,EAAW,EAGpH5B,EAAoB6B,EAAI,UAExB,IAAIC,EAAaC,KAA6B,uBAAIA,KAA6B,wBAAK,GAChFC,EAAmBF,EAAW3C,KAAKsC,KAAKK,GAC5CA,EAAW3C,KAAOf,EAClB0D,EAAaA,EAAWG,QACxB,IAAI,IAAItD,EAAI,EAAGA,EAAImD,EAAWjD,OAAQF,IAAKP,EAAqB0D,EAAWnD,IAC3E,IAAIU,EAAsB2C,EAI1BzC,EAAgBJ,KAAK,CAAC,IAAI,EAAE,KAErBM,G,oCCvJT,aASeyC,IAPGA,KAChB,MACMC,EADQ,IAAIC,WAASC,OAAOC,UAAUC,WACvBC,YACrB,YAAuBC,IAAhBN,EAAOO,OACX,CAAC,WAAY,UAAUC,SAASR,EAAOO,KAAK,C,mCCNjD,gXAkBA,MAAME,EAAgB,IAEf,SAASC,IACd,MAAMC,IAAWT,OAAOU,wBAA0BC,SAASC,aAE3DC,EAAE,qBAAqBC,GAAG,SAAUC,IAC7BN,GACHM,EAAEC,iBAGJ,MAAMC,EAAOJ,EAAEE,EAAEG,QAAQC,QAAQ,KAAK,GAChCC,EAAMP,EAAEI,EAAKI,aAAa,SAASC,SAASC,IAAMhB,EAExDP,OAAOwB,OAAO,CACZD,IAAKH,EAAM,EACXK,KAAM,EACNC,SAAU,UACV,GAEN,CAEO,SAASC,IACd,MAAMC,EAAqBf,EAAE,yBAC7B,GAAkC,IAA9Be,EAAmBpF,OACrB,OAGF,MAAMqF,EAAaD,EAAmBE,WAAW,GAC3CC,EAAQlB,EAAE,8CAEhBA,EAAEgB,GAAYG,IAAI,CAChBC,SAAU,QACVC,MAAO,OACPX,IAAKZ,SAASwB,eAAe,wBAAwBC,eAGvDL,EAAMC,IAAI,CACRK,OAAQR,EAAWO,aACnBF,MAAO,SAGTrB,EAAEkB,GAAOO,YAAYV,GASrB,MAAO,CACLW,SARkBC,KAClB,IAAIlB,EAASX,SAASwB,eAAe,cAAcM,UAAY9B,SAASwB,eAAe,cAAcC,aACrGvB,EAAEgB,GAAYG,IAAI,CAChBT,IAAKD,GACL,EAMN,CAEO,SAASoB,IACd,MAAMC,EAAW9B,EAAE,iBASnB,MAAO,CACL0B,SAR0BN,IAC1BU,EAASX,IAAI,CACXC,SAAU,SACVV,IAAM,GAAE,IAAMZ,SAASwB,eAAe,cAAcM,eACpD,EAMN,CAEO,SAASG,IACd,IAAIC,EAAchC,EAAE,qBACpB,GAA2B,IAAvBgC,EAAYrG,OACd,OAIFqG,EAAYC,QAAO,CAACxG,EAAGyG,IAA6B,KAAvBA,EAAEC,UAAUC,SAAeC,SAExDL,EAAchC,EAAE,qBAEhB,MAaMsC,EAAoBlB,IAGxB,MAAMmB,EAhBgBC,MACtB,MAAMC,EAAeT,EAAYU,KAAI,CAACjH,EAAGyG,IAAMA,EAAE1B,aAAa,UAASmC,UAGjEC,EAFe5C,EAAEyC,EAAaI,KAAK,MAEVH,KAAI,CAACjH,EAAGyG,KAAC,CACtCY,SAAW,IAAGZ,EAAE1B,aAAa,QAC7BoB,UAAW5B,EAAEkC,GAAGzB,SAASC,IAAMhB,MAIjC,OADgBqD,IAAOH,EAAW,YACpB,EAMDJ,GAuBb,OArBeD,EAAKS,MAAK,CAACd,EAAGe,KAC3B,MAAMC,EAAOX,EAAKU,EAAM,GAElBE,EAAmB/B,EAIzB,OAHeA,EAAWjC,OAAOiE,aAGnBtD,SAASuD,gBAAgB9B,aAC9B0B,IAAQV,EAAK5G,OAAS,EAGtBwH,EAAmBZ,EAAK,GAAGX,UACnB,IAARqB,EAGAC,EACAhB,EAAEN,WAAauB,GAAoBA,EAAmBD,EAAKtB,UAG7DqB,IAAQV,EAAK5G,OAAS,CAAC,GAEnB,EAcf,MAAO,CACL+F,SAZuBN,IACvBpB,EAAE,6BAA6BsD,YAAY,UAAUrC,SAAS,KAAKsC,WAAW,gBAE9E,MAAMC,EAAalB,EAAiBlB,GAAU0B,SAExCW,EAASzB,EAAYW,UAAUK,MAAMd,GAAMA,EAAE1B,aAAa,UAAYgD,IAE5ExD,EAAEyD,GAAQnD,QAAQ,MAAMoD,SAAS,UACjC1D,EAAEyD,GAAQE,KAAK,eAAgB,OAAO,EAM1C,CAEO,SAASC,IACd,MAAMC,EAAuB7D,EAAE,2BACzB8D,EAAc9D,EAAE,4BAA4B,GAC5C+D,EAAajE,SAASwB,eAAe,cACrC0C,EAAQlE,SAASmE,cAAc,YAErC,IAAIC,EAAc,EAIlB,GAHIF,IACFE,EAAcF,EAAMzC,eAEjBsC,EAAqB,KAAOC,EAC/B,OAEF,MAAMK,EAAoBL,EAAYvC,aAWtC,MAAO,CACLG,SAVgC0C,KAChC,GAAIP,EAAsB,CACxB,MAAMQ,EAAmBN,EAAWnC,UAAYmC,EAAWxC,aAC3DsC,EAAqB1C,IAAI,CACvBK,OAAS,gBAAe2C,EAdd,GAc4CD,SAAmBG,QAE7E,GAMJ,CAEO,SAASC,IACd,MAAMC,EAAY1C,IACZ2C,EAAYzC,IACZ0C,EAAS3D,IACT4D,EAAYd,IAuBlB,MAAO,CACLlC,SAtBeA,KACf,MAAMiD,EAAkBxF,OAAOyF,aAAe9E,SAASuD,gBAAgBwB,UAEvE,IACMJ,GACFA,EAAO/C,SAASiD,GAEdJ,GACFA,EAAU7C,SAASiD,GAEjBH,GACFA,EAAU9C,SAASiD,GAEjBD,GACFA,EAAUhD,UAEd,CAAE,MAAOxB,GACP4E,QAAQC,KAAK,kBAAmB7E,EAClC,GAMJ,CAEe,SAAS8E,IAetB,MAAO,CACLC,KAfWA,KACX,IACEtF,IAEkBiE,KAGhBA,IAAkBlC,UAEtB,CAAE,MAAOxB,GACP4E,QAAQC,KAAK,iCAAkC7E,EACjD,GAKAwB,SAAU4C,IAAmB5C,SAEjC,CAEA1B,GAAE,KACA,MAAMkF,EAAOF,IAQb,GAPAE,EAAKD,OAELjF,EAAEb,QAAQc,GAAG,SAAUiF,EAAKxD,UAC5B1B,EAAEb,QAAQc,GAAG,YAAaiF,EAAKxD,UAE/B1B,EAAEb,QAAQc,GAAG,SAAUiF,EAAKxD,UAExB1C,cAAa,CACf,MAAMmG,EAAcrF,SAASmE,cAAc,oBACvCkB,GACFA,EAAYC,UAAUC,IAAI,UAE9B,I","file":"js/unitPageDigital-17beead0fef257d1be7b.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t47: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n \tvar jsonpArray = this[\"trailhead_webpackJsonp\"] = this[\"trailhead_webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([846,0,51]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { UAParser } from \"ua-parser-js\";\n\nconst isDesktop = () => {\n const agent = new UAParser(window.navigator.userAgent);\n const device = agent.getDevice();\n return device.type === undefined ||\n ![\"wearable\", \"mobile\"].includes(device.type);\n};\n\nexport default isDesktop;\n","import sortBy from \"lodash/sortBy\";\nimport isDesktop from 'lib/isDesktop';\n\n/*\n\nThis functionality is highly coupled with the UI,\nof which the markup comes from the content system.\nTrailhead-web has no control over the content,\nwhich is why we have to use some jqueryness.\n\nThis could definitely be improved by updating selectors\nto be more robust and some further decoupling by passing\nDOM as args\n\n*/\n\n// its ugly if anchors go to the exact\n// top of element, so we use an offset (global nav height + 1rem)\nconst SCROLL_OFFSET = 140;\n\nexport function smoothTopicNav() {\n const isIE11 = !!window.MSInputMethodContext && !!document.documentMode;\n\n $(\".topic-list-nav a\").on(\"click\", (e) => {\n if (!isIE11) {\n e.preventDefault();\n }\n\n const link = $(e.target).closest(\"a\")[0];\n const pos = $(link.getAttribute(\"href\")).offset().top - SCROLL_OFFSET;\n\n window.scroll({\n top: pos + 1,\n left: 0,\n behavior: \"smooth\"\n });\n });\n}\n\nexport function stickyBreadcrumb() {\n const $breadcrumbWrapper = $(\".th-sticky-breadcrumb\");\n if ($breadcrumbWrapper.length === 0) {\n return;\n }\n\n const breadcrumb = $breadcrumbWrapper.children()[0];\n const $shim = $('<div class=\"th-sticky-breadcrumb__shim\" />');\n\n $(breadcrumb).css({\n position: \"fixed\",\n width: \"100%\",\n top: document.getElementById(\"global-nav-container\").offsetHeight\n });\n\n $shim.css({\n height: breadcrumb.offsetHeight,\n width: \"100%\"\n });\n\n $($shim).insertAfter($breadcrumbWrapper);\n\n const setPosition = () => {\n let offset = document.getElementById(\"contextnav\").offsetTop + document.getElementById(\"contextnav\").offsetHeight;\n $(breadcrumb).css({\n top: offset\n });\n };\n\n return {\n onScroll: setPosition\n };\n}\n\nexport function stickyTopicNav() {\n const $sidebar = $(\"#unit-sidebar\");\n\n const setSidebarPosition = (position) => {\n $sidebar.css({\n position: \"sticky\",\n top: `${155 + document.getElementById(\"contextnav\").offsetTop}px`\n });\n };\n\n return {\n onScroll: setSidebarPosition\n };\n}\n\nexport function scrollSpyTopicNav() {\n let $navAnchors = $(\".topic-list-nav a\");\n if ($navAnchors.length === 0) {\n return;\n }\n // clean topic nav, because sometimes there are emtpy items\n // ex: /modules/apex_integration_services/units/apex_integration_callouts\n $navAnchors.filter((i, a) => a.innerHTML.trim() === \"\").remove();\n // rebuild list\n $navAnchors = $(\".topic-list-nav a\");\n\n const createAnchorMap = () => {\n const $anchorHrefs = $navAnchors.map((i, a) => a.getAttribute(\"href\")).toArray();\n const $bodyAnchors = $($anchorHrefs.join(\",\"));\n\n const anchorMap = $bodyAnchors.map((i, a) => ({\n selector: `#${a.getAttribute(\"id\")}`,\n offsetTop: $(a).offset().top - SCROLL_OFFSET\n }));\n\n const anchors = sortBy(anchorMap, \"offsetTop\");\n return anchors;\n };\n\n const findActiveAnchor = (position) => {\n // recreate map b/c window can resize and\n // positions shift as images load etc\n const aMap = createAnchorMap();\n\n const anchor = aMap.find((a, idx) => {\n const next = aMap[idx + 1];\n\n const adjustedPosition = position;\n const offset = position + window.innerHeight;\n\n // if at bottom of page return the last\n if (offset >= document.documentElement.offsetHeight) {\n return idx === aMap.length - 1;\n }\n // if before first, return first\n else if (adjustedPosition < aMap[0].offsetTop) {\n return idx === 0;\n }\n // if inbetween return it\n else if (next) {\n return a.offsetTop <= adjustedPosition && adjustedPosition < next.offsetTop;\n }\n // otherwise return the last\n return idx === aMap.length - 1;\n });\n return anchor;\n };\n\n const setActiveAnchor = (position) => {\n $(\".topic-list-nav li.active\").removeClass(\"active\").children(\"a\").removeAttr(\"aria-current\");\n\n const anchorHref = findActiveAnchor(position).selector;\n\n const anchor = $navAnchors.toArray().find((a) => a.getAttribute(\"href\") === anchorHref);\n\n $(anchor).closest(\"li\").addClass(\"active\");\n $(anchor).attr('aria-current', 'true');\n };\n\n return {\n onScroll: setActiveAnchor\n };\n}\n\nexport function scrollSidePanel() {\n const unitContentContainer = $(\".unit-content-container\");\n const unitHeading = $(\".th-content-unit-heading\")[0];\n const contextNav = document.getElementById(\"contextnav\");\n const alert = document.querySelector(\"th-alert\");\n const padding = 10;\n let alertHeight = 0;\n if (alert) {\n alertHeight = alert.offsetHeight;\n }\n if (!unitContentContainer[0] || !unitHeading) {\n return;\n }\n const unitHeadingHeight = unitHeading.offsetHeight;\n\n const setSidePanelContentHeight = () => {\n if (unitContentContainer) {\n const contextNavOffset = contextNav.offsetTop + contextNav.offsetHeight;\n unitContentContainer.css({\n height: `calc(100vh - ${unitHeadingHeight + padding + alertHeight}px - ${contextNavOffset}px)`\n });\n }\n }\n\n return {\n onScroll: setSidePanelContentHeight\n }\n}\n\nexport function unitPageOnScroll() {\n const stickyNav = stickyTopicNav();\n const scrollSpy = scrollSpyTopicNav();\n const sticky = stickyBreadcrumb();\n const sidePanel = scrollSidePanel();\n\n const onScroll = () => {\n const currentPosition = window.pageYOffset || document.documentElement.scrollTop;\n\n try {\n if (sticky) {\n sticky.onScroll(currentPosition);\n }\n if (stickyNav) {\n stickyNav.onScroll(currentPosition);\n }\n if (scrollSpy) {\n scrollSpy.onScroll(currentPosition);\n }\n if (sidePanel) {\n sidePanel.onScroll();\n }\n } catch (e) {\n console.warn(\"topic nav error\", e);\n }\n };\n\n return {\n onScroll\n };\n}\n\nexport default function unitPage() {\n const init = () => {\n try {\n smoothTopicNav();\n // unitPageOnScroll().onScroll();\n const sidePanel = scrollSidePanel();\n\n if(sidePanel) {\n scrollSidePanel().onScroll();\n }\n } catch (e) {\n console.warn(\"could not initialize topic nav\", e);\n }\n };\n\n return {\n init,\n onScroll: unitPageOnScroll().onScroll\n };\n}\n\n$(() => {\n const page = unitPage();\n page.init();\n\n $(window).on(\"scroll\", page.onScroll);\n $(window).on(\"scrollend\", page.onScroll);\n\n $(window).on(\"resize\", page.onScroll);\n\n if (isDesktop()) {\n const unitContent = document.querySelector(\".th-unit-content\");\n if (unitContent) {\n unitContent.classList.add('desktop');\n }\n }\n});\n"],"sourceRoot":""}