{"version":3,"file":"Article.Main.min.js","mappings":"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","sources":["/./Common/Constants.ts","/./Common/CardCarouselHelpers.ts","/./VideoCarouselModal/VideoCarouselModal.ts","/./Common/HashManager.ts","/./Common/AuthenticationTypes.ts","/./Common/TabControl.ts","/./Common/Strings.ts","/./Article/handleAdminPolicies.ts","/./Common/Auth/AuthHelpers.ts","/./Common/AdminPolicies/parseAdminPolicies.ts","/./Common/Helpers.ts","/./SelectableContentOptionsController/SelectableContentOptionsController.ts","/./Article/Article.Main.ts","/./SelectableContentOptionsController/SelectableContentOptionsController.Main.ts"],"sourcesContent":["// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nexport const wedcsConstants = {\r\n\tcomponentGroup: {\r\n\t\toutcomeDrivenHelp: 'ODH',\r\n\t\tcssControl: 'CSSControl',\r\n\t},\r\n\tinteractionType: {\r\n\t\tformSubmit: '2',\r\n\t\tsamePage: '11',\r\n\t\tcompletedFinalStepInSeries: '22',\r\n\t},\r\n\tcoreEventType: {\r\n\t\tpageView: '0',\r\n\t\tanchorLinkClick: '1',\r\n\t\timageLinkClick: '2',\r\n\t\timageAreaClick: '3',\r\n\t\timputClick: '4',\r\n\t\tcustomEvent: '5',\r\n\t\tpageUnload: '11',\r\n\t},\r\n\tendActionAction: {\r\n\t\tgoto: 'Goto',\r\n\t\tsend: 'Send',\r\n\t},\r\n\tendActionOffer: {\r\n\t\tphone: 'PHN',\r\n\t\tcontact: 'Contact',\r\n\t}\r\n};\r\n\r\nexport const eventConstants = {\r\n\tCLICK_EVENT_TYPE: 'click',\r\n\tCOPY_EVENT_TYPE: 'copy',\r\n\tTAB_KEYCODE: 9,\r\n\tENTER_KEYCODE: 13,\r\n\tESC_KEYCODE: 27,\r\n\tDOWN_KEYCODE: 40,\r\n\tUP_KEYCODE: 38,\r\n};\r\n\r\nexport const styleTransitionMs = 10;\r\n\r\nexport const hiddenClass = 'ocHidden';\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n// requires JS and CSS from slick-carousel npm to be loaded on page\r\n\r\nimport { containerSelector, videoAreaSelector } from \"../VideoCarouselModal/VideoCarouselModal\";\r\nimport type { UniversalMediaPlayer } from \"universal-media-player\";\r\n\r\nconst scrollSpeedMs = 400;\r\nconst buttonDisabledClass = 'supCardControlCarouselDisabledButton';\r\nconst carouselClass = 'supCardControlCarousel';\r\nconst prevButtonSelector = '.supCardControlCarouselPrevButton';\r\nconst nextButtonSelector = '.supCardControlCarouselNextButton';\r\nconst allButtonSelector = `${prevButtonSelector}, ${nextButtonSelector}`;\r\n\r\nfunction toggleButtons(container: HTMLDivElement, enable: boolean) {\r\n\t$(container).children(allButtonSelector).toggleClass(buttonDisabledClass, !enable);\r\n}\r\n\r\nexport const cardContainerSelector = '.supCardControlContainer';\r\nexport const cardSelector = '.supCardControlCard';\r\n\r\nexport const heroCardContainerSelector = '.heroCardControlContainer';\r\nexport const heroCardSelector = '.heroCardControlCard';\r\n\r\nexport function initializeCardCarousel(element: HTMLDivElement) {\r\n\t// assumes document direction is equal to content direction\r\n\t// existing BUG: does not work with RTL markets with fallback LTR content\r\n\tconst rtl = element.ownerDocument.dir === 'rtl';\r\n\tconst root = $(element);\r\n\r\n\tconst breakpoints = [\r\n\t\t{\r\n\t\t\tbreakpoint: 900,\r\n\t\t\tsettings: {\r\n\t\t\t\tslidesToShow: 3,\r\n\t\t\t\tslidesToScroll: 1,\r\n\t\t\t},\r\n\t\t},\r\n\t\t{\r\n\t\t\tbreakpoint: 768,\r\n\t\t\tsettings: {\r\n\t\t\t\tslidesToShow: 2,\r\n\t\t\t\tslidesToScroll: 1,\r\n\t\t\t},\r\n\t\t},\r\n\t\t{\r\n\t\t\tbreakpoint: 480, \r\n\t\t\tsettings: {\r\n\t\t\t\tslidesToShow: 1,\r\n\t\t\t\tslidesToScroll: 1,\r\n\t\t\t},\r\n\t\t},\r\n\t];\r\n\r\n\troot.children(cardContainerSelector).eq(0).slick({\r\n\t\taccessibility: true,\r\n\t\tslidesToShow: 4,\r\n\t\tslidesToScroll: 1,\r\n\t\tinfinite: false,\r\n\t\tarrows: true,\r\n\t\tspeed: scrollSpeedMs,\r\n\t\tprevArrow: root.children(prevButtonSelector),\r\n\t\tnextArrow: root.children(nextButtonSelector),\r\n\t\trtl: rtl,\r\n\t\tresponsive: breakpoints\r\n\t}).find(cardSelector).each(setupVideoCarousel);\r\n\r\n\troot.children(heroCardContainerSelector).eq(0).slick({\r\n\t\taccessibility: false,\r\n\t\tinfinite: false,\r\n\t\tarrows: true,\r\n\t\tspeed: scrollSpeedMs,\r\n\t\tprevArrow: root.children(prevButtonSelector),\r\n\t\tnextArrow: root.children(nextButtonSelector),\r\n\t\trtl: rtl\r\n\t});\r\n\r\n\tsetupCarouselNavigationButtons(element);\r\n}\r\n\r\nfunction handleEvent(event: Event) {\r\n\tconst cardContainer = event.currentTarget as HTMLElement;\r\n\r\n\tconst target = event.target as HTMLElement;\r\n\r\n\tconst videoPlayerContainer = cardContainer.querySelector(videoAreaSelector);\r\n\r\n\tif (videoPlayerContainer && !videoPlayerContainer.contains(target)) {\r\n\t\tconst player = videoPlayerContainer.querySelector('universal-media-player');\r\n\t\tif (player) {\r\n\t\t\tvideoPlayerContainer.removeAttribute('hidden');\r\n\t\t\tplayer.play();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction setupVideoCarousel(this: HTMLElement) {\r\n\tthis.addEventListener('click', (event) => {\r\n\t\tif (!isModalOpen()) {\r\n\t\t\thandleEvent(event);\r\n\t\t}\r\n\t});\r\n\tthis.addEventListener('keypress', (event) => {\r\n\t\tif ((event.key === 'Enter' || event.key === ' ') && !isModalOpen()) {\r\n\t\t\thandleEvent(event);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction isModalOpen(): boolean {\r\n\treturn document.querySelector('.modalContainer') !== null;\r\n}\r\n\r\nexport function updateDots(selector: string) {\r\n\t$(selector).on('setPosition', function (_, slick: any) {\r\n\t\tconst dots = slick.$dots;\r\n\t\tslick.options?.slidesToShow < slick.slideCount ? dots.show() : dots.hide();\r\n\t});\r\n} \r\n\r\nexport function assignFocus(carousel: JQuery, pressedButton: HTMLButtonElement) {\r\n\tconst cards = carousel.find(cardSelector);\r\n\tconst isNextButton = pressedButton.classList.contains(nextButtonSelector.substring(1, nextButtonSelector.length));\r\n\tconst activeCard = isNextButton ? cards.filter('.slick-active').last() : cards.filter('.slick-active').first();\r\n\r\n\tif (activeCard.length > 0) {\r\n\t\tactiveCard.focus();\r\n\t}\r\n}\r\n\r\nfunction assignHeroFocus(cards: JQuery) {\r\n\tconst activeCard = cards?.filter('.slick-active')?.first();\r\n\tconst activeElement = activeCard?.find('a, input, button, select')?.first();\r\n\r\n\tif (activeElement.length > 0) {\r\n\t\tactiveElement.focus();\r\n\t}\r\n}\r\n\r\nfunction updateHeroSection(wrapper: HTMLElement, backgroundUrl: string) {\r\n\tif (wrapper) {\r\n\t\twrapper.style.backgroundImage = backgroundUrl === \"\" ? 'none' : `url(${backgroundUrl})`;\r\n\t\twrapper.classList.add('heroCarouselSection');\r\n\t}\r\n}\r\n\r\nfunction toggleTooltip(button: JQuery, event: JQuery.Event, selector: string) {\r\n\tvar tooltipElement = button.find(selector);\r\n\tif (tooltipElement.length) {\r\n\t\tconst isVisible = event.type === 'focus' || event.type === 'mouseenter';\r\n\t\ttooltipElement.css({\r\n\t\t\tvisibility: isVisible ? 'visible' : 'hidden',\r\n\t\t\topacity: isVisible ? '1' : '0'\r\n\t\t});\r\n\t}\r\n}\r\n\r\nfunction setupCarouselNavigationButtons(carousel: HTMLDivElement) {\r\n\tvar slickButtons = $(carousel).find(allButtonSelector);\r\n\t$(slickButtons).on('click', function (event) {\r\n\t\t$(carousel).one('beforeChange', function (this: HTMLDivElement) {\r\n\t\t\ttoggleButtons(this, false);\r\n\t\t}).one('afterChange', function (this: HTMLDivElement) {\r\n\t\t\tif (carousel.classList.contains(carouselClass)) {\r\n\t\t\t\tassignFocus($(this), event.target);\r\n\t\t\t} else {\r\n\t\t\t\tassignHeroFocus($(this)?.find(heroCardSelector));\r\n\t\t\t}\r\n\t\t\ttoggleButtons(this, true);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nexport function showTooltip(selector: string) {\r\n\tconst nextButton = $(nextButtonSelector, $(selector));\r\n\tconst prevButton = $(prevButtonSelector, $(selector));\r\n\r\n\tnextButton.on('focus blur mouseenter mouseleave', function (event) {\r\n\t\ttoggleTooltip(nextButton, event, '.nextButtonTooltip');\r\n\t});\r\n\tprevButton.on('focus blur mouseenter mouseleave', function (event) {\r\n\t\ttoggleTooltip(prevButton, event, '.prevButtonTooltip');\r\n\t});\r\n}\r\n\r\nexport function assignBackgroundImage(elements: HTMLCollectionOf, selector: string) {\r\n\tconst wrapper = document.querySelector(selector)?.closest('.no-wrapper') as HTMLElement;\r\n\tconst initialBackgroundUrl = elements[0].querySelector('.slick-active').getAttribute('backgroundimage');\r\n\r\n\tupdateHeroSection(wrapper, initialBackgroundUrl);\r\n\r\n\t$(elements).on('beforeChange', function (_event: JQuery.Event, slick: any, _currIndex: number, nextIndex: number) {\r\n\t\tupdateHeroSection(wrapper, slick.$slides.eq(nextIndex)?.attr('backgroundimage'));\r\n\t});\r\n}\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nexport const containerSelector = 'div.videoContainer';\r\nexport const videoAreaSelector = 'div.cardControlCarouselVideoArea';\r\n\r\nexport function InitializeCarouselModalEvents() {\r\n\tconst breakpoints: number[] = [900, 768, 480];\r\n\r\n\tbreakpoints.forEach((breakpoint: number) => {\r\n\t\twindow.matchMedia(`(max-width: ${breakpoint}px)`).addEventListener('change', () => {\r\n\t\t\tresetCarouselVideoModal();\r\n\t\t});\r\n\t});\r\n\r\n\t$(window).on('resize', function () {\r\n\t\tresizeModal($('.modalContainer').closest('.supCardControlCard'));\r\n\t});\r\n\r\n\t// Use event delegation to listen click event since slick.js will\r\n\t// re-initialize when number of card number is not default value and\r\n\t// event delegation is able to attach dynamic content for the event\r\n\t// listener.\r\n\t$(document).on('click', '.modalCloseButton, .modalPageBackground', function () {\r\n\t\tresetCarouselVideoModal();\r\n\t});\r\n}\r\n\r\nexport function setCarouselVideoModal(carouselCard: JQuery) {\r\n\r\n\tif (carouselCard.length <= 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst $carousel = carouselCard.closest('div.supCardControlCarousel');\r\n\tconst $modalContainer = carouselCard.find(containerSelector);\r\n\tconst $modalContent = $modalContainer.find('div.videoContent');\r\n\tconst $closeButton = $modalContainer.find('span.modalCloseButton');\r\n\r\n\t$modalContainer.addClass('modalContainer');\r\n\t$modalContainer.find('.modalCloseButton').css('display', 'block');\r\n\t$modalContainer.find('.supCardControlImage').css('display', 'none');\r\n\t$modalContainer.siblings('.modalPageBackground').css('display', 'block');\r\n\t$modalContent.addClass('modalContent');\r\n\t$closeButton.css('display', 'block');\r\n\t$closeButton.attr(\"tabindex\", \"0\");\r\n\r\n\t$('[class^=\"slick-\"]').each(function () {\r\n\t\t$(this).addClass('resetTransform');\r\n\t});\r\n\r\n\t$carousel.find('.supCardControlCarouselPrevButton, .supCardControlCarouselNextButton').not('.slick-hidden').hide();\r\n\t$('body').addClass('disableScroll');\r\n\r\n\t$modalContainer.on('keydown', onModalContainerKeyDown);\r\n\r\n\tresizeModal(carouselCard);\r\n}\r\n\r\nfunction onModalContainerKeyDown(event: JQuery.KeyDownEvent) {\r\n\tconst isEscape: boolean = event.key === 'Escape';\r\n\tconst isEnterOnModalCloseButton: boolean = event.key === 'Enter' && $(event.target).hasClass('modalCloseButton');\r\n\tconst isTab: boolean = event.key === 'Tab';\r\n\tconst isShift: boolean = event.shiftKey;\r\n\r\n\tif (isEscape || isEnterOnModalCloseButton) {\r\n\t\tresetCarouselVideoModal();\r\n\t} else if (isTab && !isShift && $(event.target).hasClass('modalCloseButton')) {\r\n\t\t$(event.target).closest('.slick-active').focus();\r\n\t\tevent.preventDefault();\r\n\t} else if (isTab && isShift && $(event.target).hasClass('slick-active')) {\r\n\t\t$(event.target).find('.modalCloseButton').focus();\r\n\t\tevent.preventDefault();\r\n\t}\r\n}\r\n\r\nfunction resetCarouselVideoModal() {\r\n\tconst $carouselCard = $('.modalContainer').closest('.supCardControlCard');\r\n\tconst $carousel = $carouselCard.closest('div.supCardControlCarousel');\r\n\tconst $modalContainer = $carouselCard.find(containerSelector);\r\n\tconst $closeButton = $modalContainer.find('span.modalCloseButton');\r\n\tconst $modalContent = $modalContainer.find('div.videoContent');\r\n\tconst $cardControlCarouselVideoArea = $modalContent.find(videoAreaSelector);\r\n\r\n\t$modalContainer.removeClass('modalContainer');\r\n\t$modalContainer.find('div.modalCloseButton').css('display', 'none');\r\n\t$modalContainer.find('.supCardControlImage').css('display', 'block');\r\n\t$modalContainer.siblings('.modalPageBackground').css('display', 'none');\r\n\t$modalContent.removeClass('modalContent');\r\n\t$closeButton.removeAttr(\"tabindex\");\r\n\t$closeButton.css('display', 'none');\r\n\r\n\t$cardControlCarouselVideoArea.attr('hidden', 'true');\r\n\r\n\t$('[class^=\"slick-\"]').each(function () {\r\n\t\t$(this).removeClass('resetTransform');\r\n\t});\r\n\r\n\t$carousel.find('.supCardControlCarouselPrevButton, .supCardControlCarouselNextButton').not('.slick-hidden').show();\r\n\r\n\t$modalContainer.css({\r\n\t\t'width': '',\r\n\t\t'height': '',\r\n\t\t'top': '',\r\n\t\t'left': ''\r\n\t});\r\n\r\n\t$modalContent.css({\r\n\t\t'width': '',\r\n\t\t'height': ''\r\n\t});\r\n\r\n\t$('body').removeClass('disableScroll');\r\n\r\n\t$modalContainer.off('keydown', onModalContainerKeyDown);\r\n\r\n\t// Pause video play\r\n\twindow.occe.suspendStateOfContents($modalContent);\r\n}\r\n\r\nfunction resizeModal(carouselCard: JQuery) {\r\n\tif (carouselCard.length <= 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tconst $window = $(window);\r\n\tconst $modalContainer = carouselCard.find(containerSelector);\r\n\tconst $modalContent = $modalContainer.find('div.videoContent');\r\n\tconst ratio = 16 / 9;\r\n\r\n\tif ($window.height() < $window.width() / ratio) {\r\n\t\t$modalContainer.height(\"95vh\");\r\n\t\t$modalContainer.width(($modalContainer.height() - 80) * ratio + 80);\r\n\t} else {\r\n\t\t$modalContainer.width(\"95vw\");\r\n\t\t$modalContainer.height(($modalContainer.width() - 80) / ratio + 80);\r\n\t}\r\n\r\n\tconst top = $window.height() / 2 - $modalContainer.height() / 2;\r\n\tconst left = $window.width() / 2 - $modalContainer.width() / 2;\r\n\r\n\t$modalContainer.css('top', top + 'px');\r\n\t$modalContainer.css('left', left + 'px');\r\n\r\n\t$modalContent.width($modalContainer.width() - 80);\r\n\t$modalContent.height($modalContainer.height() - 80);\r\n}\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nfunction isUpperCaseMatch(left: string, right: string) {\r\n\treturn left.toUpperCase() === right.toUpperCase();\r\n}\r\n\r\nexport default class HashManager {\r\n\tprivate readonly callbacks = new Map();\r\n\tprivate hashValues: Array = [];\r\n\r\n\tsetCallback(this: HashManager, key: string, callback: Function) {\r\n\t\tthis.callbacks.set(key.toUpperCase(), callback);\r\n\t}\r\n\r\n\tappend(this: HashManager, value: string) {\r\n\t\t// exact match with existing values, return\r\n\t\tif (this.hashValues.findIndex(v => isUpperCaseMatch(value, v)) !== -1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst tuple = value.split('=');\r\n\r\n\t\t// not a tuple, add\r\n\t\tif (tuple.length === 1) {\r\n\t\t\tthis.hashValues.push(value);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// tuple, find existing value with matching first tuple element\r\n\t\t\tconst index = this.hashValues.findIndex(v => {\r\n\t\t\t\tconst t = v.split('=');\r\n\t\t\t\tif (t.length > 1 && isUpperCaseMatch(t[0], tuple[0])) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// update or add\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tthis.hashValues[index] = value;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.hashValues.push(value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.callbacks.get(value.toUpperCase())?.();\r\n\t}\r\n\r\n\treplaceAll(this: HashManager, location: Location) {\r\n\t\tconst hash = location.hash.substring(1);\r\n\r\n\t\tif (hash.length === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst replacementValues = hash.split('&');\r\n\r\n\t\t// append on existing (will trigger callbacks for updated items)\r\n\t\tfor (const value of replacementValues) {\r\n\t\t\tthis.append(value);\r\n\t\t}\r\n\r\n\t\t// set existing to new set (removes old items that don't have replacements and preserves new ordering)\r\n\t\tthis.hashValues = replacementValues;\r\n\t}\r\n\r\n\ttoHashString(this: HashManager) {\r\n\t\treturn this.hashValues.join('&');\r\n\t}\r\n}\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nexport enum DataBoundary {\r\n\tNone = 'None',\r\n\tEU = 'EU'\r\n}\r\n\r\nexport enum UserAgeGroup {\r\n\tUndefined,\r\n\tMinorWithoutParentalConsent,\r\n\tMinorWithParentalConsent,\r\n\tAdult,\r\n\tNotAdult,\r\n\tMinorNoParentalConsentRequired,\r\n}\r\n\r\nexport interface MeControlAccount {\r\n\ttype: string,\r\n\ttenantId: string,\r\n\tmemberName: string,\r\n\tdisplayName: string,\r\n\tfirstName: string,\r\n\tlastName: string,\r\n\tauthenticatedState: string\r\n}\r\n\r\nexport interface SilentSignInProperties {\r\n\taccount: MeControlAccount,\r\n\tuserIsChild?: boolean,\r\n\tlocalTelemetryId: string,\r\n\ttelemetryAuthType: string,\r\n\tpuid: string,\r\n\tauthType: string,\r\n\tdataBoundary: string,\r\n\tageGroup?: UserAgeGroup\r\n}\r\n\r\nexport type MsShellObj = {\r\n\tmeControlOptions: { currentAccount: MeControlAccount }\r\n}\r\n\r\nexport interface IMsCommonShell {\r\n\tload: (msShellCurrentAccount: MsShellObj) => Promise;\r\n\tmeControlOptions: () => { currentAccount: MeControlAccount };\r\n}\r\n\r\n// Value Guidance Types\r\nexport interface ISignInCompletionObj {\r\n\teventType: string,\r\n\tauthType?: string,\r\n\tdataBoundary?: DataBoundary,\r\n\tmeControlAccount?: MeControlAccount\r\n}\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nimport { eventConstants, hiddenClass } from './Constants';\r\nimport { cardContainerSelector } from './CardCarouselHelpers';\r\nimport type { ApplicationInsights, Behavior } from '@microsoft/1ds-analytics-web-js';\r\n\r\ndeclare global {\r\n\tinterface Window {\r\n\t\tanalytics?: ApplicationInsights,\r\n\t\toneDS: {\r\n\t\t\tBehavior: typeof Behavior,\r\n\t\t},\r\n\t}\r\n}\r\n\r\ntype HashManager = {\r\n\taddHashElementCallback: (value: string, callback: Function) => void,\r\n\tappendHashElement: (value: string) => void,\r\n}\r\n\r\nexport type TabConfigLog = {\r\n\tname: string,\r\n\tactivetab: string,\r\n\tdefaulttab: string,\r\n\tistargeted: string,\r\n}\r\n\r\nexport const headerContainerActiveTabAttribute = 'ms.activetab';\r\nexport const activeTabClass = 'supTabControlHeaderActive';\r\nexport const tabContentPositionAttribute = 'referenced-content-position';\r\n\r\nfunction logAction(tabConfigPageTags: Record, tab: HTMLAnchorElement, eventType: string) {\r\n\tconst analytics = window.analytics;\r\n\r\n\tif (analytics) {\r\n\t\tanalytics.capturePageAction(null, {\r\n\t\t\tbehavior: window.oneDS.Behavior.TAB,\r\n\t\t\tpageTags: {\r\n\t\t\t\ttabconfig: tabConfigPageTags,\r\n\t\t\t},\r\n\t\t\tactionType: eventType === eventConstants.CLICK_EVENT_TYPE ? 'CL' : undefined,\r\n\t\t\tcontentTags: {\r\n\t\t\t\tareaName: 'tabs',\r\n\t\t\t\tcontentName: tab.text,\r\n\t\t\t\tslotNumber: tab.getAttribute(tabContentPositionAttribute),\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport default class TabControl {\r\n\tprivate readonly hashManager: HashManager;\r\n\tprivate readonly suspendContentFunction: (content: HTMLDivElement) => void;\r\n\tprivate readonly logPageTagFactory: () => Record;\r\n\r\n\tprivate readonly id: string;\r\n\tprivate readonly hasTargeting: boolean;\r\n\r\n\tprivate readonly headerContainer: HTMLDivElement;\r\n\tprivate readonly headerTabs: NodeListOf;\r\n\r\n\tprivate readonly contents: NodeListOf;\r\n\r\n\tconstructor(\r\n\t\thashManager: HashManager,\r\n\t\tsuspendContentFunction: (content: HTMLDivElement) => void,\r\n\t\tlogPageTagFactory: () => Record,\r\n\t\tcontainer: HTMLDivElement) {\r\n\r\n\t\tthis.hashManager = hashManager;\r\n\t\tthis.suspendContentFunction = suspendContentFunction;\r\n\t\tthis.logPageTagFactory = logPageTagFactory;\r\n\r\n\t\tthis.id = container.id;\r\n\t\tthis.hasTargeting =\r\n\t\t\tcontainer.getAttribute('tab-control-with-os-targeting') === 'true' ||\r\n\t\t\tcontainer.getAttribute('tab-control-with-office-version-targeting') === 'true' ||\r\n\t\t\tcontainer.getAttribute('tab-control-with-windows-version-targeting') === 'true';\r\n\r\n\t\tthis.headerContainer = container.querySelector('div.supTabControlHeader');\r\n\t\tthis.headerTabs = this.headerContainer.querySelectorAll('a.supTabControlTabHeader');\r\n\t\tthis.contents = container.querySelectorAll('div.supTabControlTabContent');\r\n\r\n\t\t// NodeList.forEach is not supported in IE, use normal array loop\r\n\t\tfor (let i = 0; i < this.headerTabs.length; i++) {\r\n\t\t\tconst tab = this.headerTabs[i];\r\n\t\t\tconst tabHash = tab.getAttribute('tab-hash');\r\n\r\n\t\t\ttab.addEventListener('click', e => {\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\t// update hash in URL (triggers tab switch)\r\n\t\t\t\tthis.hashManager.appendHashElement(tabHash);\r\n\r\n\t\t\t\tlogAction(this.logPageTagFactory(), tab, e.type);\r\n\t\t\t});\r\n\r\n\t\t\tthis.hashManager.addHashElementCallback(tabHash, () => {\r\n\t\t\t\tthis.selectTab(tab);\r\n\r\n\t\t\t\t// Refresh card carousel components within the tab control's tab content.\r\n\t\t\t\t$(`.supTabControlTabContent ${cardContainerSelector}`).slick?.('refresh');\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tgetTabConfigLogObject(this: TabControl): TabConfigLog {\r\n\t\treturn {\r\n\t\t\tname: this.headerContainer.querySelector(`a.${activeTabClass}`).text,\r\n\t\t\tactivetab: this.headerContainer.getAttribute(headerContainerActiveTabAttribute),\r\n\t\t\tdefaulttab: this.headerContainer.getAttribute('ms.defaulttab'),\r\n\t\t\tistargeted: `${this.id},${this.hasTargeting}`,\r\n\t\t}\r\n\t}\r\n\r\n\tprivate selectTab(this: TabControl, selectedTab: HTMLAnchorElement) {\r\n\t\t// XSL position() is 1-indexed, decrement to 0-indexed\r\n\t\tconst selectedIndex = parseInt(selectedTab.getAttribute(tabContentPositionAttribute), 10) - 1;\r\n\r\n\t\t// NodeList.forEach is not supported in IE, use normal array loop\r\n\t\tfor (let i = 0; i < this.headerTabs.length; i++) {\r\n\t\t\tconst tab = this.headerTabs[i];\r\n\r\n\t\t\tif (tab !== selectedTab) {\r\n\t\t\t\ttab.setAttribute('aria-selected', 'false');\r\n\t\t\t\ttab.classList.remove(activeTabClass);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// NodeList.forEach is not supported in IE, use normal array loop\r\n\t\tfor (let i = 0; i < this.contents.length; i++) {\r\n\t\t\tif (i !== selectedIndex) {\r\n\t\t\t\tconst content = this.contents[i];\r\n\t\t\t\tthis.suspendContentFunction(content);\r\n\t\t\t\tcontent.classList.add(hiddenClass);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tselectedTab.setAttribute('aria-selected', 'true');\r\n\t\tselectedTab.classList.add(activeTabClass);\r\n\t\tthis.contents.item(selectedIndex).classList.remove(hiddenClass);\r\n\r\n\t\t// update ms.activetab attribute\r\n\t\tconst targetingValue = selectedTab.getAttribute('targeted-office-version')\r\n\t\t\t?? selectedTab.getAttribute('targeted-os')\r\n\t\t\t?? selectedIndex + 1;\r\n\r\n\t\tthis.headerContainer.setAttribute(headerContainerActiveTabAttribute, `${this.id},${targetingValue}`);\r\n\t}\r\n}\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\n// Silent Sign In\r\nexport const eventNameSilentSignInComplete = \"silentSignInComplete\";\r\n\r\n// Popup Sign In\r\nexport const eventNamePopupSignInComplete = \"popupSignInComplete\";\r\n\r\n// Value Guidance strings\r\nexport const eventNameVgSignInSuccess = \"vg.signin.success\";\r\nexport const eventNameVgSignInFailed = \"vg.signin.failed\";\r\n\r\nexport const vgComponentNames = {\r\n\tvgHero: 'vg-hero',\r\n\tvgExplore: 'vg-explore'\r\n}\r\n\r\nexport const HvcComponentType = {\r\n\t[vgComponentNames.vgHero]: 'ValueGuidanceV2HvcHero',\r\n\t[vgComponentNames.vgExplore]: 'ValueGuidanceV2HvcExplore'\r\n}\r\n\r\nexport const TenantAdminPoliciesElementId = \"TAP__SETTINGS\";\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\nimport { parseAdminPolicies } from '../Common/AdminPolicies/parseAdminPolicies';\r\nimport { addSilentAuthEventListener } from \"../Common/Auth/AuthHelpers\";\r\nimport { isAadUser } from '../Common/Helpers';\r\nimport { SilentSignInProperties } from '../Common/AuthenticationTypes';\r\n\r\nexport function handleAdminPolicies(): void {\r\n\t//TODO: utilize promise from window.manageSilentSignIn\r\n\taddSilentAuthEventListener((props: CustomEvent) => {\r\n\r\n\t\tif (props.detail instanceof Error) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst authProperties = props.detail as SilentSignInProperties;\r\n\t\tconst aadPrivacySubtext = document.getElementById(\"aadPrivacySubtext\");\r\n\r\n\t\tif (!isAadUser(authProperties.authType)) {\r\n\t\t\taadPrivacySubtext?.remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// only apply policies for AAD users\r\n\t\tconst policies = parseAdminPolicies();\r\n\r\n\t\tconst feedbackContainer = document.getElementById(\"supFeedbackWrapper\");\r\n\t\tif (!policies.AllowFeedback) {\r\n\t\t\tfeedbackContainer?.remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If policy enables feedback for AAD users, display disclaimer text\r\n\t\tif (feedbackContainer !== null) {\r\n\t\t\taadPrivacySubtext?.classList?.remove(\"ocHidden\");\r\n\t\t}\r\n\t});\r\n}\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nimport { SilentSignInProperties } from \"../AuthenticationTypes\";\r\nimport { getMetaTagValue } from \"../MetaTagHelpers\";\r\nimport { eventNameSilentSignInComplete } from \"../Strings\";\r\n\r\n//todo: move some of the auth helpers from Helpers.ts to here\r\n\r\n/**\r\n * Checks if the user is authenticated by looking at the \r\n * current me control account, as well as the meta tag values for auth type and tenant id\r\n * @returns true if the user is authenticated, false otherwise\r\n */\r\nexport function isUserAuthenticated(): boolean {\r\n return (!!getMetaTagValue(\"awa-authtype\") || !!getMetaTagValue(\"awa-tenantid\") || !!window.msCommonShell?.meControlOptions()?.currentAccount);\r\n}\r\n\r\n/**\r\n * Checks to see if the silent auth event will fire by looking\r\n * at the silentSigninProgress global variable first and then\r\n * checking to see if the silent auth iframe is on the page\r\n * @returns true if the silent auth event will fire, false otherwise\r\n */\r\nexport function willSilentAuthEventFire(): boolean {\r\n if (typeof window.silentSigninProgress !== 'undefined') {\r\n return window.silentSigninProgress;\r\n }\r\n\r\n return !!document.getElementById(\"iframeOP\");\r\n}\r\n\r\n/**\r\n * Adds an event listener for the silent auth event and takes an option timeout parameter\r\n * for how long to wait for the event to fire. If the event does not fire within the timeout period \r\n * the listener will be removed and the callback will be called when the timeout expires.\r\n * @param listener the callback to be called when the silent auth event fires or the timeout expires\r\n * @param timeout the amount of time (in milliseconds) to wait for the silent auth event to fire\r\n */\r\nexport function addSilentAuthEventListener(listener: (event: CustomEvent) => any, timeout?: number, options?: boolean | AddEventListenerOptions): void {\r\n \r\n if(!timeout){\r\n window.addEventListener(eventNameSilentSignInComplete, listener, options);\r\n return;\r\n }\r\n \r\n //handles silent auth event by removing the timeout and calling the listener callback\r\n function silentAuthEventCallbackWrapper(event: CustomEvent){\r\n clearTimeout(timeoutHandler);\r\n listener(event);\r\n }\r\n\r\n //handles the timeout by removing the silent auth listener and calling the listener callback with error\r\n function timeoutCallback(){\r\n window.removeEventListener(eventNameSilentSignInComplete, silentAuthEventCallbackWrapper);\r\n listener(new CustomEvent(eventNameSilentSignInComplete, { detail: new Error(`Silent auth did not complete before allowed timeout of ${timeout}`) }));\r\n }\r\n\r\n let timeoutHandler = setTimeout(timeoutCallback, timeout);\r\n window.addEventListener(eventNameSilentSignInComplete, silentAuthEventCallbackWrapper, options);\r\n}","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nimport { AdminPolicy } from './types';\r\nimport { TenantAdminPoliciesElementId } from '../Strings';\r\n\r\n\r\nexport function parseAdminPolicies(element?: HTMLElement): AdminPolicy {\r\n\treturn parseAdminPoliciesInternal(element ?? document.getElementById(TenantAdminPoliciesElementId));\r\n}\r\n\r\n\r\nfunction parseAdminPoliciesInternal(element: HTMLElement): AdminPolicy {\r\n\tconst jsonPayload = element?.dataset.settings;\r\n\r\n\tif (jsonPayload) {\r\n\t\treturn JSON.parse(jsonPayload) as AdminPolicy;\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\nimport { MeControlAccount, DataBoundary } from '../Common/AuthenticationTypes';\r\n\r\n/*\r\n * @param {string} authType - authentication type from user auth object\r\n * @returns {boolean} - true if user is authenticated, false otherwise\r\n */\r\nexport const isUserAuthenticated = (authType: string): boolean => (authType && (authType != '') ? authType.toLowerCase() != 'none' : false);\r\n\r\n/*\r\n * @returns {MeControlAccount} - returns current user account information if available\r\n */\r\nexport const getCurrUser = (): MeControlAccount => (window?.msCommonShell?.meControlOptions()?.currentAccount);\r\n\r\n/*\r\n * @param {string} authType - authentication type from user auth object\r\n * @returns {boolean} - true if user is AAD user, false otherwise\r\n */\r\nexport const isAadUser = (authType): boolean => !!authType && (authType.toLowerCase() === \"aad\");\r\n\r\n/*\r\n * @param {window} window - window to close\r\n */\r\nexport const closeWindow = (window: Window | undefined | null): void => window?.close();\r\n\r\n/*\r\n * Returns valid data source\r\n * @param {string} dataBoundary - data boundary from user auth object\r\n */\r\nexport const parseDataBoundary = (dataBoundary: string): DataBoundary => (dataBoundary === DataBoundary.EU ? DataBoundary.EU : DataBoundary.None);\r\n\r\n/*\r\n * @param {string} url - URL to open in pop up window\r\n * @param {string} width - width of the window\r\n * @param {string} height - height of the window\r\n * @returns {Window} - returns the window created\r\n */\r\nexport const createPopUpWindow = (url: string, width: number, height: number) : Window | null => {\r\n\tif (window) {\r\n\t\tconst wLeft = window.screenLeft ? window.screenLeft : window.screenX;\r\n\t\tconst wTop = window.screenTop ? window.screenTop : window.screenY;\r\n\r\n\t\tconst left = wLeft + (window.innerWidth / 2) - (width / 2);\r\n\t\tconst top = wTop + (window.innerHeight / 2) - (height / 2);\r\n\t\treturn window.open(url, '_blank', `popup=yes, width=${width}, height=${height}, top=${top}, left=${left}`);\r\n\t}\r\n\treturn null;\r\n}\r\n\r\n/*\r\n * @param {MeControlAccount} userAccount - sets MeControlAccount in msCommonShell\r\n * @param {window} win - window to set MeControlAccount in\r\n */\r\nexport const SetMeControlAccount = (userAccount: MeControlAccount, window: any): void => {\r\n\t// ToDo: pattri, #7729785 set type for window\r\n\twindow?.MeControl?.API?.setActiveAccount(userAccount);\r\n}\r\n","/**\r\n * Class to control the seletable (dropdown) content options.\r\n */\r\nexport class SelectableContentOptionsController {\r\n\tprivate container: HTMLElement;\r\n\tprivate selectElement: HTMLSelectElement | null;\r\n\tprivate static selectElementSelector: string = '.selectable-content-options__element';\r\n\tprivate optionsContainer: HTMLElement | null;\r\n\tprivate static optionsContainerSelector: string = '.selectable-content-options__options-container';\r\n\tprivate optionContents: HTMLCollectionOf;\r\n\tprivate static optionContentsClass: string = 'selectable-content-options__option-content';\r\n\r\n\t/**\r\n\t * Creates an instance of DropdownContentController.\r\n\t * @param container - The container element for the dropdown.\r\n\t */\r\n\tconstructor(container: HTMLDivElement) {\r\n\t\tthis.container = container;\r\n\t\tthis.selectElement = this.getSelectElement();\r\n\t\tthis.optionsContainer = this.getOptionsContainer();\r\n\t\tthis.optionContents = this.getOptionContents();\r\n\r\n\t\tif (!this.selectElement || !this.optionsContainer || !this.optionContents) {\r\n\t\t\tthrow new Error(\"SelectableContentOptionsController: Missing required elements\");\r\n\t\t}\r\n\r\n\t\tthis.init();\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes the dropdown content controller.\r\n\t */\r\n\tprivate init (this: SelectableContentOptionsController) {\r\n\t\tthis.selectElement.addEventListener('change', () => this.displaySelectedContent());\r\n\t\tthis.displaySelectedContent();\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the select element within the container.\r\n\t * @returns The select element or null if not found.\r\n\t */\r\n\tprivate getSelectElement(this: SelectableContentOptionsController): HTMLSelectElement | null {\r\n\t\treturn this.container.querySelector(SelectableContentOptionsController.selectElementSelector);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the options container element within the container.\r\n\t * @returns The options container element or null if not found.\r\n\t */\r\n\tprivate getOptionsContainer(this: SelectableContentOptionsController): HTMLDivElement | null {\r\n\t\treturn this.container.querySelector(SelectableContentOptionsController.optionsContainerSelector);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the option contents within the options container.\r\n\t * @returns A collection of option content elements.\r\n\t */\r\n\tprivate getOptionContents(this: SelectableContentOptionsController): HTMLCollectionOf {\r\n\t\treturn this.optionsContainer?.getElementsByClassName(SelectableContentOptionsController.optionContentsClass);\r\n\t}\r\n\r\n\t/**\r\n\t * Displays the content corresponding to the selected option.\r\n\t */\r\n\tprivate displaySelectedContent(this: SelectableContentOptionsController): void {\r\n\t\tconst selectedValue = this.getSelectedValue();\r\n\t\tif (!selectedValue) return;\r\n\r\n\t\tthis.hideAllOptionContents();\r\n\t\tthis.showSelectedOptionContent(selectedValue);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the value of the selected option.\r\n\t * @returns The value of the selected option or null if no select element.\r\n\t */\r\n\tprivate getSelectedValue(this: SelectableContentOptionsController): string | null {\r\n\t\treturn this.selectElement ? this.selectElement.value : null;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides all option content elements.\r\n\t */\r\n\tprivate hideAllOptionContents(this: SelectableContentOptionsController): void {\r\n\t\tArray.from(this.optionContents).forEach((div) => {\r\n\t\t\tif (div instanceof HTMLElement) {\r\n\t\t\t\tdiv.classList.add('ocHidden');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Shows the content corresponding to the selected option.\r\n\t * @param selectedValue - The value of the selected option.\r\n\t */\r\n\tprivate showSelectedOptionContent(this: SelectableContentOptionsController, selectedValue: string): void {\r\n\t\tif (!this.optionsContainer) return;\r\n\r\n\t\tconst selectedDiv = this.optionsContainer.querySelector(`#${selectedValue}`);\r\n\t\tif (selectedDiv && selectedDiv instanceof HTMLElement) {\r\n\t\t\tselectedDiv.classList.remove('ocHidden');\r\n\t\t} else {\r\n\t\t\tconsole.warn(`No content found for the selected option: ${selectedValue}`);\r\n\t\t}\r\n\t}\r\n}\r\n","// Copyright (C) Microsoft Corporation. All rights reserved.\r\n\r\nimport type Support from '../Support/Support';\r\nimport { eventConstants, hiddenClass } from '../Common/Constants';\r\nimport { initializeCardCarousel, assignBackgroundImage, heroCardSelector, updateDots, showTooltip } from '../Common/CardCarouselHelpers';\r\nimport HashManager from '../Common/HashManager';\r\nimport TabControl from '../Common/TabControl';\r\nimport type { TabConfigLog } from '../Common/TabControl';\r\nimport { handleAdminPolicies } from './handleAdminPolicies';\r\nimport { initializeSelectableContentOptions } from '../SelectableContentOptionsController/SelectableContentOptionsController.Main';\r\n\r\ntype ArticleExtendedSupport = Support & {\r\n\tControls: {\r\n\t\tCardControl?: {\r\n\t\t\tinitializeSlickCarousels: () => void,\r\n\t\t\tassignBackgroundImage: () => void,\r\n\t\t\tupdateDots: (selector: string) => void,\r\n\t\t\tshowToolTip: (selector: string) => void,\r\n\t\t},\r\n\t},\r\n\tHashManager?: {\r\n\t\taddHashElementCallback: (value: string, callback: Function) => void,\r\n\t\tappendHashElement: (value: string) => void,\r\n\t},\r\n};\r\n\r\n$(() => {\r\n\tdocument.getElementById('ocpFallbackNotificationBarCloseButtonLink')?.addEventListener(eventConstants.CLICK_EVENT_TYPE, _ => {\r\n\t\tdocument.getElementById('ocpFallbackNotificationBar').classList.add(hiddenClass);\r\n\t});\r\n\r\n\tconst occe: ArticleExtendedSupport = window.occe;\r\n\r\n\tfunction removeIfEmpty(_: number, e: HTMLElement) {\r\n\t\tconst element = $(e);\r\n\r\n\t\tif ($.trim(element.text()).length === 0 && element.find('img').length === 0) {\r\n\t\t\telement.remove();\r\n\t\t}\r\n\t}\r\n\r\n\tconst bandedTables: JQuery = $('table.banded');\r\n\r\n\t// remove empty tables\r\n\tbandedTables.each(removeIfEmpty);\r\n\r\n\t// remove empty rows\r\n\tbandedTables.find('tr').each(removeIfEmpty);\r\n\r\n\t// make adjacent rows have alternate colors in a banded table have to be flipped\r\n\t// when the header cells are inside a \r\n\tbandedTables.filter((_, element) => !!element.tHead).addClass('flipColors');\r\n\r\n\tconst hashManager = new HashManager();\r\n\r\n\tocce.HashManager = {\r\n\t\taddHashElementCallback: function (value, callback) {\r\n\t\t\thashManager.setCallback(value, callback);\r\n\t\t},\r\n\t\tappendHashElement: function (value) {\r\n\t\t\thashManager.append(value);\r\n\r\n\t\t\twindow.history.pushState(undefined, undefined, `#${hashManager.toHashString()}`);\r\n\t\t},\r\n\t};\r\n\r\n\t$(window).on('hashchange', () => hashManager.replaceAll(window.location));\r\n\r\n\tconst carouselClass = 'supCardControlCarousel';\r\n\tconst heroCarouselClass = 'heroCardControlCarousel';\r\n\r\n\tocce.Controls.CardControl = {\r\n\t\tinitializeSlickCarousels: function () {\r\n\t\t\tconst elements = document.querySelectorAll(`.${carouselClass}, .${heroCarouselClass}`);\r\n\r\n\t\t\telements.forEach(element => {\r\n\t\t\t\tinitializeCardCarousel(element as HTMLDivElement);\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tassignBackgroundImage: function () {\r\n\t\t\tconst heroElements = >document.getElementsByClassName(heroCarouselClass);\r\n\t\t\tassignBackgroundImage(heroElements, heroCardSelector);\r\n\t\t},\r\n\t\tupdateDots: updateDots,\r\n\t\tshowToolTip: showTooltip,\r\n\t};\r\n\r\n\t$(`.${heroCarouselClass}`).on('init', function (this: HTMLElement) {\r\n\t\tocce.Controls.CardControl.assignBackgroundImage();\r\n\t\tocce.Controls.CardControl.showToolTip(`.${heroCarouselClass}`);\r\n\t});\r\n\r\n\tocce.Controls.CardControl.initializeSlickCarousels();\r\n\r\n\t// Initialize dropdowns once the DOM is fully loaded\r\n\tinitializeSelectableContentOptions();\r\n\r\n\tconst tabControls = new Array();\r\n\r\n\t// assumes class is on div\r\n\tconst tabControlElements = >document.getElementsByClassName('supTabControl');\r\n\r\n\tfunction suspendTabContent(element: HTMLElement) {\r\n\t\tocce.suspendStateOfContents($(element));\r\n\t}\r\n\r\n\tfunction generateTabControlPageTags(): Record {\r\n\t\tconst tags: Record = {};\r\n\r\n\t\ttabControls.forEach((tabControl: TabControl, index: number) => {\r\n\t\t\ttags[`tabcontrol${index}`] = tabControl.getTabConfigLogObject();\r\n\t\t});\r\n\r\n\t\treturn tags;\r\n\t}\r\n\r\n\tfor (let i = 0; i < tabControlElements.length; i++) {\r\n\t\tconst tabControl = new TabControl(occe.HashManager, suspendTabContent, generateTabControlPageTags, tabControlElements[i]);\r\n\t\ttabControls.push(tabControl);\r\n\t}\r\n\r\n\t// process existing hash callbacks\r\n\thashManager.replaceAll(window.location);\r\n});\r\n\r\n$(window).on('load', () => {\r\n\t//handle tenant admin policies\r\n\thandleAdminPolicies();\r\n\r\n\t// reduce high-res img width\r\n\tconst highResolutionImages = document.querySelectorAll(\".ocpHighResContent img\");\r\n\r\n\t// NodeList.forEach is not supported in IE, use normal array loop\r\n\tfor (let i = 0; i < highResolutionImages.length; i++) {\r\n\t\tconst image = highResolutionImages[i];\r\n\r\n\t\timage.width = image.naturalWidth / 2;\r\n\t}\r\n});\r\n","// Copyright (C) Microsoft. All rights reserved.\r\n\r\nimport { SelectableContentOptionsController } from './SelectableContentOptionsController';\r\n\r\n/**\r\n * Initializes all selectable content options controllers on the page.\r\n * @returns void\r\n */\r\nexport function initializeSelectableContentOptions(): void {\r\n\tconst containers = document.querySelectorAll('.selectable-content-options__content-container');\r\n\tcontainers.forEach((container: HTMLDivElement) => {\r\n\t\tnew SelectableContentOptionsController(container);\r\n\t});\r\n}\r\n"],"names":["eventConstants","hiddenClass","prevButtonSelector","nextButtonSelector","allButtonSelector","toggleButtons","container","enable","$","children","toggleClass","cardContainerSelector","cardSelector","heroCardSelector","handleEvent","event","cardContainer","currentTarget","target","videoPlayerContainer","querySelector","contains","player","removeAttribute","play","setupVideoCarousel","this","addEventListener","isModalOpen","key","document","updateDots","selector","on","_","slick","dots","$dots","options","slidesToShow","slideCount","show","hide","updateHeroSection","wrapper","backgroundUrl","style","backgroundImage","classList","add","toggleTooltip","button","tooltipElement","find","length","isVisible","type","css","visibility","opacity","showTooltip","nextButton","prevButton","isUpperCaseMatch","left","right","toUpperCase","UserAgeGroup","DataBoundary","callbacks","Map","hashValues","setCallback","callback","set","append","value","findIndex","v","tuple","split","push","index","t","get","replaceAll","location","hash","substring","replacementValues","toHashString","join","headerContainerActiveTabAttribute","activeTabClass","tabContentPositionAttribute","hashManager","suspendContentFunction","logPageTagFactory","id","hasTargeting","getAttribute","headerContainer","headerTabs","querySelectorAll","contents","i","tab","tabHash","e","stopPropagation","appendHashElement","tabConfigPageTags","eventType","analytics","window","capturePageAction","behavior","oneDS","Behavior","TAB","pageTags","tabconfig","actionType","undefined","contentTags","areaName","contentName","text","slotNumber","logAction","addHashElementCallback","selectTab","getTabConfigLogObject","name","activetab","defaulttab","istargeted","selectedTab","selectedIndex","parseInt","setAttribute","remove","content","item","targetingValue","eventNameSilentSignInComplete","handleAdminPolicies","listener","props","element","detail","Error","authProperties","aadPrivacySubtext","getElementById","authType","toLowerCase","policies","jsonPayload","dataset","settings","JSON","parse","parseAdminPoliciesInternal","feedbackContainer","AllowFeedback","selectElement","getSelectElement","optionsContainer","getOptionsContainer","optionContents","getOptionContents","init","displaySelectedContent","SelectableContentOptionsController","selectElementSelector","optionsContainerSelector","getElementsByClassName","optionContentsClass","selectedValue","getSelectedValue","hideAllOptionContents","showSelectedOptionContent","Array","from","forEach","div","HTMLElement","selectedDiv","console","warn","occe","removeIfEmpty","trim","bandedTables","each","filter","tHead","addClass","HashManager","history","pushState","heroCarouselClass","Controls","CardControl","initializeSlickCarousels","carousel","slickButtons","rtl","ownerDocument","dir","root","eq","accessibility","slidesToScroll","infinite","arrows","speed","prevArrow","nextArrow","responsive","breakpoint","one","pressedButton","cards","activeCard","last","first","focus","assignFocus","activeElement","assignHeroFocus","initializeCardCarousel","assignBackgroundImage","elements","closest","initialBackgroundUrl","_event","_currIndex","nextIndex","$slides","attr","showToolTip","tabControls","tabControlElements","suspendTabContent","suspendStateOfContents","generateTabControlPageTags","tags","tabControl","highResolutionImages","image","width","naturalWidth"],"sourceRoot":""}