{"version":3,"file":"dist/368.js","mappings":"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","sources":["webpack://vaneckweb/../Static/us/js/src/override/expandable-menu/share-menu.js","webpack://vaneckweb/../Static/us/js/src/override/expandable-menu/expandable-nav.js"],"sourcesContent":["export function renderShareMenu() {\r\n //generate the mailto link.\r\n //Get the title -- most probably the H1 of the page.\r\n const pageTitle = document.querySelectorAll(\"h1\")[0]?.textContent ?? \"\";\r\n const URLencodedpageTitle = encodeURI(pageTitle);\r\n //Get the current location\r\n const currentURL = document.location.href;\r\n const mailToLink = `mailto:?subject=Learn%20more%20about%20${URLencodedpageTitle}&body=${currentURL}`;\r\n\r\n //LinkedInLink\r\n const linkedInLink = `https://www.linkedin.com/cws/share?url=${currentURL}`;\r\n //TwitterLink\r\n const twitterLink = `https://twitter.com/intent/tweet?text=${URLencodedpageTitle}&url=${currentURL}`;\r\n const facebookLink = `https://www.facebook.com/sharer.php?u=${currentURL}`;\r\n\r\n return `<div class=\"text-hero__share-widget no-print d-none\">\r\n <div\r\n class=\"share-widget widget dropdown ignore-placement-fix\"\r\n id=\"share-widget-popover-content\"\r\n >\r\n <div\r\n role=\"menu\"\r\n class=\"share-widget__menu widget-menu dropdown-menu focusable-menu widget-menu-left\"\r\n aria-labelledby=\"share-widget-button\"\r\n >\r\n <div class=\"share-widget__menu-inner\">\r\n <ul class=\"mb-0 list-unstyled\">\r\n <li class=\"mb-0 text-util-md share-menu-header\">\r\n <div\r\n class=\"share-widget__action share-Link\">\r\n <span class=\"share-widget__text\">Share Page</span>\r\n <span class=\"sr-only\">\r\n This link opens in a new window.\r\n </span>\r\n </div>\r\n </li>\r\n <li class=\"mb-0 text-util-md\">\r\n <a\r\n id=\"linkedin\"\r\n role=\"menuitem\"\r\n class=\"share-widget__action share-Link\"\r\n href='${linkedInLink}'\r\n rel=\"noreferrer noopener\"\r\n target=\"_blank\"\r\n >\r\n ${getSVG(\"linkedin\")}\r\n <span class=\"share-widget__text\">LinkedIn</span>\r\n <span class=\"sr-only\">\r\n This link opens in a new window.\r\n </span>\r\n </a>\r\n </li>\r\n <li class=\"mb-0 text-util-md\">\r\n <a\r\n id=\"twitter\"\r\n role=\"menuitem\"\r\n data-text=\"${pageTitle}\"\r\n data-author=\"\"\r\n class=\"share-widget__action share-Link\"\r\n href='${twitterLink}'\r\n rel=\"noreferrer noopener\"\r\n target=\"_blank\"\r\n >\r\n ${getSVG(\"twitter\")}\r\n <span class=\"share-widget__text\">X</span>\r\n <span class=\"sr-only\">\r\n This link opens in a new window.\r\n </span>\r\n </a>\r\n </li>\r\n <li class=\"mb-0 text-util-md\">\r\n <a\r\n class=\"share-widget__action share-Link\"\r\n href='${facebookLink}'\r\n id=\"facebook\"\r\n role=\"menuitem\"\r\n rel=\"noreferrer noopener\"\r\n target=\"_blank\"\r\n >\r\n ${getSVG(\"facebook\")}\r\n <span class=\"share-widget__text\">Facebook</span>\r\n <span class=\"sr-only\">\r\n This link opens in a new window.\r\n </span>\r\n </a>\r\n </li>\r\n <li class=\"mb-0 text-util-md\">\r\n <a\r\n class=\"share-widget__action share-Link\"\r\n href='${mailToLink}'\r\n id=\"email-link\"\r\n role=\"menuitem\"\r\n target=\"_blank\"\r\n rel=\"nofollow\"\r\n >\r\n ${getSVG(\"email\")}\r\n <span class=\"share-widget__text\">Email</span>\r\n <span class=\"sr-only\">\r\n This link opens in a new window.\r\n </span>\r\n </a>\r\n </li>\r\n <li class=\"mb-0 text-util-md portfolio-page-d-none\">\r\n <button\r\n class=\"share-widget__action mb-0 text-util-md print\"\r\n onlcick='(e) => window.$(\"#share-widget-button\").popover(\"hide\") && window.print()'\r\n type=\"button\"\r\n role=\"menuitem\"\r\n >\r\n ${getSVG(\"print\")}\r\n <span class=\"share-widget__text\">Print</span>\r\n <span class=\"sr-only\">\r\n This link opens in a new window.\r\n </span>\r\n </button>\r\n </li>\r\n </ul>\r\n </div> \r\n </div>\r\n <span class=\"share-widget__overlay\"></span>\r\n </div>\r\n </div>`; \r\n\r\n}\r\n\r\n/**\r\n * Get's the svg based on the SVG name.\r\n * @param {string} name\r\n * @returns\r\n */\r\nexport function getSVG(name) {\r\n let markup = \"\";\r\n switch (name) {\r\n case \"linkedin\":\r\n markup = `<svg aria-labelledby=\"svg-inline--fa-title-linkedin-sharemenu\" data-prefix=\"fab\" data-icon=\"linkedin-in\" class=\"svg-inline--fa fa-linkedin-in fa-w-16 fa-lg icon\" style=\"width: 25px; height:25px; margin-right: 0.75rem\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\r\n <title id=\"svg-inline--fa-title-linkedin-sharemenu\">LinkedIn</title>\r\n <path d=\"M5.5,1h9A4.49,4.49,0,0,1,19,5.5v9A4.49,4.49,0,0,1,14.5,19h-9A4.49,4.49,0,0,1,1,14.5v-9A4.49,4.49,0,0,1,5.5,1Zm.62,8.1v5.4m3.6,0V11.35A2.25,2.25,0,0,1,12,9.1h0a2.25,2.25,0,0,1,2.25,2.25V14.5M6.12,5.84a.23.23,0,1,0,.22.22.22.22,0,0,0-.22-.22\" fill=\"none\" stroke=\"#17468f\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"></path>\r\n </svg>`;\r\n break;\r\n case \"facebook\":\r\n markup = `<svg aria-labelledby=\"svg-inline--fa-title-facebook-sharemenu\" data-prefix=\"fab\" data-icon=\"-in\" class=\"svg-inline--fa fa--in fa-w-16 fa-lg icon\" style=\"width: 25px; height:25px; margin-right: 0.75rem\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\r\n <title id=\"svg-inline--fa-title-facebook-sharemenu\">Facebook</title>\r\n <path d=\"M5.5,1h9A4.49,4.49,0,0,1,19,5.5v9A4.49,4.49,0,0,1,14.5,19h-9A4.49,4.49,0,0,1,1,14.5v-9A4.49,4.49,0,0,1,5.5,1Zm3.6,9.9h5.4m0-4.5h-.95A2.65,2.65,0,0,0,10.9,9.05V19\" fill=\"none\" stroke=\"#17468f\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"></path>\r\n </svg>`;\r\n break;\r\n case \"twitter\":\r\n markup = `<svg aria-labelledby=\"svg-inline--fa-title-twitter-sharemenu\" data-prefix=\"fab\" data-icon=\"twitter-in\" class=\"svg-inline--fa fa-twitter-in fa-w-16 fa-lg icon\" style=\"width: 25px; height:25px; margin-right: 0.75rem\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -5 53 53\">\r\n <title id=\"svg-inline--fa-title-twitter-sharemenu\">X</title>\r\n <path fill=\"#17468f\" stroke=\"#17468f\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"m36.53,50H13.47C6.04,50,0,43.96,0,36.53V13.48C0,6.05,6.05,0,13.48,0h23.05C43.96,0,50,6.04,50,13.47v23.06c0,7.43-6.04,13.47-13.47,13.47ZM13.48,3.92c-5.27,0-9.56,4.29-9.56,9.56v23.05c0,5.27,4.28,9.55,9.55,9.55h23.06c5.27,0,9.55-4.28,9.55-9.55V13.47c0-5.26-4.28-9.55-9.55-9.55H13.48Z\"/>\r\n <path fill=\"#17468f\" stroke=\"#17468f\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\" d=\"m28.95,22.62l12.09-13.06h-4.75l-9.46,10.22-7.65-10.22H7.99l12.65,16.91-12.94,13.97h4.75l10.31-11.14,8.33,11.14h11.19l-13.33-17.82Zm-11.52-9.57l17.87,23.89h-2.46L14.97,13.05h2.46Z\"/>\r\n </svg>`;\r\n break;\r\n case \"print\":\r\n markup = `<svg aria-labelledby=\"svg-inline--fa-title-print-sharemenu\" data-prefix=\"fab\" data-icon=\"print-in\" class=\"svg-inline--fa fa-print-in fa-w-16 fa-lg icon\" style=\"width: 25px; height:25px; margin-right: 0.75rem\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\r\n <title id=\"svg-inline--fa-title-print-sharemenu\">Print</title>\r\n <path d=\"M5.13,6V2a1,1,0,0,1,1-1h8a1,1,0,0,1,1,1V6m-10,9h-2a2,2,0,0,1-2-2V8a2,2,0,0,1,2-2h14a2,2,0,0,1,2,2v5a2,2,0,0,1-2,2h-2m-10-3.2h10V18a1,1,0,0,1-1,1h-8a1,1,0,0,1-1-1V11.8Zm0-2.8h1\" fill=\"none\" stroke=\"#17468f\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"></path>\r\n </svg>`;\r\n break;\r\n case \"email\":\r\n markup = `<svg aria-labelledby=\"svg-inline--fa-title-email-sharemenu\" data-prefix=\"fab\" data-icon=\"email-in\" class=\"svg-inline--fa fa-email-in fa-w-16 fa-lg icon\" style=\"width: 25px; height:25px; margin-right: 0.75rem\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\">\r\n <title id=\"svg-inline--fa-title-email-sharemenu\">Email</title>\r\n <path d=\"M17,17H3a2,2,0,0,1-2-2V5A2,2,0,0,1,3,3H17a2,2,0,0,1,2,2V15a2,2,0,0,1-2,2ZM16,6l-6,4L4,6\" fill=\"none\" stroke=\"#17468f\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"></path>\r\n </svg>`;\r\n }\r\n\r\n return markup;\r\n}\r\n","/* This is the exandable menu component which is **REWRITTEN** based on original React code, since we cannot reuse TS code here. */\r\n\r\nimport { renderShareMenu } from \"./share-menu\";\r\nimport debounce from \"lodash/debounce\";\r\n\r\nasync function init() {\r\n //get the parent element to render\r\n const parentElement = document.getElementsByTagName(\"ve-expandablemenu\")[0];\r\n\r\n //Do nothing if the utility menu itself is not there.\r\n if (typeof parentElement === \"undefined\") return;\r\n\r\n //update the insights and funds link\r\n await updateLinksForInsightsFunds(parentElement);\r\n\r\n const expandableMenu = renderExpandableMenu({});\r\n parentElement.innerHTML = expandableMenu;\r\n bindEventListeners();\r\n\r\n //to add a custom class to subscribe form submit button to be used on the recaptcha js\r\n $(\".new-subscription-block form .FormSubmitButton\").on(\"click\", function () {\r\n if ($(\".utility-menu-subscribe-button\").length == 0) {\r\n $(this).addClass(\"utility-menu-subscribe-button\");\r\n } \r\n })\r\n}\r\n\r\nlet expanded = false;\r\n\r\n//The base blocks, each of these blocks represents one of the square blocks.\r\nlet squareBlocks = [\r\n {\r\n name: \"Quick Links\",\r\n attributes: {\r\n id: \"expand-close-button\"\r\n },\r\n gtmAttribute: \"sidenav-openclose\",\r\n expandable: true,\r\n expandedLabel: \"Close\",\r\n icon: `/globalassets/home/us/common/icons/explore-more.svg`,\r\n expandedIcon: `/globalassets/home/us/common/icons/close.svg`,\r\n },\r\n {\r\n name: \"Share\",\r\n gtmAttribute: \"sidenav-share\",\r\n attributes: {\r\n id: \"share-widget-button\",\r\n },\r\n icon: `/globalassets/home/us/common/icons/share.svg`,\r\n childItem: renderShareMenu,\r\n },\r\n {\r\n name: \"Insights\",\r\n gtmAttribute: \"sidenav-insights\",\r\n icon: `/globalassets/home/us/common/icons/insights.svg`,\r\n type: \"insights\",\r\n },\r\n {\r\n name: \"Funds\",\r\n gtmAttribute: \"sidenav-funds\",\r\n icon: `/globalassets/home/us/common/icons/funds.svg`,\r\n type: \"funds\",\r\n },\r\n];\r\n\r\nasync function updateLinksForInsightsFunds(expandableMenuTag) {\r\n /**\r\n * Overrides are not implemented but useful later if someone wants to override the link for a specific page.\r\n */\r\n\r\n //get the override insights link if available\r\n let insightsLink = document.getElementsByTagName(\"ve-insightslink\")?.item(0)?.innerHTML ?? \"\";\r\n //get the override funds link if available\r\n let fundsLink = document.getElementsByTagName(\"ve-fundslink\")?.item(0)?.innerHTML ?? \"\";\r\n let insightsLinkTarget = \"_self\";\r\n let fundsLinkTarget = \"_self\";\r\n\r\n try {\r\n //Get PageID\r\n const pageID = expandableMenuTag.dataset.pageid;\r\n const categoryID = expandableMenuTag.dataset.categoryid;\r\n const subscribeContentAreaID = expandableMenuTag.dataset.subscribecontentareaid;\r\n const ticker = document.getElementsByTagName(\"ve-fundticker\")[0]?.innerHTML ?? null;\r\n\r\n const links = await getFundPageLinks({ pageID: pageID, ticker: ticker, categoryID: categoryID }); \r\n \r\n\r\n //override the current links with the new links received.\r\n [\"categoryLink\", \"fundListingLink\"].forEach(linkType => {\r\n if (typeof (links[linkType]) === \"undefined\" || links[linkType] === null || !links[linkType].Text) return null;\r\n if (linkType === \"categoryLink\") {\r\n insightsLink = links[linkType].Link;\r\n insightsLinkTarget = links[linkType].Target;\r\n }\r\n if (linkType === \"fundListingLink\") {\r\n fundsLink = links[linkType].Link;\r\n fundsLinkTarget = links[linkType].Target;\r\n }\r\n }) \r\n }\r\n catch (err) {\r\n console.log(\"Failed getting the fund page links.\");\r\n console.error(err);\r\n }\r\n\r\n //Update the insights link if available.\r\n const insightsBlockIndex = squareBlocks.findIndex((x) => x.type == \"insights\");\r\n if (insightsLink == \"\") {\r\n squareBlocks.splice(insightsBlockIndex, 1); //remove if no link\r\n } else {\r\n squareBlocks[insightsBlockIndex].link = insightsLink;\r\n squareBlocks[insightsBlockIndex].target = insightsLinkTarget;\r\n } \r\n\r\n //Update the fund link if available.\r\n let fundsBlockIndex = squareBlocks.findIndex((x) => x.type == \"funds\");\r\n if (fundsLink == \"\") {\r\n squareBlocks.splice(fundsBlockIndex, 1); //remove if no link\r\n } else {\r\n squareBlocks[fundsBlockIndex].link = fundsLink;\r\n squareBlocks[fundsBlockIndex].target = fundsLinkTarget;\r\n }\r\n}\r\n\r\nfunction renderExpandableMenu() {\r\n const visibleClass = \"\"; //was a react state before, set initial now = not visible;\r\n return `<div class='expandable-nav ${visibleClass}'>\r\n <div class=\"expandable-nav__blocks\">\r\n ${renderBlocks(squareBlocks, expanded)}\r\n </div>\r\n</div>`;\r\n}\r\n\r\n/**\r\n * Takes in an array of blocks representing the intial state and renders it.\r\n * @param {any} blocks\r\n */\r\nfunction renderBlocks(blocks, expanded = true) {\r\n //iterate through blocks and build markup array.\r\n return blocks.reduce((prev, block) => {\r\n //block.expandable = if the block can be used to expand/shrink the menu. i.e. if it is the main block used to toggle between the expanded and contracted states.\r\n const hideClass = block.expandable || expanded ? \"show\" : \"\"; //main block is always shown\r\n const canBeHiddenClass = !block.expandable ? \"can-be-hidden\" : \"\"; //denotes that the block can be hidden in the contracted state\r\n\r\n const text = expanded && block.expandable ? block.expandedLabel : block.name;\r\n const toggleText = !expanded && block.expandable ? block.expandedLabel : block.name;\r\n\r\n const childItem = block.childItem ?? false;\r\n const activeClass = expanded && block.expandable ? \"opened\" : \"\";\r\n\r\n const icon = (expanded && block.expandable ? block.expandedIcon : block.icon) ?? \"\";\r\n const toggleIcon = (!expanded && block.expandable ? block.expandedIcon : block.icon) ?? \"\";\r\n\r\n const childMarkup = typeof childItem === \"function\" ? childItem() : \"\";\r\n\r\n const idAttr = block.attributes?.id ? `id=\"${block.attributes.id}\"` : \"\";\r\n const gtmAttr = block.gtmAttribute ? `data-ve-gtm=\"${block.gtmAttribute}\"` : \"\";\r\n\r\n\r\n const blockInnerMarkup = `<button\r\n type=\"button\"\r\n class=\"expandable-nav__block d-flex flex-column ${activeClass} ${hideClass} ${canBeHiddenClass}\" ${idAttr} ${gtmAttr}>\r\n <div class=\"expandable-nav__block-icon\" ${gtmAttr}><img src='${icon}' ${gtmAttr} data-expandable-src='${\r\n toggleIcon ?? \"\"\r\n }' alt='${text} Icon' width=\"25px\" height=\"25px\" /></div>\r\n <div class=\"expandable-nav__text text-util-sm\" data-expandable-label='${toggleText ?? \"\"}' ${gtmAttr}>${text}</div>\r\n </button>${childMarkup}`;\r\n\r\n if (block.link) {\r\n return prev + `<a href='${block.link}' ${gtmAttr} target='${block.target ?? '_blank'}'>${blockInnerMarkup}</a>`;\r\n }\r\n return prev + blockInnerMarkup;\r\n }, \"\");\r\n}\r\n\r\nfunction bindEventListeners() {\r\n //hide and show the menu when toggle button is clicked.\r\n const toggleBlocks = document.querySelectorAll(\".expandable-nav__block:not(.can-be-hidden)\");\r\n toggleBlocks.forEach((x) => x.addEventListener(\"click\", toggleExpanded));\r\n function toggleExpanded(e) {\r\n\r\n //get all items that can be hidden\r\n const hidables = Array.from(document.getElementsByClassName(\"can-be-hidden\"));\r\n\r\n //toggle the class\r\n hidables.forEach((x) => x.classList.toggle(\"show\"));\r\n\r\n //flip any expandable items's icon and text\r\n //get unhidable items\r\n toggleBlocks.forEach((x) => {\r\n //flip the text, if available.\r\n const textElement = x.querySelectorAll(\".expandable-nav__text\")?.item(0);\r\n if (textElement) {\r\n const label = textElement.dataset.expandableLabel;\r\n if (label && label != \"\") {\r\n textElement.dataset.expandableLabel = textElement.textContent;\r\n textElement.textContent = label;\r\n }\r\n }\r\n\r\n //flip the icon, if available.\r\n const iconElement = x.querySelectorAll(\".expandable-nav__block-icon img\")?.item(0);\r\n if (iconElement) {\r\n const label = iconElement.dataset.expandableSrc;\r\n if (label && label != \"\") {\r\n iconElement.dataset.expandableSrc = iconElement.attributes.getNamedItem(\"src\").value;\r\n iconElement.setAttribute(\"src\", label);\r\n }\r\n }\r\n });\r\n\r\n //set Global State;\r\n expanded = !expanded;\r\n const expandableNavs = document.querySelectorAll(\".expandable-nav\");\r\n expandableNavs.forEach(x => x.classList.toggle(\"not-expanded\"));\r\n }\r\n\r\n //Events for the share widget\r\n const expandCloseButton = document.querySelectorAll(\".expandable-nav #expand-close-button\").item(0);\r\n const shareWidget = document.querySelectorAll(\".expandable-nav #share-widget-button\").item(0);\r\n //To trigger the share popover.\r\n window.$(shareWidget).popover({\r\n content: window.$(\".expandable-nav #share-widget-popover-content\"),\r\n container: window.$(\".expandable-nav .expandable-nav__blocks\"),\r\n title: \"\",\r\n html: true,\r\n placement: \"left\",\r\n trigger: \"click\",\r\n });\r\n\r\n //ref for the parent container for the share popover\r\n const expandableNavRef = document.querySelectorAll(\".expandable-nav .expandable-nav__blocks\").item(0).parentElement;\r\n //show a backdrop when the popover is triggered.\r\n window.$(shareWidget).on(\"show.bs.popover\", () => {\r\n let backdrop = document.createElement(\"div\");\r\n backdrop.id = \"backdrop\";\r\n backdrop.classList.add(\"modal-backdrop\", \"in\", \"show\");\r\n backdrop.style.zIndex = \"10000\";\r\n\r\n //For very old layouts, z-index issues need to be fixed.\r\n if (document.querySelectorAll(\".mainWrapper > .container-m\").length > 0) {\r\n document.querySelectorAll(\".mainWrapper > .container-m\")[0].appendChild(backdrop);\r\n }\r\n else {\r\n document.body.appendChild(backdrop);\r\n }\r\n\r\n\r\n //adjust the z-index of the menu so it is infront of the backdrop.\r\n if (expandableNavRef) {\r\n expandableNavRef.style.zIndex = \"10100\";\r\n shareWidget?.classList.add(\"active\");\r\n }\r\n //hide the popover when the user clicks the backdrop.\r\n backdrop.addEventListener(\"click\", () => window.$(shareWidget).popover(\"hide\"));\r\n expandCloseButton.addEventListener(\"click\", () => window.$(shareWidget).popover(\"hide\"))\r\n });\r\n\r\n //remove the backdrop when the popover is hidden.\r\n $(shareWidget).on(\"hide.bs.popover\", () => {\r\n let backdrop = document.getElementById(\"backdrop\");\r\n backdrop?.remove();\r\n\r\n //adjust the Expandable Nav so the z-index is back.\r\n if (expandableNavRef) {\r\n expandableNavRef.style.zIndex = \"0\";\r\n shareWidget?.classList.remove(\"active\");\r\n }\r\n });\r\n\r\n //print listener\r\n window.$(shareWidget).on(\"shown.bs.popover\", () => {\r\n $(\".share-widget__action.print\").click((e) => window.$(shareWidget).popover(\"hide\") && window.print());\r\n });\r\n\r\n //Scroll listener to only show it below the fold.\r\n const scrollListener = debounce(() => {\r\n const heightOffset = window.innerHeight / 4;\r\n const ScrolledTop = window.pageYOffset || document.documentElement.scrollTop\r\n if (ScrolledTop > heightOffset) {\r\n expandableNavRef.classList.add(\"visible\");\r\n return window.removeEventListener(\"scroll\", scrollListener);\r\n }\r\n }, 100);\r\n\r\n window.addEventListener(\"scroll\", scrollListener);\r\n\r\n scrollListener(); //trigger it once anyway, incase the page is already scrolled down.\r\n\r\n // get height\r\n const floatingNavbar = document.getElementsByClassName('expandable-nav__blocks')[0];\r\n const floatingNavBarHeight = floatingNavbar.clientHeight;\r\n\r\n // fix height\r\n floatingNavbar.style.minHeight = floatingNavBarHeight + \"px\";\r\n}\r\n\r\nasync function getFundPageLinks({pageID, ticker, categoryID}) {\r\n const response = await fetchBlockData({\r\n url: `/main/portfoliopage/getussidelinks/?ticker=${ticker ?? \"\"}&contentId=${pageID}&categoryId=${categoryID ?? \"\"}`,\r\n });\r\n return await response;\r\n}\r\n\r\nasync function fetchBlockData({ url }) {\r\n try {\r\n const request = await fetch(url);\r\n const response = await request.json();\r\n console.log(response);\r\n return response;\r\n } catch (err) {\r\n console.log(`Error while fetching expandable nav data! URL: ${url}`);\r\n throw new Error(err);\r\n }\r\n}\r\n\r\ninit();"],"names":["getSVG","name","markup","expanded","squareBlocks","attributes","id","gtmAttribute","expandable","expandedLabel","icon","expandedIcon","childItem","pageTitle","document","querySelectorAll","textContent","URLencodedpageTitle","encodeURI","currentURL","location","href","mailToLink","twitterLink","facebookLink","type","async","parentElement","getElementsByTagName","expandableMenuTag","insightsLink","item","innerHTML","fundsLink","insightsLinkTarget","fundsLinkTarget","pageID","dataset","pageid","categoryID","categoryid","ticker","subscribecontentareaid","links","_ref","response","_ref2","url","request","fetch","json","console","log","err","Error","fetchBlockData","getFundPageLinks","forEach","linkType","Text","Link","Target","error","insightsBlockIndex","findIndex","x","splice","link","target","fundsBlockIndex","updateLinksForInsightsFunds","expandableMenu","blocks","arguments","length","undefined","reduce","prev","block","hideClass","canBeHiddenClass","text","toggleText","activeClass","toggleIcon","childMarkup","idAttr","gtmAttr","blockInnerMarkup","renderBlocks","toggleBlocks","toggleExpanded","e","Array","from","getElementsByClassName","classList","toggle","textElement","label","expandableLabel","iconElement","expandableSrc","getNamedItem","value","setAttribute","addEventListener","expandCloseButton","shareWidget","window","$","popover","content","container","title","html","placement","trigger","expandableNavRef","on","backdrop","createElement","add","style","zIndex","appendChild","body","getElementById","remove","click","print","scrollListener","debounce","heightOffset","innerHeight","pageYOffset","documentElement","scrollTop","removeEventListener","floatingNavbar","floatingNavBarHeight","clientHeight","minHeight","bindEventListeners","this","addClass","init"],"sourceRoot":""}