CINXE.COM
Microsoft Release Planner · Microsoft Release Planner
<!DOCTYPE html> <html lang="en-US" data-lang="en-US" crm-lang="en-US" dir="ltr" crm-lcid="1033" same-site-mode="None"> <head> <meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/javascript" > </script> <title> Microsoft Release Planner · Microsoft Release Planner </title> <script src="/_portal/6052aef1-9ed7-ed11-a7c7-0022482e7599/Resources/ResourceManager?lang=en-US"></script> <script type="text/javascript"> // Refresh all powerBI Iframes on Login in one Iframe window.addEventListener('message', function (event) { if (event && event.data && event.data == 'refreshPowerBI') { $("iframe.powerbi").each(function () { this.src = this.src; }); } }); // Fix for incorrect viewport width setting in IE 10 on Windows Phone 8. if (navigator.userAgent.match(/IEMobile\/10\.0/)) { var msViewportStyle = document.createElement("style"); msViewportStyle.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")); document.getElementsByTagName("head")[0].appendChild(msViewportStyle); } </script> <link href="/bootstrap.min.css?1691390313000" rel="stylesheet" /> <link href="https://content.powerapps.com/resource/powerappsportal/dist/font-awesome.bundle-3d8a58a48f.css" onerror="javascript: var target = event.target; var link = document.createElement('link'); link.crossOrigin = target.crossOrigin; link.href = '/dist/font-awesome.bundle-3d8a58a48f.css'; link.rel = 'stylesheet'; target.insertAdjacentElement('afterend',link);" rel="stylesheet" /> <link href="https://content.powerapps.com/resource/powerappsportal/dist/preform.bundle-6ce0674302.css" onerror="javascript: var target = event.target; var link = document.createElement('link'); link.crossOrigin = target.crossOrigin; link.href = '/dist/preform.bundle-6ce0674302.css'; link.rel = 'stylesheet'; target.insertAdjacentElement('afterend',link);" rel="stylesheet" /> <link href="/footerltrstyles.css?1723140020000" rel="stylesheet" /> <link href="/bapistaticuhfltr.css?1723140019000" rel="stylesheet" /> <link href="/bootstrap.ideas.min.css?1691390313000" rel="stylesheet" /> <link href="/theme.css?1691390316000" rel="stylesheet" /> <link href="/insider.css?1691390314000" rel="stylesheet" /> <meta name="keywords" content="Microsoft, Dynamics 365, Microsoft Power Platform, Release plans, Roadmap, New features, New releases, Dynamics 365 Marketing, Dynamics 365 Sales, Dynamics 365 Viva Sales, Dynamics 365 Customer Voice, Dynamics 365 Customer Service, Dynamics 365 Field Service, Dynamics 365 Supply Chain Management, Dynamics 365 Intelligent Order Management, Dynamics 365 Project Operations, Dynamics 365 Finance and Operations cross-app, Dynamics 365 Human Resources, Dynamics 365 Commerce, Dynamics 365 Fraud Protection, Dynamics 365 Business Central, Dynamics 365 Customer Insights, Microsoft Supply Chain Center, Connected Spaces, Guides, Microsoft Power Apps, Microsoft Governance and administration, Microsoft Pro development, Microsoft Power Pages, Microsoft ISV experiences, Microsoft Dataverse, Microsoft Power Automate, Microsoft AI Builder, Microsoft Power Virtual Agents, Microsoft Power BI, Microsoft Data integration, release notes, release schedule, features, release, wave, d365"> <meta name="description" content="Find out what's new in Dynamics 365 (including Sales, Service, Marketing, Finance, Supply Chain Management, Human Resources, Business Central, and Commerce apps) and Power Platform (including Power BI, Power Apps, Power Automate, and Power Virtual Agents)"> <meta name="summary" content="Find out what's new in Dynamics 365 and Power Platform"> <meta name="og:title" content="Release plans for Dynamics 365 and Power Platform"> <meta name="og:description" content="Find out what's new in Dynamics 365 (including Sales, Service, Marketing, Finance, Supply Chain Management, Human Resources, Business Central, and Commerce apps) and Power Platform (including Power BI, Power Apps, Power Automate, and Power Virtual Agents)"> <meta name="og:type" content="website"> <meta name="og:url" content="https://releaseplans.microsoft.com/"> <link href="https://content.powerapps.com/resource/powerappsportal/dist/pwa-style.bundle-2739c60227.css" onerror="javascript: var target = event.target; var link = document.createElement('link'); link.crossOrigin = target.crossOrigin; link.href = '/dist/pwa-style.bundle-2739c60227.css'; link.rel = 'stylesheet'; target.insertAdjacentElement('afterend',link);" rel="stylesheet" /> </head> <body data-sitemap-state="/" data-dateformat="M/d/yyyy" data-timeformat="h:mm tt" data-datetimeformat="M/d/yyyy h:mm tt" data-app-path="/" data-ckeditor-basepath="/js/BaseHtmlContentDesigner/Libs/msdyncrm_/libs/ckeditor/" data-case-deflection-url="/_services/search/6052aef1-9ed7-ed11-a7c7-0022482e7599"> <link href="https://content.powerapps.com/resource/powerappsportal/dist/pcf-style.bundle-2659c6f064.css" onerror="javascript: var target = event.target; var link = document.createElement('link'); link.crossOrigin = target.crossOrigin; link.href = '/dist/pcf-style.bundle-2659c6f064.css'; link.rel = 'stylesheet'; target.insertAdjacentElement('afterend',link);" rel="stylesheet" /> <div id="offlineNotificationBar" style="display: none;"> <img alt="web" id="web" onerror="javascript: var target = event.target; var img = document.createElement('img'); img.src = '/css/images/web.png'; img.alt = 'web'; img.id = 'web' ; target.insertAdjacentElement('afterend',img); target.remove();" src="https://content.powerapps.com/resource/powerappsportal/img/web.png" /> <div id="message">You’re offline. This is a read only version of the page.</div> <div id="close" onclick="this.parentElement.style.display='none';"><img alt="close" onerror="javascript: var target = event.target; var img = document.createElement('img'); img.src = '/css/images/close.png'; img.alt = 'close'; img.id = '' ; target.insertAdjacentElement('afterend',img); target.remove();" src="https://content.powerapps.com/resource/powerappsportal/img/close.png" /></div> </div> <script type="text/javascript"> window.DisableCkEditor = window.DisableCkEditor || {}; DisableCkEditor.Value = 'False'; </script> <script type="text/javascript"> var enableOmniChannelWidgetWithSiteCopilot = 'False'; if (enableOmniChannelWidgetWithSiteCopilot === "True" || enableOmniChannelWidgetWithSiteCopilot === "true") { const authUrl = window.location.origin + "/_services/auth/portalusertoken"; const fetchWithRetries = async (url, options, retries) => { try { const authResponse = await fetch(url, options); const token = await authResponse.text(); sessionStorage['c2Token'] = token; } catch (err) { if (retries === 1) throw err; return await fetchWithRetries(url, options, retries - 1); } }; fetchWithRetries(authUrl, { method: "POST" }, 4); } </script> <script type="text/javascript"> var isPvaBotAuthenticated = sessionStorage['isPvaBotAuthenticated']; var isPortalUserLoggedIn = 'False'; if ((isPvaBotAuthenticated != null || isPvaBotAuthenticated != undefined) && isPvaBotAuthenticated != isPortalUserLoggedIn) { sessionStorage['triggerPvaBotSignOut'] = true; sessionStorage.removeItem('c2Token'); sessionStorage.removeItem('directLinetoken'); sessionStorage.removeItem('conversation_Id'); } sessionStorage['isPvaBotAuthenticated'] = isPortalUserLoggedIn; </script> <script type="text/javascript"> window["Microsoft"] = window["Microsoft"] || {}; window["Microsoft"].Dynamic365 = { Portal: { User: { userName: '', contactId: '' }, version: '9.6.9.39', type: 'CDSStarterPortal', id: '8ac48c2d-5492-4e58-99a3-e62fc82cd68a', geo: 'NAM', tenant: '72f988bf-86f1-41af-91ab-2d7cd011db47', correlationId: 'c0a9eeed-7f6f-4c6f-bd2b-09716315b55f', orgEnvironmentId: 'f55e79bd-d8cb-4fbb-9be2-2cefd8cb3b83', portalProductionOrTrialType: 'Production', isTelemetryEnabled: 'True', InstrumentationSettings: { instrumentationKey: '197418c5cb8c4426b201f9db2e87b914-87887378-2790-49b0-9295-51f43b6204b1-7172', collectorEndpoint: 'https://us-mobile.events.data.microsoft.com/OneCollector/1.0/' }, timerProfileForBatching: 'NEAR_REAL_TIME' } } // Mark request not cacheable if Dynamics365PortalAnalytics cookie is being refreshed by the server or if the cookie in request header is invalid // For client side telemetry intializing Dynamics365PortalAnalytics cookie object window["Microsoft"].Dynamic365.Portal.dynamics365PortalAnalytics = '39iDi5dyzMW0QXwMHs8whb_uW4_It8Q5FJvDMkaGB08hRQlGvssCuXXiHm8LbSl3TpzIPAdRvfCBqvoFSKuWx0htvM3HxSgZmipspVGdBXK5yVshhN6peIU3tWezFTmcz8hNygu-rFa7GZEcXSUrXg2'; // CodeQL [SM00430] False Positive: only alphanumeric chars allowed, for non-alphanumeric char it will return INVALID_CHARACTERS_IN_COOKIE </script> <script type="text/javascript"> </script> <style> body { display:none; } @media only screen and (min-width: 1025px){ .mscom-header #bapi-header .bapi-top-bar--viewport-mooncat{ max-width: calc(1618px + 7%); padding-left: calc(5% - 15px); } } #bapi-header{ z-index: 1050!important; } </style> <div id="cookie-banner"></div> <div class='mscom-header' bgcolor='#FFFFFF' style='height:auto;'> <a class="bapi-skip-to-main" href="#accordion-group" tabindex="0" style="z-index:88889"> Skip to main content</a> <nav id="bapi-header" class="bapi-header--default" data-sticky-header="true" data-me-control="true"> <div class="bapi-top-bar bapi-top-bar--viewport-mooncat"> <div class="bapi-top-bar__logo"> <a href="https://microsoft.com" class="logo" aria-label="Navigate to microsoft.com" target="_blank" data-bi-name="Nav_MicrosoftLogo" data-bi-area="topNav"> <img src="https://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE1Mu3b?ver=5c31" alt="" role="presentation" /> </a> </div> <div class="bapi-top-bar__separator" aria-hidden="true" role="presentation"> <div class="separator"></div> </div> <div class="bapi-top-bar__brand"> <a href="/" class="brand-text" aria-label="Navigate to Release Plans home page" data-bi-name="Nav_Dynamics365Home" data-bi-area="topNav"> Release Planner </a> </div> <div class="bapi-top-bar__menu bapi-top-bar__menu--justify-flex-end"> <ul class="bapi-menu bapi-dropdown bapi-hide-until-large" data-menu-left="true" role="menubar"> <li class="is-dropdown-submenu-parent opens-right" role="presentation"> <button type="button" role="menuitem" class="bapi-menu-toggle-button" aria-expanded="false" aria-controls="products" data-bi-name="Nav_Products" data-bi-area="topNav"> Products </button> <ul class="bapi-menu bapi-submenu is-dropdown-submenu" data-multi-column="5" id="products" role="menu"> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="customer-data-platform-submenu" data-bi-name="Nav_Products_CustomerDataPlatform" data-bi-area="topNav"> Customer data platform </button> <ul class="bapi-menu bapi-submenu" id="customer-data-platform-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Customer data platform" href="https://dynamics.microsoft.com/en-us/ai/customer-insights/" data-bi-name="Nav_Products_CustomerDataPlatform_CustomerInsights" data-bi-area="topNav"> Customer Insights </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Customer data platform" href="https://dynamics.microsoft.com/en-us/customer-voice/overview/" data-bi-name="Nav_Products_CustomerDataPlatform_CustomerVoice" data-bi-area="topNav"> Customer Voice </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="sales-submenu" data-bi-name="Nav_Products_Sales" data-bi-area="topNav"> Sales </button> <ul class="bapi-menu bapi-submenu" id="sales-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Sales" href="https://dynamics.microsoft.com/en-us/sales/overview/" data-bi-name="Nav_Products_Sales_SalesOverview" data-bi-area="topNav">Sales</a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Sales" href="https://dynamics.microsoft.com/en-us/sales/relationship-sales/" data-bi-name="Nav_Products_Sales_RelationshipSales" data-bi-area="topNav"> Microsoft Relationship Sales </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="customer-service-submenu" data-bi-name="Nav_Products_CustomerService" data-bi-area="topNav"> Service </button> <ul class="bapi-menu bapi-submenu" id="customer-service-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Service" href="https://dynamics.microsoft.com/en-us/customer-service/overview/" data-bi-name="Nav_Products_CustomerService_Overview" data-bi-area="topNav"> Customer Service </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Service" href="https://dynamics.microsoft.com/en-us/field-service/overview/" data-bi-name="Nav_Products_CustomerService_FieldService" data-bi-area="topNav"> Field Service </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Service" href="https://dynamics.microsoft.com/en-us/mixed-reality/remote-assist/" data-bi-name="Nav_Products_CustomerService_RemoteAssist" data-bi-area="topNav"> Remote Assist </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="marketing-submenu" data-bi-name="Nav_Products_Marketing" data-bi-area="topNav"> Marketing </button> <ul class="bapi-menu bapi-submenu" id="marketing-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Marketing" href="https://dynamics.microsoft.com/en-us/marketing/overview/" data-bi-name="Nav_Products_Marketing_MarketingOverview" data-bi-area="topNav"> Marketing </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="commerce-submenu" data-bi-name="Nav_Products_Commerce" data-bi-area="topNav"> Commerce </button> <ul class="bapi-menu bapi-submenu" id="commerce-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Commerce" href="https://dynamics.microsoft.com/en-us/commerce/overview/" data-bi-name="Nav_Products_Commerce_Commerce" data-bi-area="topNav"> Commerce </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Commerce" href="https://dynamics.microsoft.com/en-us/ai/fraud-protection/" data-bi-name="Nav_Products_Commerce_FraudProtection" data-bi-area="topNav"> Fraud Protection </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="scm-submenu" data-bi-name="Nav_Products_SupplyChain" data-bi-area="topNav"> Supply chain </button> <ul class="bapi-menu bapi-submenu" id="scm-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Supply chain" href="https://dynamics.microsoft.com/en-us/supply-chain-management/overview/" data-bi-name="Nav_Products_SupplyChain_SupplyChainManagement" data-bi-area="topNav"> Supply Chain Management </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Supply chain" href="https://dynamics.microsoft.com/en-us/mixed-reality/guides/" data-bi-name="Nav_Products_SupplyChain_Guides" data-bi-area="topNav"> Guides </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Supply chain" href="https://dynamics.microsoft.com/en-us/Intelligent-order-management/" data-bi-name="Nav_Products_SupplyChain_IntelligentOrderManagement" data-bi-area="topNav"> Intelligent Order Management </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="small-and-medium-business-submenu" data-bi-name="Nav_Products_SmallAndMediumBusiness" data-bi-area="topNav"> Small and medium business </button> <ul class="bapi-menu bapi-submenu" id="small-and-medium-business-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Small and medium business" href="https://dynamics.microsoft.com/en-us/business-central/overview/" data-bi-name="Nav_Products_SmallAndMediumBusiness_BusinessCentral" data-bi-area="topNav"> Business Central </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Small and medium business" href="https://dynamics.microsoft.com/en-us/customer-service/professional/" data-bi-name="Nav_Products_SmallAndMediumBusiness_CustomerService" data-bi-area="topNav"> Customer Service </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="human-resource-submenu" data-bi-name="Nav_Products_HR" data-bi-area="topNav"> HR </button> <ul class="bapi-menu bapi-submenu" id="human-resource-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="HR" href="https://dynamics.microsoft.com/en-us/human-resources/overview/" data-bi-name="Nav_Products_HR_HumanResources" data-bi-area="topNav"> Human Resources </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="finance-submenu" data-bi-name="Nav_Products_Finance" data-bi-area="topNav"> Finance </button> <ul class="bapi-menu bapi-submenu" id="finance-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Finance" href="https://dynamics.microsoft.com/en-us/finance/overview/" data-bi-name="Nav_Products_Finance_Overview" data-bi-area="topNav"> Finance </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="project-submenu" data-bi-name="Nav_Products_ProjectManagement"> Project management </button> <ul class="bapi-menu bapi-submenu" id="project-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Project management" href="https://dynamics.microsoft.com/en-us/project-operations/overview/" data-bi-name="Nav_Products_ProjectManagement_ProjectOperations" data-bi-area="topNav"> Project Operations </a> </li> </ul> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="presentation"> <button type="button" role="menuitem" class="bapi-menu-toggle-button" aria-expanded="false" aria-controls="solutions-submenu" data-bi-name="Nav_Solutions" data-bi-area="topNav"> Solutions </button> <ul class="bapi-menu bapi-submenu is-dropdown-submenu" role="menu" data-multi-column="2" id="solutions-submenu"> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="business-needs-solutions-submenu" data-bi-name="Nav_Solutions_ByNeed" data-bi-area="topNav"> By need </button> <ul class="bapi-menu bapi-submenu" id="business-needs-solutions-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="By need" href="https://dynamics.microsoft.com/en-us/connected-sales-marketing-solution/" data-bi-name="Nav_Solutions_ByNeed_MarketingAndSales" data-bi-area="topNav"> Marketing & Sales </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="By need" href="https://dynamics.microsoft.com/en-us/service-solution/" data-bi-name="Nav_Solutions_ByNeed_Service" data-bi-area="topNav"> Service </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="By need" href="https://dynamics.microsoft.com/en-us/digital-supply-chain/" data-bi-name="Nav_Solutions_ByNeed_SupplyChain" data-bi-area="topNav"> Supply chain </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="By need" href="https://dynamics.microsoft.com/en-us/financial-and-operating-models/" data-bi-name="Nav_Solutions_ByNeed_Finance" data-bi-area="topNav"> Finance </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="featured-industries-solutions-submenu" data-bi-name="Nav_Solutions_ByIndustry" data-bi-area="topNav"> By industry </button> <ul class="bapi-menu bapi-submenu" id="featured-industries-solutions-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="By industry" href="https://dynamics.microsoft.com/en-us/industry/manufacturing/" data-bi-name="Nav_Solutions_ByIndustry_Manufacturing" data-bi-area="topNav"> Manufacturing </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="By industry" href="https://dynamics.microsoft.com/en-us/industry/financial-services/" data-bi-name="Nav_Solutions_ByIndustry_FinancialServices" data-bi-area="topNav"> Financial services </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="By industry" href="https://dynamics.microsoft.com/en-us/industry/health/" data-bi-name="Nav_Solutions_ByIndustry_Healthcare" data-bi-area="topNav"> Healthcare </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="By industry" href="https://dynamics.microsoft.com/en-us/industry/retail/" data-bi-name="Nav_Solutions_ByIndustry_Retail" data-bi-area="topNav"> Retail </a> </li> </ul> </li> </ul> </li> <li class="is-menu-link" role="presentation"> <a role="menuitem" aria-label="Microsoft Dynamics 365 Pricing" href="https://dynamics.microsoft.com/en-us/pricing/" data-bi-name="Nav_Pricing" data-bi-area="topNav"> Pricing </a> </li> <li class="is-dropdown-submenu-parent opens-right" role="presentation"> <button type="button" role="menuitem" class="bapi-menu-toggle-button" aria-expanded="false" aria-controls="partners_submenu" data-bi-name="Nav_Partners" data-bi-area="topNav"> Partners </button> <ul class="bapi-menu bapi-submenu is-dropdown-submenu" id="partners_submenu" role="menu"> <li role="presentation"> <a role="menuitem" href="https://dynamics.microsoft.com/en-us/partners/find-a-partner/" data-bi-name="Nav_Partner_FindAPartner" data-bi-area="topNav"> Find a partner </a> </li> <li role="presentation"> <a role="menuitem" href="https://dynamics.microsoft.com/en-us/partners/become-a-partner/" data-bi-name="Nav_Partner_BecomeAPartner" data-bi-area="topNav"> Become a partner </a> </li> <li role="presentation"> <a role="menuitem" href="https://dynamicspartners.transform.microsoft.com" target="_blank" data-bi-name="Nav_Partners_PartnerResources" data-bi-area="topNav"> Partner resources </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="presentation"> <button type="button" role="menuitem" class="bapi-menu-toggle-button" aria-expanded="false" aria-controls="platform-submenu" data-bi-name="Nav_PowerPlatform" data-bi-area="topNav"> Platform </button> <ul class="bapi-menu bapi-submenu is-dropdown-submenu" id="platform-submenu" role="menu"> <li role="presentation"> <a role="menuitem" href="https://powerplatform.microsoft.com/" target="_blank" data-bi-name="Nav_PowerPlatform_PowerPlatform" data-bi-area="topNav">Power Platform</a> </li> <li role="presentation"> <a role="menuitem" href="https://powerplatform.microsoft.com/common-data-model/" target="_blank" data-bi-name="Nav_PowerPlatform_CommonDataModel" data-bi-area="topNav">Common Data Model</a> </li> <li role="presentation"> <a role="menuitem" href="https://powerplatform.microsoft.com/dataverse/" target="_blank" data-bi-name="Nav_PowerPlatform_Dataverse" data-bi-area="topNav">Dataverse</a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="presentation"> <button type="button" role="menuitem" class="bapi-menu-toggle-button" aria-expanded="false" aria-controls="resources-submenu" data-bi-name="Nav_Resources" data-bi-area="topNav"> Resources </button> <ul class="bapi-menu bapi-submenu is-dropdown-submenu" role="menu" data-multi-column="2" id="resources-submenu"> <li class="is-dropdown-submenu-parent opens-right nested-submenu--column-x2" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="get-started-resources-submenu" data-bi-name="Nav_Resources" data-bi-area="topNav"> Get started with Dynamics 365 </button> <ul class="bapi-menu bapi-submenu bapi-menu--x2" id="get-started-resources-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="What is Dynamics 365" href="https://dynamics.microsoft.com/en-us/what-is-dynamics365/" data-bi-name="Nav_Resources_WhatIsDynamics365" data-bi-area="topNav"> What is Dynamics 365 </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Guided Tour" href="https://dynamics.microsoft.com/en-us/guidedtour/dynamics/landing/" data-bi-name="Nav_Resources_GuidedTour" data-bi-area="topNav"> Guided Tour </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Free Product Trials" href="https://dynamics.microsoft.com/en-us/dynamics-365-free-trial/" data-bi-name="Nav_Resources_FreeProductTrails" data-bi-area="topNav"> Free Product Trials </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Documentation" href="https://learn.microsoft.com/dynamics365/" target="_blank" data-bi-name="Nav_Resources_Documentation" data-bi-area="topNav"> Documentation </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="AI" href="https://go.microsoft.com/fwlink/?LinkId=2226975&clcid=0x409" data-bi-name="Nav_Resources_AI" data-bi-area="topNav"> AI </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Roadmap" href="https://dynamics.microsoft.com/en-us/roadmap/overview/" data-bi-name="Nav_Resources_Roadmap" data-bi-area="topNav"> Roadmap </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Analyst Reports" href="https://dynamics.microsoft.com/en-us/#industry-expert-and-analyst-recognition" data-bi-name="Nav_Resources_AnalystAwards" data-bi-area="topNav"> Analyst Reports </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Product Updates" href="https://dynamics.microsoft.com/en-us/business-applications/product-updates/" data-bi-name="Nav_Resources_ProductUpdates" data-bi-area="topNav"> Product Updates </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Customer Stories" href="https://dynamics.microsoft.com/en-us/customer-stories/" data-bi-name="Nav_Resources_CustomerStories" data-bi-area="topNav"> Customer Stories </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Onboarding and Implementation" href="https://dynamics.microsoft.com/en-us/customer-success/" data-bi-name="Nav_Resources_OnboardingAndTrainingHub" data-bi-area="topNav"> Onboarding and Implementation </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Training and Certification" href="https://go.microsoft.com/fwlink/?LinkId=2024498&clcid=0x409" target="_blank" data-bi-name="Nav_Resources_Training" data-bi-area="topNav"> Training and Certification </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="AppSource" href="https://appsource.microsoft.com/" target="_blank" data-bi-name="Nav_Resources_AppSource" data-bi-area="topNav"> AppSource </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Business Application Topics" href="https://dynamics.microsoft.com/en-us/business-application-topics/" data-bi-name="Nav_Resources_BusinessApplicationTopics" data-bi-area="topNav"> Business Application Topics </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Blog" href="https://go.microsoft.com/fwlink/?LinkId=2057752&clcid=0x409" target="_blank" data-bi-name="Nav_Resources_Blog" data-bi-area="topNav"> Blog </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Geographical Availability" href="https://dynamics.microsoft.com/en-us/availability-reports/" data-bi-name="Nav_Resources_GeographicAvailability" data-bi-area="topNav"> Geographical Availability </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Events" href="https://dynamics.microsoft.com/en-us/events/" data-bi-name="Nav_Resources_Events" data-bi-area="topNav"> Events </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Trusted Cloud" href="https://dynamics.microsoft.com/en-us/trusted-cloud/" data-bi-name="Nav_Resources_TrustedCloud" data-bi-area="topNav"> Trusted Cloud </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Cloud Migration" href="https://dynamics.microsoft.com/en-us/cloud-migration/" data-bi-name="Nav_Resources_CloudMigration" data-bi-area="topNav"> Cloud Migration </a> </li> </ul> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="presentation"> <button type="button" role="menuitem" class="bapi-menu-toggle-button" aria-expanded="false" aria-controls="support-submenu" data-bi-name="Nav_Support" data-bi-area="topNav"> Support </button> <ul class="bapi-menu bapi-submenu is-dropdown-submenu flip-dropdown" role="menu" data-multi-column="3" id="support-submenu"> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="sales-support-submenu" data-bi-name="Nav_Support_SalesSupport" data-bi-area="topNav"> Sales </button> <ul class="bapi-menu bapi-submenu" id="sales-support-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Sales" href="/en-us/contact-us/" target="_self" data-bi-name="Nav_Support_SalesSupport_ContactUs" data-bi-area="topNav"> Contact us </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="tech-support-submenu" data-bi-name="Nav_Support_Technical" data-bi-area="topNav"> Technical </button> <ul class="bapi-menu bapi-submenu" id="tech-support-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Technical" href="https://docs.microsoft.com/dynamics365/" target="_blank" data-bi-name="Nav_Support_Technical_Documentation" data-bi-area="topNav"> Documentation </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Technical" href="https://dynamics.microsoft.com/en-us/support/" data-bi-name="Nav_Support_Technical_TechnicalSupport" data-bi-area="topNav"> Technical support </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Technical" href="https://dynamics.microsoft.com/en-us/fasttrack/" data-bi-name="Nav_Support_Technical_FastTrack" data-bi-area="topNav"> FastTrack </a> </li> </ul> </li> <li class="is-dropdown-submenu-parent opens-right" role="menuitem"> <button type="button" class="bapi-menu-toggle-button" aria-controls="customer-source-support-submenu" data-bi-name="Nav_Support_PreviousVersions" data-bi-area="topNav"> Previous versions </button> <ul class="bapi-menu bapi-submenu" id="customer-source-support-submenu" role="menu"> <li role="presentation"> <a role="menuitem" aria-roledescription="Previous versions" href="https://dynamics.microsoft.com/en-us/ax/" data-bi-name="Nav_Support_PreviousVersions_AX" data-bi-area="topNav"> Dynamics AX </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Previous versions" href="https://dynamics.microsoft.com/en-us/crm/" data-bi-name="Nav_Support_PreviousVersions_CRM" data-bi-area="topNav"> Dynamics CRM </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Previous versions" href="https://dynamics.microsoft.com/en-us/gp/" data-bi-name="Nav_Support_PreviousVersions_GP" data-bi-area="topNav"> Dynamics GP </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Previous versions" href="https://dynamics.microsoft.com/en-us/nav-erp/" data-bi-name="Nav_Support_PreviousVersions_NAV" data-bi-area="topNav"> Dynamics NAV </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Previous versions" href="https://dynamics.microsoft.com/en-us/sl/" data-bi-name="Nav_Support_PreviousVersions_SL" data-bi-area="topNav"> Dynamics SL </a> </li> <li role="presentation"> <a role="menuitem" aria-roledescription="Previous versions" href="https://dynamics.microsoft.com/en-us/on-premises-product-segments/" data-bi-name="Nav_Support_PreviousVersions_Product-Segment" data-bi-area="topNav"> Dynamics Product Segments </a> </li> </ul> </li> </ul> </li> <li class="is-menu-link" role="presentation"> <a role="menuitem" href="https://community.dynamics.com/" target="_blank" data-bi-name="Nav_Community" data-bi-area="topNav"> Community </a> </li> <!-- Specific for Release Planner --> <li class="is-menu-link bapi-hide-for-large" role="none"> <li class="is-dropdown-submenu-parent opens-right bapi-hide-for-large" role="presentation"> <button type="button" role="menuitem" class="bapi-menu-toggle-button bapi-hide-for-large" aria-expanded="false" aria-controls="languages_submenu" data-bi-name="Nav_languages" data-bi-area="topNav"> English </button> <ul class="bapi-menu bapi-submenu is-dropdown-submenu" id="languages_submenu" role="menu"> <li role="presentation"><a role="menuitem" href="/fr-FR/" data-bi-name="Nav_English" data-bi-area="topNav">Français</a></li> <li role="presentation"><a role="menuitem" href="/ja-JP/" data-bi-name="Nav_English" data-bi-area="topNav">日本語</a></li> <li role="presentation"><a role="menuitem" href="/sv-SE/" data-bi-name="Nav_English" data-bi-area="topNav">Svenska</a></li> <li role="presentation"><a role="menuitem" href="/pt-BR/" data-bi-name="Nav_English" data-bi-area="topNav">Português (Brasil)</a></li> <li role="presentation"><a role="menuitem" href="/nb-NO/" data-bi-name="Nav_English" data-bi-area="topNav">Norsk Bokmål</a></li> <li role="presentation"><a role="menuitem" href="/nl-NL/" data-bi-name="Nav_English" data-bi-area="topNav">Nederlands</a></li> <li role="presentation"><a role="menuitem" href="/it-IT/" data-bi-name="Nav_English" data-bi-area="topNav">Italiano</a></li> <li role="presentation"><a role="menuitem" href="/fi-FI/" data-bi-name="Nav_English" data-bi-area="topNav">Suomi</a></li> <li role="presentation"><a role="menuitem" href="/es-ES/" data-bi-name="Nav_English" data-bi-area="topNav">Español</a></li> <li role="presentation"><a role="menuitem" href="/de-DE/" data-bi-name="Nav_English" data-bi-area="topNav">Deutsch</a></li> <li role="presentation"><a role="menuitem" href="/da-DK/" data-bi-name="Nav_English" data-bi-area="topNav">Dansk</a></li> </ul> </li> </li> <!-- Specific for Release Planner --> <!-- More Menu --> <li role="presentation" class="is-dropdown-submenu-parent opens-right has-submenu more" style="display: none;"> <button id="bapi-more-menu-button" type="button" role="menuitem" class="bapi-menu-toggle-button more-button" aria-controls="more-menu-list" aria-expanded="false" data-bi-name="Nav_MoreMenu" data-bi-area="topNav"> More </button> <ul id="more-menu-list" class="bapi-menu is-dropdown-submenu" role="menu"></ul> </li> </ul> <ul class="bapi-menu" data-menu-right> <li> <div id="meControl" data-signinsettings="" data-m="{"id":"meControl","cN":"Nav_MeControl","aN":"topNav","sN":"","cT":""}"> </div> </li> <!-- Specific for Release Planner --> <li class="is-menu-link is-menu-link--featured bapi-hide-until-large"> <div id="langDrop" class="hidden"> <li> <ul id="TopList" class="bapi-menu bapi-dropdown bapi-hide-until-large" data-menu-right role="menubar"> <li class="is-dropdown-submenu-parent" role="presentation"> <button type="button" role="menuitem" class="bapi-menu-toggle-button" aria-expanded="false" aria-controls="solutions-submenu" data-bi-name="Nav_Solutions" data-bi-area="topNav"> English </button> <ul id="SecondList" class="bapi-menu bapi-submenu is-dropdown-submenu flip-dropdown" style="min-width: 146px;" role="menu"> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Français" aria-roledescription="By need" href="/fr-FR/" data-bi-name="Français" data-bi-area="topNav"> Français </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="日本語" aria-roledescription="By need" href="/ja-JP/" data-bi-name="日本語" data-bi-area="topNav"> 日本語 </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Svenska" aria-roledescription="By need" href="/sv-SE/" data-bi-name="Svenska" data-bi-area="topNav"> Svenska </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Português (Brasil)" aria-roledescription="By need" href="/pt-BR/" data-bi-name="Português (Brasil)" data-bi-area="topNav"> Português (Brasil) </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Norsk Bokmål" aria-roledescription="By need" href="/nb-NO/" data-bi-name="Norsk Bokmål" data-bi-area="topNav"> Norsk Bokmål </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Nederlands" aria-roledescription="By need" href="/nl-NL/" data-bi-name="Nederlands" data-bi-area="topNav"> Nederlands </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Italiano" aria-roledescription="By need" href="/it-IT/" data-bi-name="Italiano" data-bi-area="topNav"> Italiano </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Suomi" aria-roledescription="By need" href="/fi-FI/" data-bi-name="Suomi" data-bi-area="topNav"> Suomi </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Español" aria-roledescription="By need" href="/es-ES/" data-bi-name="Español" data-bi-area="topNav"> Español </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Deutsch" aria-roledescription="By need" href="/de-DE/" data-bi-name="Deutsch" data-bi-area="topNav"> Deutsch </a> </li> <li role="presentation"> <a role="menuitem" style="padding-top: 1px;padding-bottom: 2px;padding-left: 6px;" title="Dansk" aria-roledescription="By need" href="/da-DK/" data-bi-name="Dansk" data-bi-area="topNav"> Dansk </a> </li> </ul> </li> </ul> </li> </div> </li> <!-- Specific for Release Planner --> </ul> </div> <div class="bapi-hide-for-large hamburger-container"> <button class="hamburger-container__hamburger" aria-expanded="false" aria-label="Expand or Collapse Menu" data-bi-name="Nav_HamburgerMenu" data-bi-area="topNav"> <span class="fixin top-bun"></span> <span class="fixin patty"></span> <span class="fixin bottom-bun"></span> </button> </div> </div> </nav> </div> <style></style> <div class="navbar navbar-inverse navbar-static-top navbar-insider" role="navigation"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar" onclick="setHeight();"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <div class="visible-xs-block"> <div class="xrm-editable-html xrm-attribute" data-languageContext="English"><div class="xrm-attribute-value"><a href="~/"><img src="/Logo.png" alt="Contoso Limited" style="width: auto; height: 32px;"><span class="ml-2" style="position: relative; top: 2px;">Contoso Ltd</span></a></div></div> </div> <div class="visible-sm-block visible-md-block visible-lg-block navbar-brand"> <div class="xrm-editable-html xrm-attribute" data-languageContext="English"><div class="xrm-attribute-value"><p><a class="homelink" href="~/" title="Starter Portal">Starter Portal</a></p></div></div> </div> </div> <div id="navbar" class="navbar-collapse collapse"> <h2></h2> <div class="menu-bar " data-weblinks-maxdepth="2"> <ul class="nav navbar-nav weblinks"> <li class="weblink "> <a href="/en-US/" title="Home"> Home </a> </li> <li class="divider-vertical"></li> <li class="weblink dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" title="Pages"> Pages <span class="caret"></span> </a> <ul class="dropdown-menu" role="menu"> <li> <a href="/en-US/page/" title="Pages" >Pages</a> </li> <li class="divider"></li> <li> <a href="/en-US/page/subpage-1/" title="Subpage 1" > Subpage 1 </a> </li> <li> <a href="/en-US/page/subpage-2/" title="Subpage 2" > Subpage 2 </a> </li> </ul> </li> <li class="divider-vertical"></li> <li class="weblink "> <a href="/en-US/contact-us/" title="Contact us"> Contact us </a> </li> <li class="divider-vertical"></li> <li class="dropdown"> <a class="navbar-icon" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Search" > <span class="glyphicon glyphicon-search"></span> </a> <ul class="dropdown-menu dropdown-search"> <li> <form method="GET" action="/en-US/search/" role="search" class="form-search"> <div class="input-group"> <div class="btn-group btn-select input-group-btn" data-target="#filter-ee32d517-5a92-49cd-b829-bdace025ee93" data-focus="#"> <li class="dropdown-submenu dropdown"> <button id="search-filter" type="button" class="btn btn-default" data-toggle="dropdown" aria-haspopup="true" aria-label="Search Filter" aria-expanded="false"> <span class="selected">All</span> <span class="caret"></span> </button> <ul class="dropdown-menu" role="listbox" aria-label="Search Filter"> <li role="presentation"> <a href="#" role="option" data-value="" aria-label="All" aria-selected="false" tabIndex="-1">All</a> </li> <li role="presentation"> <a href="#" role="option" data-value="adx_ideaforum,adx_idea,mip_ideacategory" aria-label="Idea Forums" aria-selected="false" tabIndex="-1">Idea Forums</a> </li> <li role="presentation"> <a href="#" role="option" data-value="mssh_releaseplansnapshot" aria-label="Release Plan Snapshots" aria-selected="false" tabIndex="-1">Release Plan Snapshots</a> </li> </ul> </li> </div> <label for="filter-ee32d517-5a92-49cd-b829-bdace025ee93" class="sr-only">Search Filter</label> <select id="filter-ee32d517-5a92-49cd-b829-bdace025ee93" name="logicalNames" class="btn-select" aria-hidden="true" data-query="logicalNames"> <option value="" selected="selected">All</option> <option value="adx_ideaforum,adx_idea,mip_ideacategory">Idea Forums</option> <option value="mssh_releaseplansnapshot">Release Plan Snapshots</option> </select> <label for="" class="sr-only"> Search </label> <input type="text" class="form-control" id="" name="q" placeholder="Search" value="" title="Search"> <div class="input-group-btn"> <button type="submit" class="btn btn-primary" title="Search" aria-label="Search"> <span class="fa fa-search" aria-hidden="true"></span> </button> </div> </div> </form> </li> </ul> </li> <!--<li class="divider-vertical"></li>--> <li style="display:none;"> <a href="/SignIn?returnUrl=%2Fen-US%2FAccount%2FLogin%2FRegister%3FreturnUrl%3D%25252525252525252525252Fja-JP%25252525252525252525252F%25252525252525252525253Fapp%25252525252525252525253DSales%26msCorrelationId%3Dcd0e770f-dfe7-443b-b499-c3a1ed00fc80%26instanceId%3D504dbda4a2fba22d55207d9088b5357985f1b7353e5b23c6e174b0cdcefdc67a%26tenantId%3D72f988bf-86f1-41af-91ab-2d7cd011db47%26portalId%3D8ac48c2d-5492-4e58-99a3-e62fc82cd68a%26orgId%3D9a716ccb-b974-4324-8590-feff90a9a5bc%26environmentId%3Df55e79bd-d8cb-4fbb-9be2-2cefd8cb3b83%26portalApp%3Dsite-8ac48c2d-5492-4e58-99a3-e62fc82cd68a-USe2%26portalType%3DCDSStarterPortal%26portalProductionOrTrialType%3DProduction%26licenseType%3DPowerPortal%26portalVersion%3D9.6.9.39%26islandId%3D101%26portalDomain%3Dhttps%25253A%25252F%25252Freleaseplans.microsoft.com"> Sign in </a> </li> </ul> </div> <div class="navbar-right hidden-xs"> <div class="xrm-editable-html xrm-attribute no-value"><div class="xrm-attribute-value"></div></div> </div> </div> </div> </div> <script type="text/javascript"> function setHeight(){ var windowHeight = window.innerHeight - 140; var navbar = document.getElementById("navbar"); if (navbar) { navbar.style.maxHeight = windowHeight + "px"; } } window.addEventListener('resize', function (event) { setHeight(); }); function replaceLoginLabels(time){ try{ window.setTimeout(function(){ var personalAccountButtonLabel = "Personal Account"; let personalAccountButLength = $('button:contains("Personal Account")').length; if(personalAccountButLength === 1 ){ $('button:contains("Personal Account")').text(personalAccountButtonLabel); } var workAccountButtonLabel = "Work Account"; let workAccountButLength = $('button:contains("Work Account")').length; if(workAccountButLength === 1 ){ $('button:contains("Work Account")').text(workAccountButtonLabel); } $("#locale-picker-link").css("display","none"); if($("#meControl").length > 0 && $("#meControl").parent().length > 0 && $("#meControl").parent().parent().length > 0) { $("#meControl").parent().parent().css("list-style-type","none").css("padding","0"); } const url = new URL(window.location); if($("li.list-group-item").length > 0 && url.pathname.toLowerCase().contains("Account/Manage/ChangeLogin")) { $("li.list-group-item")[0].innerHTML = $("li.list-group-item")[0].innerHTML.replace("Personal Account",personalAccountButtonLabel); $("li.list-group-item")[1].innerHTML = $("li.list-group-item")[1].innerHTML.replace("Work Account",workAccountButtonLabel); } $(".nav-account").find("a").attr("style","color:#007d85!important"); },time); } catch {}; } replaceLoginLabels(3000); replaceLoginLabels(4000); replaceLoginLabels(5000); replaceLoginLabels(6000); replaceLoginLabels(8000); replaceLoginLabels(10000); </script> <div class="xrm-editable-html xrm-attribute"><div class="xrm-attribute-value"><script> //Temporary function function redirectToEnglish(){ const url = new URL(window.location); if(url.pathname.split('/')[1].toLocaleLowerCase() !== 'en-us'){ let newPathName = url.pathname.replace(url.pathname.split("/")[1],'en-us'); window.location.href = window.location.origin + newPathName + url.search; } } function resizseWindow(time){ window.setTimeout(function(){ window.dispatchEvent(new Event('resize')); }, time); } resizseWindow(3000); resizseWindow(5000); resizseWindow(10000); resizseWindow(20000); </script></div></div> <!-- add anti-forgery token--> <div id="antiforgerytoken" data-url="/_layout/tokenhtml"></div> <!-- Client Telemetry init if telemetry enabled--> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/client-telemetry.bundle-ecbf4ab0d0.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/client-telemetry.bundle-ecbf4ab0d0.js" type="text/javascript"></script> <!-- Client Telemetry Wrapper init --> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/client-telemetry-wrapper.bundle-633e70f51b.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/client-telemetry-wrapper.bundle-633e70f51b.js" type="text/javascript"></script> <script> window.clientLogWrapper = new ClientLogWrapper(); </script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/preform.moment_2_29_4.bundle-4fdd3f639b.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/preform.moment_2_29_4.bundle-4fdd3f639b.js" type="text/javascript"></script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/pcf-dependency.bundle-805a1661b7.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf-dependency.bundle-805a1661b7.js" type="text/javascript"></script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/pcf.bundle-9183da3d63.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf.bundle-9183da3d63.js" type="text/javascript"></script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/pcf-extended.bundle-e303d53553.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf-extended.bundle-e303d53553.js" type="text/javascript"></script> <style> .carousel{ margin-left:0; display:block; margin-bottom: 20px; } .carousel .item, .carousel .item img{ width:100%; height:auto; } .carousel-control { padding-top:10%; width:5%; } body{ font-family:"Segoe UI"; font-weight:400; font-size:14px; line-height:24px; background-color:#f8f9fa; } a{ cursor:pointer; } .product-family{ padding-left: 0; padding-right: 25px; } .f-divider{ background-image: linear-gradient(90deg, red, transparent); border: 0; height: 1px; } .jumbotron{ margin-bottom: 10px; background-color:#0A1B45; color:#FFFFFF; padding-bottom:30px!important; } .jumbotron .container { margin-left: 20px; } .head h1{ font-weight: 600; font-size: 24px; line-height: 32px; margin: 0; } .sub-head{ margin-top:3px; font-weight: 600; font-size: 18px; line-height: 20px; } .sub-sub-head{ font-size:12px; font-weight:400; line-height:22px; } .sub-sub-head a{ color:#FFFFFF; text-decoration:underline; } .main-section{ margin-left: 56px; } .container-fluid { background-color: transparent; padding:0; } .panel-group .panel, .panel-heading{ background-color:#f8f9fa; font-style: normal; font-weight: 600; font-size: 20px; line-height: 28px; color: #323130; } .panel-group .panel-default > .panel-heading { border-bottom: 1px solid #d6d6d6; } .panel-body{ padding:0px; } .panel-heading{ padding-left:0px; padding-right:initial; padding-top:15px; padding-bottom: 16px; } .panel-group .panel-heading .panel-title a:hover { color: initial; } .panel-group .panel-heading .panel-title a:before { margin-right:0px; width:auto; } .panel-body ul{ list-style:none; padding-left: 24px; } .panel-body li{ border-bottom: 1px solid #d6d6d6; padding: 10px 0 10px 12px; } .panel-body li a{ font-style: normal; font-weight: normal; font-size: 16px; line-height: 24px; color: #444444; } .glyphicon-minus, .glyphicon-plus, .glyphicon-chevron-up, .glyphicon-chevron-down{ float:right; color: #0258AD; } .btn, .btn-default{ border: 1px solid #0258AD; box-sizing: border-box; border-radius: 6px; font-weight: 600; font-size: 14px; line-height: 19px; align-items: center; text-align: center; letter-spacing: -0.02em; color: #0258AD; margin: 10px 10px 0 0; } .f-m-links{ display:flex; justify-content:flex-end; flex-wrap:wrap; } .active-filter{ border-top: 3px solid #D9E9F1; margin-top: 16px; } hr.active-filter.active { border-top: 3px solid #0258AD; } /* hamburger styling */ .hamburger-menu-button-open { top: 80%; margin-top: -10px; left: 59%; margin-left: -12px; } .hamburger-menu-button-open, .hamburger-menu-button-open::before, .hamburger-menu-button-open::after { position: absolute; width: 28px; height: 3px; background:#0258AD; border-radius: 4px; -webkit-transition: all 0.3s; transition: all 0.3s; } .hamburger-menu-button-open::before, .hamburger-menu-button-open::after { left: 0; content: ""; } .hamburger-menu-button-open::before { top: 6px; } .hamburger-menu-button-open::after { bottom: 6px; opacity: 0; } .hamburger-menu-button-close { background: transparent; -webkit-transform: rotate(180deg); transform: rotate(180deg); } .hamburger-menu-button-close::before { -webkit-transform: translateY(-6px) rotate(45deg); transform: translateY(-11px) rotate(45deg); } .hamburger-menu-button-close::after { -webkit-transform: translateY(6px) rotate(-45deg); transform: translateY(2px) rotate(-45deg); opacity: 1; } .f-details{ min-height: auto; padding:0px; background-color:#ffffff; box-shadow: 0px 4px 4px rgb(0 0 0 / 10%); /* box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.1); */ height:100%; margin-top:-62px; } .list-group-item { background-color: #EBF1F9;; height: 85px; font-size: 16px; line-height: 24px; color: #0258AD; box-shadow: 0px -2px 4px rgba(168, 168, 168, 0.25); border:initial; padding:10px 20px; } .list-group-item:first-child { border-top-left-radius: 0px; border-top-right-radius: 0px; } .list-group-item:last-child { border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; } .tablist--features{ display: flex; flex-direction: row; padding-left: 0; /*justify-content: space-around;*/ } .tablist--features > div{ padding: 5px 24px 0 0; } .tablist--features a{ color:#0258AD; } .status-filter--desc{ font-style: normal; font-weight: normal; font-size: 12px; line-height: 16px; color: #000000; } .navbar-collapse{ padding:initial; } .navbar-toggle { background-color:transparent; //#D7DADD; float:left; border-radius:initial; padding: 17.5px 17.5px; margin-left: -15px; } .navbar-toggle .icon-bar { border: 1px solid #484644; } .panel-body li.active{ background-color: #ffffff; border-bottom: 4px solid #0258AD; } .panel-group .panel-default div.active{ background-color: #ffffff!important; border-bottom: 4px solid #0258AD!important; } .panel-body li.active a{ font-weight: 600; color: #000000; } .list-group--data{ background-color: #ffffff; padding: 0 5px; } .list-group--data-items{ display:flex; flex-wrap:wrap; } .list-group--data-items:after { border-width: 0 0 2px 0; border-image: linear-gradient(90deg, rgba(196, 196, 196, 0) 6.67%, #C9D7DF 49.99%, rgba(196, 196, 196, 0) 91.91%); border-image-slice: 9; border-style: solid; } .filter--dropdown{ width: 100%; display: block; height: 50px; background: #F3F7FA; border-radius: 5px; padding: 6px 0 8px 16px; font-weight: 600; color: #0258AD; border:none } .modal-window{ z-index:99999; } @media screen and (max-width: 1011px) { .list-group--data{ /* flex-direction: column; padding-right: initial; */ } .searchbartop{ display:none; } .expandSearchIcon,.clearCrossButton{display:none!important;} .languageIconContainer{ display:none!important; } .otherPlansContainer{ padding-left: 20px; } .learnMoreContainer{ margin-top:35px!important; padding-left: 20px; padding-right: 10px; margin-bottom: 15px; } .list-group--data-items{ flex-direction: column; } .hide-on-mobile-view { display: none !important; } } #filterDropdown{ box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.25), 0px 1px 10px rgba(2, 88, 173, 0.26); border-radius: 5px; background-color: #F3F7FA; } @media (min-width: 1011px) { .show-on-mobile{ display: none !important; } .separator{ display: none; } .status-timeline-filter { margin-left: auto; } } @media (min-width: 1201px) { .row-switch{ margin-bottom: 24px!important; } .languageIconContainer{ margin-bottom: 24px; } } @media (max-width: 1011px) { .not-show-on-mobile{ display: none !important; } .jumbotron > .container{ flex:50%!important; } .jumbotron { padding-bottom: 24px!important; } .rightHeader{ padding-top: 8px!important; } .onWindowClearSearch{ display: none !important; } } @media (max-width: 450px) { .feedbackText,.whatsnewText{ display:none!important; } .headerButton{ width:auto!important; min-width:0px!important; } } @media screen and (min-width:767px){ .navbar-header { float: initial; } } @media screen and (max-width:1800px){ margin-top: ""; } @media screen and (max-width:1482px) and (min-width:1200px){ .active-filter{ margin-top:4px; } } @media screen and (max-width:1110px){ .active-filter{ margin-top:4px; } } @media screen and (min-width:1650px){ .product-family{ padding-top: 0px!important; } } @media screen and (max-width:1200px){ .jumbotron { margin-bottom: 5px; padding-top: 48px; padding-bottom: 48px; } .separator{ border: 0; border-top: 1px solid #D7DADD; } .plan-separator{ margin-bottom: 10px; border: 0; border-top: 1px solid #D7DADD; display: block !important; } body{ background-color: #f8f9fa; } .f-details::before{ border-top:2px solid black; } #bs-example-navbar-collapse-1{ background-color: #F8F9FA; border: 1px solid #C9D7DF; box-sizing: border-box; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); margin-left: -16px; /* width: 398px; */ } .navbar-toggle{ display:block; } .navbar-collapse.collapse{ display:none!important; height:auto!important; padding-bottom:0; overflow:visible!important; } .collapse.in{ display:block!important; height:auto!important; padding-bottom:0; overflow:visible!important; } .navbar{ position: absolute; z-index: 1; margin-left:10px; } .languageIconContainer{ display:none!important; } .otherPlansContainer{ padding-left: 20px; } .learnMoreContainer{ margin-top:35px!important; padding-left: 20px; margin-bottom: 15px; } .jumbotron .container { margin-left: 20px; } .main-section { margin: 0 20px 85px 20px; } .panel-group .panel{ background-color: #F8F9FA; margin:24px; } .langaugeEarthIcon{ display:block!important; } } @media screen and (min-width:1200px) { .list-group { margin-bottom: initial; } .product-family { padding-top: 35px; } } .f-side { flex: 30%; padding: 6px 10px; } .f-side hr{ margin-top: 8px; margin-bottom: 8px; } .f-main { flex: 70%; padding-right: 20px; background-color: #F6F7F9; padding: 32px 40px; } .feature-title{ padding: 5px 40px; display: flex; flex-wrap: wrap; min-height: 68px; line-height: 24px; color: #000000; text-decoration: none; background: linear-gradient(89.85deg, #EBF1F9 0.05%, #F6F7F9 99.91%); border: 0; box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 16px; align-items: center; } .f-feature-head{ font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 18px; color: #000000; width:100%; border: 0; } .f-feature-head-primary{ flex: 70%; padding-right: 20px; } .f-feature-head-secorndary { flex: 30%; padding-right: 20px; display: flex; align-items: center; } .f-feature-head-secorndary .updated-cue-box{ width: 49%; } .f-feature-head-secorndary .new-cue-box{ width: 49%; } .f-feature-head-secorndary .milestone-details{ width: 49%; text-align: left; margin-left: 40px; } .f-feature-head-secorndary .milestone-separator{ align-self: stretch; padding: 0 10px; width: 2%; } .milestone-separator .v-separator{ height:100%; width:1px; background: #C4C4C4; } .f-feature-head-secorndary .comment-separator{ align-self: stretch; padding: 0 10px; width: 2%; } .comment-separator .v-comment-separator{ height:100%; width:1px; background: #C4C4C4; } .milestone-details .milestone-date{ display: block; font-family: Segoe UI; font-style: normal; font-weight: 600; font-size: 14px; line-height: 16px; } .milestone-details .milestone-name{ display: block; font-weight: 400; font-size: 10px; line-height: 12px; color: #666666; } .f-feature-head-secorndary .updated-cue{ margin-top: 5px; margin-left: 12px; width: 80px; height: 21px; line-height: 21px; border-radius: 21px; text-align: center; background: #FFD749; font-size: 11px; font-weight: 600; } .f-feature-head-secorndary .new-cue{ margin-top: 5px; margin-left: 12px; width: 80px; height: 21px; line-height: 21px; border-radius: 21px; text-align: center; background: #86E584; font-size: 11px; font-weight: 600; } .f-detail{ font-weight: normal; font-size: 14px; line-height: 20px; color: #000000; } .f-productarea{ display:none; font-weight: normal; font-size: 16px; line-height: 22px; color: #696969; padding-bottom:24px; padding-top:5px; } .f-expanded-name{ margin-bottom: 10px; left: 282px; top: 18px; font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 16px; line-height: 20px; color: #000000; } .r-heading{ font-style: normal; font-weight: normal; font-size: 12px; line-height: 16px; color: #696969; margin-bottom: 4px; } .r-item2>.r-heading{ margin-bottom: 8px; } .r-value{ font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; } .r-item1>.r-item1-available>.r-value{ font-style: normal; font-weight: 600; font-size: 14px; line-height: 20px; color: #000000; } .r-item1>.r-item1-lastupdated>.r-value{ font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 13px; line-height: 20px; color: #323130; } .r-value-relWave{ font-style: normal; font-weight: 600; font-size: 14px; line-height: 24px; color: #000000; } .r-item5{ margin-bottom:25px; } .f-images{ margin-top: 50px; text-align:center; } .col-image{ padding-left: 0; padding-right: 10px; } .rlink{ line-height: 30px; } /*Timeline stepper css*/ .step { position: relative; min-height: 1em; color: #666666; } .step + .step { margin-top: 1em } .step > div:first-child { position: static; height: 0; } .step > div:not(:first-child) { margin-left: 1.5em; padding-left: 1em; } /* Circle */ .circle { position: relative; width: 16px; height: 16px; border-radius: 100%; color: #fff; text-align: center; box-shadow: 0 0 0 3px #fff; } .circle-fill{ background: #0258AD; } .circle-empty{ background: #D5D5D5; } /* Vertical Line */ .circle:after { content: ' '; position: absolute; display: block; top: 1px; right: 50%; bottom: 1px; left: 45%; height: 100%; width: 2px; transform: scale(1, 2); transform-origin: 50% -100%; background-color: #EBEBEB; z-index: auto; } .step:last-child .circle:after { display: none } .step:first-child .circle:after { height: 100%; z-index: auto; } .showmorelink, .showlesslink{ display: grid; } .showmorelink > a, .showlesslink > a{ text-align: center; font-style: normal; font-weight: normal; font-size: 15px; line-height: 20px; align-items: center; letter-spacing: -0.02em; color: #0258AD; margin-bottom: 10px; } .font-weight-bold{ font-weight: bold; } .font-weight-semibold{ font-weight: 600; } .row{ margin:0; } /* spinner start*/ .spinner{ position:fixed; top: 50%; left: 0; background: #2a2a2a55; width: 100%; display:block; text-align:center; height: 100%; color: #FFF; transform: translateY(-50%); z-index: 1000; visibility: hidden; } .loader, .loader:before, .loader:after { border-radius: 50%; width: 2.5em; height: 2.5em; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation: load7 1.8s infinite ease-in-out; animation: load7 1.8s infinite ease-in-out; } .loader { color: #ffffff; font-size: 10px; margin: 200px auto; position: relative; text-indent: -9999em; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); -webkit-animation-delay: -0.16s; animation-delay: -0.16s; } .loader:before, .loader:after { content: ''; position: absolute; top: 0; } .loader:before { left: -3.5em; -webkit-animation-delay: -0.32s; animation-delay: -0.32s; } .loader:after { left: 3.5em; } @-webkit-keyframes load7 { 0%, 80%, 100% { box-shadow: 0 2.5em 0 -1.3em; } 40% { box-shadow: 0 2.5em 0 0; } } @keyframes load7 { 0%, 80%, 100% { box-shadow: 0 2.5em 0 -1.3em; } 40% { box-shadow: 0 2.5em 0 0; } } .show{ visibility: visible; } .spanner, .overlay{ opacity: 0; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; transition: all 0.3s; } .spanner.show, .overlay.show { opacity: 1 } /*No Result*/ .no-result, .plan-error{ font-weight:600; font-family: Segoe UI; font-size: 18px; line-height: 24px; letter-spacing: 0px; text-align: center; padding: 50px; } .no-result-header, .error-header{ padding: 10px; } .no-result .no-product-message{ font-size: 14px; font-weight: 400; } .no-result .no-record-message, .plan-error .error-message{ margin: auto; font-size: 14px; font-weight: 400; font-style: normal; line-height: 20px; letter-spacing: 0px; text-align: left; width: 420px; } .plan-error .error-message{ width:150px; } .no-result .semibold{ font-weight: 600; } @media screen and (max-width: 500px) { .no-result, .plan-error{ padding-left: 0; padding-right: 0; } .no-result .no-record-message, .plan-error .error-message{ width: 220px; } .f-main, .feature-title{ padding: 10px 20px; } } /* end no results*/ .hidden-item { display:none !important; visibility: hidden; } .visibility-hide{ visibility: hidden; } .img-scale-down { max-width: 100%; max-height: 100%; object-fit: scale-down; overflow: hidden; } li a.addin{ padding-left: 30px; } .transparent-button{ width:100%; background:transparent; border: 0; box-shadow:none; color:black; } .plan-action-item{ flex:auto; } .plan-action-item .glyphicon{ top: 2px; float: left; padding-right:8px; } .plan-action-item .glyphicon-plus{ color: #ffffff; } .plan-action-item .add-btn{ background: #0258AD; color:#ffffff } .plan-action-item .btn{ filter: drop-shadow(0px 3px 4px rgba(0, 0, 0, 0.22)); } /* swtich syle starts*/ .row-switch{ margin-top: 5px; margin-bottom: -5px; } .switch { height: 56px; left: 58px; top: 216px; background: #FFFFFF; box-shadow: inset 0px 0px 8px rgb(0 0 0 / 25%); border-radius: 45px; padding: 0 10px; } .switch-light > span, .switch-toggle > span { color: #000000; } .switch-light span span, .switch-light label, .switch-toggle span span, .switch-toggle label { cursor: pointer;} .switch-toggle a, .switch-light span span { display: none; } .switch-light { top:5px; display: block; height: 40px; position: relative; overflow: visible; padding: 0px; margin-left:0px; font-weight: 400;} .switch-light * { box-sizing: border-box; } .switch-light a { display: block; transition: all 0.3s ease-out 0s; } .switch-light label, .switch-light > span { line-height: 30px; vertical-align: middle;} .switch-light label {font-weight: 400; margin-bottom: px; max-width: 100%;} .switch-light input { position: absolute; opacity: 0; z-index: 5; } .switch-light input:checked ~ a { right: 0%; } .switch-light > span { position: absolute; left: -100px; width: 100%; margin: 0px; padding-right: 100px; text-align: left; } .switch-light > span span { position: absolute; top: 6px; left: 0px; z-index: 5; display: block; width: 50%; margin-left: 100px; text-align: center; } .switch-light > span span:last-child { left: 50%; } .switch-light a {position: absolute; right: 50%; top: 0px; z-index: 4; display: block; width: 50%; height: 100%; padding: 0px; margin-top: 2px; border-radius: 40px; background: #D2E3FA; box-shadow: 0px 1px 6px rgba(196, 196, 196, 0.9), 0px 2px 5px rgba(2, 88, 173, 0.13);} .switch-light span.inactive{ opacity: 0.8; } /* switch style ends */ @media screen and (max-width: 425px) { .f-m-links{ flex-direction: column; } /* .f-name .feature-name{ clear: both; width: 100%; } */ } @media screen and (max-width: 499px) { .list-group--data-items .panel-heading .accordion-toggle:after { margin-right: 1px!important; } .list-group--data-items .panel-heading .accordion-toggle.collapsed:after { margin-right: 1px!important; } } .list-group--data-items .panel-heading .accordion-toggle:after { font-family: 'Glyphicons Halflings'; content: "\e113"; float: right; color: #0258AD; margin:0 -10px; display: inline-block; font-size: 17px; } .list-group--data-items .panel-heading .accordion-toggle.collapsed:after { content: "\e114"; border: 0; } .list-group--data-items .panel-collapse{ width:100%; } .list-group--data-items .panel-heading { position: relative; padding: 0; } .f-feature-head .a:link,a:visited,a:hover,a:active,a:focus { text-decoration: none; } #featureDetailsModal .feature-details-head, #featureDetailsModal .geo-head{ font-family: Segoe UI; font-style: normal; font-weight: 600; font-size: 16px; line-height: 22px; color: #323130; margin-top:8px; margin-bottom: 8px; } .modal-window .title{ font-family: Segoe UI; font-style: normal; font-weight: 600; font-size: 18px; line-height: 16px; color: #323130; } .modal-window .modal-header{ border: 0; padding-left: 30px; } .modal-window .modal-body{ margin-top: 17px; } #featureDetailsModal .feature-details, #featureDetailsModal .geo-details{ font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; } #featureDetailsModal .notes-details{ font-family: Segoe UI; font-style: normal; font-size: 14px; color: #323130; font-weight: 400; margin-left: -10px; } #featureDetailsModal .ImportantNote{ margin-top: 2px; background: #EBF1F9; border-radius: 4px; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; padding: 16px 16px 16px 24px; } #featureDetailsModal .AIBanner{ margin-top: 2px; background: #EBF1F9; border-radius: 4px; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; padding: 16px 16px 16px 24px; } #featureDetailsModal .bussiness-value{ font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; } #featureDetailsModal .notes-value{ background: #FFF8DF; border-radius: 4px; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; padding: 16px 16px 16px 24px; margin-top:5px; margin-bottom:5px; } #featureDetailsModal .modal-body{ max-height: 75vh; overflow-y: auto; } #featureDetailsModal .fetureNote{ font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 14px; line-height: 16px; color: #323130; margin-top: -3px; } .f-details ul{ list-style: disc; } .top-panel-heading.panel-heading{ background-color:transparent; border: 0; padding-bottom: 14px; margin-left: 20px; margin-right: 20px; border-bottom: 1px solid; border-bottom-color: #D5D5D5; } .top-panel-heading{ padding: 0; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 20px; line-height: 26px; color: #000000; } .top-panel-toggle{ padding-bottom: 20px; display: inline-block; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 18px; line-height: 26px; height:26px; color: #000000; } .top-panel-toggle.accordion-toggle:before { font-family: 'Glyphicons Halflings'; content: "\e113"; float: left; color: #0258AD; display: inline-block; font-size: 17px; margin-right: 20px; } .top-panel-toggle.accordion-toggle.collapsed:before { content: "\e114"; } #accordion-group{ padding-top: 45px; } #accordion-group .panel.top-panel{ margin-bottom: 12px; border: 0; } #accordion-group .panel.top-panel:last-child{ margin-bottom: 0; } .f-capability{ font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #696969; } .r-item1{ display: flex; } .r-item1-available{ min-width:50%; flex-grow: 100; margin-right: 10px; } .r-item1-lastupdated{ margin-right: 10px; } .list-group--data-items.panel{ border: 1px solid #D8D8D8; margin-top: -2px; border-radius: 1px; margin-bottom:8px; } .status-timeline-filter{ width: 17%; display: flex; } .status-timeline-filter-shared{ display: flex; padding-left: 80%; padding-top: 15px; } .status-timeline-filter .status-separator{ padding: 0 20px; width: 1px; height: 30px; } .status-timeline-filter .status-separator .v-separator{ background: #C4C4C4; width: 1px; height: 100%; } .show-on-mobile .status-timeline-filter{ padding-top:15px; width: auto; } .tablist .status-timeline-filter{ margin-top: 10px; } .show-on-mobile .status-timeline-filter > div{ margin-left: auto; } .popover{ max-width:320px; width: 1000px; } .applyButton{ height: 43px; font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 14px; line-height: 19px; min-width: 70px; align-items: center; text-align: center; letter-spacing: -0.02em; background: #0258AD; border: 1px solid #0258AD; box-sizing: border-box; color: #FFFFFF; border-radius: 6px; } .commentApplyButton{ font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 14px; line-height: 19px; align-items: center; text-align: center; letter-spacing: -0.02em; background: #0258AD; border: 1px solid #0258AD; box-sizing: border-box; color: #FFFFFF; border-radius: 6px; } .closeButton, .sharePopupClose{ font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 14px; line-height: 19px; min-width: 70px; align-items: center; text-align: center; letter-spacing: -0.02em; color: #0258AD; height: 43px; border-radius: 6px; background: #FFFFFF; border: 1px solid #E3E4E5; } .popover-content td>p{ font-family: Segoe UI; font-style: normal; font-weight: 600; font-size: 12px; line-height: 16px; } #bodyBlock1 div >label, #bodyBlock2 div >label, #bodyBlock3 label, #bodyBlock4 label{ font-weight: 400!important; font-family: "Segoe UI"; font-size: 14px; } #AvailDateBox div >label, #sortByBox div > label, #StatusBox div > label, #ForBox div > label{ font-weight: 400!important; font-family: "Segoe UI"; font-size: 14px; } #mobileApplyButton{ height: 43px; width: 148px; left: 0px; top: 0px; border-radius: 6px; background: #0258AD; border: 1px solid #0258AD; box-sizing: border-box; border-radius: 6px; font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 14px; line-height: 19px; display: flex; align-items: center; text-align: center; letter-spacing: -0.02em; color: #FFFFFF; } #mobileCloseButton{ position: absolute; left: 0%; right: 0%; top: 0%; bottom: 0%; background: #FFFFFF; border: 1px solid #0258AD; box-sizing: border-box; border-radius: 6px; font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 14px; line-height: 19px; display: flex; align-items: center; text-align: center; letter-spacing: -0.02em; color: #0258AD; } #AvailDateBox > p , #StatusBox > p, #ForBox > p, #bodyBlock3 > p, #bodyBlock4 > p{ font-family: Segoe UI; font-style: normal; font-weight: 600; font-size: 12px; line-height: 16px; } .sharedClose, .searchClose, .bannerClose{ font-family: 'Segoe UI'; font-style: normal; font-weight: 400; font-size: 14px; line-height: 19px; color: #016CBE; height: 35px; right: 56px; bottom: 1732px; background: #FFFFFF; border: 1px solid #016CBE; } .notactive { pointer-events: none; cursor: default; } .searchMessageBar{ display: flex; align-items: center; justify-content: space-between; width: 100%; height: 59px; background-color: #EBF1F9; top: 152px; margin-top: 23px; } .searchedMessage{ display: flex; align-items: center; padding-left: 20px; padding-top: 16px; font-family: 'Segoe UI'; font-style: normal; font-weight: 400; font-size: 21px; line-height: 24px; color: #000000; } .globalSearchButton, .clearCrossButton, .searchBtn{ border:none; background-image: none !important; background-color: transparent !important; } @media screen and (max-width:1200px) and (min-width:1011px){ .navbar{ margin-top: -75px; } .f-details{ margin-top: 5px !important; margin-bottom: -70px !important; } .active-filter{ margin-top:16px; } .not-show-on-mobile{ margin-right: 25px; } .onWindowClearSearch{ margin-right: 40px; } } @media screen and (min-width:1201px){ .features_window{ margin-left:-35px; } } @media screen and (max-width:1650px) and (min-width:1201px){ #myPlanSwitch{ margin-left: 35%; } .features_window{ margin-left:-35px; } .row{ margin-top: -45px; } .f-details{ margin-bottom: -25px !important; margin-top:35px!important; } .bussiness-value,.feature-details{ margin-top: 2px!important; } .carousel-inner .row{ margin-top: 2px!important; } .important-notes-value,.overview-details,.AIBanner-notes-value{ margin-top: 0px!important; } } @media screen and (min-width:1651px){ .f-details{ margin-bottom: -20px!important; margin-top: -10px !important; } } @media screen and (max-width:1010px){ .f-details{ margin-bottom: -70px!important; margin-top: -30px !important; } .hide-when-not-use{ visibility: hidden; } .row-switch{ justify-content: center !important; margin-top: 2px; margin-bottom: -13px; } .status-timeline-filter,.status-timeline-filter-shared{ margin-top: -5px; margin-bottom: -15px; } .searchMessageBar{ margin-top: 60px; } } .cloudContainer{ text-decoration: underline; font-family: 'Segoe UI'; font-weight: 600; font-size: 14px; color: #007b93; } .learnText{ text-decoration: underline; font-family: 'Segoe UI'; font-size: 14px; margin-top: 5px; color: #007b93; } @media screen and (min-width:1201px){ #myPlanSwitch{ margin-left: 0 !important; } } @media screen and (max-width:1300px) and (min-width:1200px){ .status-timeline-filter{ margin-right: 20px; } } @media screen and (max-width:400px){ .searchedMessage{ font-size: 16px; } } .f-changeHistory td{ font-family: 'Segoe UI'; font-style: normal; font-weight: 400; font-size: 14px; line-height: 18px; color: #323130; } @media screen and (max-width:530px){ .f-changeHistory{ width: 98% !important; padding-left:8px !important; } } #filterDropdown select { appearance: none; outline: none; } #filterDropdown::after { content: "\e114"; font-family: 'Glyphicons Halflings'; float: right; margin-right: 20px; color: #666666; margin-top: 0px; position: absolute; right: 20px; top: 10px; pointer-events: none; } #productOverviewModal .modal-body{ max-height: 75vh; overflow-y: auto; } #featureDetailsModal .important-notes-value{ background: #EBF1F9; border-radius: 4px; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; padding: 16px 16px 16px 24px; } #featureDetailsModal .AIBanner-notes-value{ background: #EBF1F9; border-radius: 4px; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; padding: 16px 16px 16px 24px; } #productOverviewModal .overview-head, #productOverviewModal .whats-new-head{ font-family: Segoe UI; font-style: normal; font-weight: 600; font-size: 16px; line-height: 22px; color: #323130; margin-top:32px; } #featureDetailsModal .overview-details{ font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; } #featureDetailsModal .whats-new-deatails{ font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; } .overview-details >p, .whats-new-deatails>p, .overview-details >ul, .whats-new-deatails > ul{ font-weight: 400; font-size: 14px; } .whats-new-deatails strong{ font-weight: 600; } .overview-details strong{ font-weight: 600; } .important-notes-details p{ font-family: 'Segoe UI'; font-style: normal; font-weight: 400; font-size: 14px; line-height: 20px; } .AIBanner-note{ margin-top: 2px; background: #EBF1F9; border-radius: 4px; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; padding: 16px 16px 16px 24px; } .l2AIBanner-note{ margin-top: 3px; margin-bottom: 3px; background: #EBF1F9; border-radius: 4px; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; padding: 16px 16px 16px 24px; } .important-notes-details strong{ font-weight: 600; } .AIBanner-notes{ font-family: Segoe UI; font-style: normal; font-weight: 400; font-size: 14px; line-height: 22px; color: #323130; padding: 10px 20px; margin-left: 15px; } .important-note-title{ font-family: Segoe UI; font-style: normal; font-weight: 600; font-size: 16px; line-height: 22px; color: #323130; padding: 10px 20px; margin-left: 15px; } .important-notes-details blockquote{ border-left: 0px; } .placeholderDiv{ width:49%; } .imageLoader, .imageLoader:before, .imageLoader:after { border-radius: 50%; width: 2.5em; height: 2.5em; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation: load7 1.8s infinite ease-in-out; animation: load7 1.8s infinite ease-in-out; } .imageLoader { color: #0258ad; font-size: 6px; margin: 10px auto; position: relative; text-indent: -9999em; -webkit-transform: translateZ(0); -ms-transform: translateZ(0); transform: translateZ(0); -webkit-animation-delay: -0.16s; animation-delay: -0.16s; } .imageLoader:before, .imageLoader:after { content: ''; position: absolute; top: 0; } .imageLoader:before { left: -3.5em; -webkit-animation-delay: -0.32s; animation-delay: -0.32s; } .imageLoader:after { left: 3.5em; } .hr-seperator{ margin-top: 15px; margin-bottom: 15px; border: 0; border-top: 1px solid #C4C4C4; } .commentNote{ font-family: 'Segoe UI'; font-style: normal; font-weight: 500; font-size: 14px; line-height: 22px; color: #323130; margin-bottom: 8px; } .commentPIIBanner{ font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 12px; line-height: 14px; color: #323130; margin-left: 10px; } .PIIBanner{ align-items: center; display: flex; margin-bottom: 10px; background-color: #FFF8DF; padding: 10px; } .editActionClick{ background: #F9FBFF; border-radius: 4px; box-shadow: inset 0px 1px 4px rgba(105, 105, 105, 0.32); } .importantText{ font-family: 'Segoe UI'; font-style: normal; font-weight: 600; font-size: 16px; line-height: 20px; } .shareFeatureBoxShadow{ width: 32px; height: 32px; background: #FFFFFF; border-radius: 2px; box-shadow: inset 0px 2px 4px rgb(0 0 0 / 10%); padding: 0px; flex-grow: 0; } .nobackButton{ background: none; border: none; padding: 0px; } .txtSearch{ border: 1px; margin-top: 12px; margin-bottom: 7px; color: black; } .headerButton{ display: flex; border-radius: 2px; background: #F1F8FF; border: none; padding: 4px 8px 4px 8px; height:24px; min-width: 100px; } .share-feature{ background-color: #053385; display: flex; flex-direction: row-reverse; align-items: center; color: white; } .share-feature:focus,.share-feature:hover{ color: white; } .notes-empty{ background-color: #053385; display: flex; flex-direction: row-reverse; align-items: center; color: white; } .notes-empty:focus,.notes-empty:hover{ color: white; } .business-value-heading, .feature-details-heading{ font-family: Segoe UI; font-size: 16px; font-weight: 600; line-height: 22px; letter-spacing: 0px; text-align: left; } .feature-details-section,.feature-details-section{ font-family: Segoe UI; font-size: 14px; font-weight: 400; line-height: 20px; letter-spacing: 0px; text-align: left; } .featurePageBack{ color: #053385; font-family: Segoe UI; font-size: 14px; font-weight: 600;z line-height: 19px; letter-spacing: -0.02em; text-align: center; } .Important-note-section{ margin-top: 2px; background: #EBF1F9; border-radius: 4px; font-family: Segoe UI; font-style: normal; font-weight: normal; font-size: 14px; line-height: 20px; color: #323130; padding: 16px 16px 16px 24px; } } </style> <script> (function(webapi, $){ function safeAjax(ajaxOptions) { var deferredAjax = $.Deferred(); shell.getTokenDeferred().done(function (token) { // add headers for AJAX if (!ajaxOptions.headers) { $.extend(ajaxOptions, { headers: { "__RequestVerificationToken": token } }); } else { ajaxOptions.headers["__RequestVerificationToken"] = token; } $.ajax(ajaxOptions) .done(function(data, textStatus, jqXHR) { validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve); }).fail(deferredAjax.reject); //AJAX }).fail(function () { deferredAjax.rejectWith(this, arguments); // on token failure pass the token AJAX and args }); return deferredAjax.promise(); } webapi.safeAjax = safeAjax; })(window.webapi = window.webapi || {}, jQuery) </script> <script type="text/javascript"> function getNoResultSvg(){ return `<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <circle cx="100" cy="100" r="100" fill="#BFBFBF"/> <g style="mix-blend-mode:multiply" filter="url(#filter0_dd_645_4449)"> <path d="M85 53H53.7864C52.7688 53 51.9135 53.764 51.7991 54.775L40 159H160L171.719 65.2481C171.868 64.0544 170.937 63 169.734 63H101L85 53Z" fill="white"/> </g> <g filter="url(#filter1_b_645_4449)"> <path d="M85 53H53.7864C52.7688 53 51.9135 53.764 51.7991 54.775L40 159H160L171.719 65.2481C171.868 64.0544 170.937 63 169.734 63H101L85 53Z" fill="url(#paint0_linear_645_4449)"/> </g> <g style="mix-blend-mode:hard-light" filter="url(#filter2_ii_645_4449)"> <path d="M85 53H53.7864C52.7688 53 51.9135 53.764 51.7991 54.775L40 159H160L171.719 65.2481C171.868 64.0544 170.937 63 169.734 63H101L85 53Z" fill="#808080"/> <path d="M85 53H53.7864C52.7688 53 51.9135 53.764 51.7991 54.775L40 159H160L171.719 65.2481C171.868 64.0544 170.937 63 169.734 63H101L85 53Z" fill="url(#pattern0)" fill-opacity="0.02"/> </g> <g style="mix-blend-mode:multiply" filter="url(#filter3_dd_645_4449)"> <path d="M59 65H28.3287C27.1038 65 26.1667 66.0911 26.3516 67.302L40.3571 159H160L148.245 76.7172C148.105 75.7319 147.261 75 146.265 75H75L59 65Z" fill="white"/> </g> <g filter="url(#filter4_b_645_4449)"> <path d="M59 65H28.3287C27.1038 65 26.1667 66.0911 26.3516 67.302L40.3571 159H160L148.245 76.7172C148.105 75.7319 147.261 75 146.265 75H75L59 65Z" fill="url(#paint1_linear_645_4449)"/> </g> <g style="mix-blend-mode:hard-light" filter="url(#filter5_ii_645_4449)"> <path d="M59 65H28.3287C27.1038 65 26.1667 66.0911 26.3516 67.302L40.3571 159H160L148.245 76.7172C148.105 75.7319 147.261 75 146.265 75H75L59 65Z" fill="#808080"/> <path d="M59 65H28.3287C27.1038 65 26.1667 66.0911 26.3516 67.302L40.3571 159H160L148.245 76.7172C148.105 75.7319 147.261 75 146.265 75H75L59 65Z" fill="url(#pattern1)" fill-opacity="0.02"/> </g> <path d="M103.538 22.2069C103.095 19.5881 100.992 17.5356 98.3077 17.1034C100.992 16.6713 103.095 14.6188 103.538 12C103.981 14.6188 106.085 16.6713 108.769 17.1034C106.085 17.5356 103.981 19.5881 103.538 22.2069Z" fill="white"/> <path d="M80 28.5862C83.3551 29.1265 85.9847 31.692 86.5385 34.9655C87.0922 31.692 89.7218 29.1265 93.0769 28.5862C89.7218 28.046 87.0922 25.4804 86.5385 22.2069C85.9847 25.4804 83.3551 28.046 80 28.5862Z" fill="white"/> <path d="M93.0769 38.7931C98.4452 39.6575 102.653 43.7624 103.538 49C104.424 43.7624 108.632 39.6575 114 38.7931C108.632 37.9287 104.424 33.8238 103.538 28.5862C102.653 33.8238 98.4452 37.9287 93.0769 38.7931Z" fill="white"/> <circle cx="75" cy="116" r="6" fill="#BFBFBF"/> <circle cx="97" cy="116" r="6" fill="#BFBFBF"/> <circle cx="119" cy="116" r="6" fill="#BFBFBF"/> <defs> <filter id="filter0_dd_645_4449" x="32" y="46" width="147.735" height="122" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> <feOffset dy="1"/> <feGaussianBlur stdDeviation="4"/> <feColorMatrix type="matrix" values="0 0 0 0 0.25098 0 0 0 0 0.25098 0 0 0 0 0.25098 0 0 0 0.2 0"/> <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_645_4449"/> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> <feOffset dy="3"/> <feGaussianBlur stdDeviation="2"/> <feColorMatrix type="matrix" values="0 0 0 0 0.25098 0 0 0 0 0.25098 0 0 0 0 0.25098 0 0 0 0.14 0"/> <feBlend mode="normal" in2="effect1_dropShadow_645_4449" result="effect2_dropShadow_645_4449"/> <feBlend mode="normal" in="SourceGraphic" in2="effect2_dropShadow_645_4449" result="shape"/> </filter> <filter id="filter1_b_645_4449" x="38" y="51" width="135.735" height="110" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feGaussianBlur in="BackgroundImage" stdDeviation="1"/> <feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_645_4449"/> <feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_645_4449" result="shape"/> </filter> <filter id="filter2_ii_645_4449" x="40" y="53" width="131.735" height="106" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> <feOffset dy="1"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0"/> <feBlend mode="normal" in2="shape" result="effect1_innerShadow_645_4449"/> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> <feOffset/> <feGaussianBlur stdDeviation="3"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/> <feBlend mode="normal" in2="effect1_innerShadow_645_4449" result="effect2_innerShadow_645_4449"/> </filter> <pattern id="pattern0" patternContentUnits="objectBoundingBox" width="0.454545" height="0.566038"> <use xlink:href="#image0_645_4449" transform="scale(0.00757576 0.00943396)"/> </pattern> <filter id="filter3_dd_645_4449" x="18.3282" y="58" width="149.672" height="110" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> <feOffset dy="1"/> <feGaussianBlur stdDeviation="4"/> <feColorMatrix type="matrix" values="0 0 0 0 0.25098 0 0 0 0 0.25098 0 0 0 0 0.25098 0 0 0 0.2 0"/> <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_645_4449"/> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> <feOffset dy="3"/> <feGaussianBlur stdDeviation="2"/> <feColorMatrix type="matrix" values="0 0 0 0 0.25098 0 0 0 0 0.25098 0 0 0 0 0.25098 0 0 0 0.14 0"/> <feBlend mode="normal" in2="effect1_dropShadow_645_4449" result="effect2_dropShadow_645_4449"/> <feBlend mode="normal" in="SourceGraphic" in2="effect2_dropShadow_645_4449" result="shape"/> </filter> <filter id="filter4_b_645_4449" x="24.3282" y="63" width="137.672" height="98" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feGaussianBlur in="BackgroundImage" stdDeviation="1"/> <feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_645_4449"/> <feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_645_4449" result="shape"/> </filter> <filter id="filter5_ii_645_4449" x="26.3282" y="65" width="133.672" height="94" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> <feFlood flood-opacity="0" result="BackgroundImageFix"/> <feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> <feOffset dy="1"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0"/> <feBlend mode="normal" in2="shape" result="effect1_innerShadow_645_4449"/> <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> <feOffset/> <feGaussianBlur stdDeviation="3"/> <feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> <feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/> <feBlend mode="normal" in2="effect1_innerShadow_645_4449" result="effect2_innerShadow_645_4449"/> </filter> <pattern id="pattern1" patternContentUnits="objectBoundingBox" width="0.447761" height="0.638298"> <use xlink:href="#image0_645_4449" transform="scale(0.00746269 0.0106383)"/> </pattern> <linearGradient id="paint0_linear_645_4449" x1="106" y1="159" x2="106" y2="53" gradientUnits="userSpaceOnUse"> <stop stop-color="white" stop-opacity="0.5"/> <stop offset="1" stop-color="white"/> </linearGradient> <linearGradient id="paint1_linear_645_4449" x1="93" y1="159" x2="93" y2="65" gradientUnits="userSpaceOnUse"> <stop stop-color="white" stop-opacity="0.5"/> <stop offset="1" stop-color="white"/> </linearGradient> <image id="image0_645_4449" width="60" height="60" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAM9ElEQVRoQ+WbS6iO3RvG1zv/HCcbiRhR2mJESlJbjBwmGwOH0laUHAaEJLXFwCG1FROHgcPEYbRFSaJtRKQYyCltTBxi/v77rc/v+e53efic+fo/k733+z7Peta67+u+7uu+19qNlFKz2Wwmr/fv36e//vorNRqN1NbWll68eJFWrlyZDh06lG/h856enrRq1ap0//79NH78eAbIn3d1deX7+HzcuHH5uSFDhqRdu3alhQsXpkGDBqXDhw/ncXzG927cuDHfV16My707d+5MW7Zsyb9znTx5Mi1atCiPe/r06Wo8xzl48GBavXp1y3Dt7e2pwWp56NSpU3nSXEz8xo0bqbOzM23evDlNnDgxL2Tq1Km1k+3u7k7Lly9PT548SW/evEkPHz7MBtFAdQu8d+9eNsqwYcOyUb2YC9/duXOneteFCxfS3r1708WLFz8a0+eYI89gEO5//fp1unLlSlq3bl3lFNbECrPJuPH58+dpxIgRlRVnzZqVX6K19LjeZIA4MV56/fr1NGDAgDyPjo6O/LyoiBbnfZs2baq8yj19fX1pypQpGRkgQRREBOqciB4dVaKD50Rhb29vdkS1YLyJl7HO4MGD0+XLl7N3gc6RI0eqiTsJ4CECNIgTixPw/hMnTqTFixe3IMTvWKjo0fjRc7t3706zZ8/OhovjAF++8xkd5LOEAWuIKMqQjhN89+5dOn78eMZ/tKyxVOcVJwu0jTPuZyy97SQcUzRhOIwsspxLNKjvNl4/CvQPCPVzx+jv70/Dhw9vCYNGT09Pk/iM+MeaWkUIAV/gFi8GBrY8Sxz698uXL/NnkNvYsWPTnDlzsvEw1s2bN9OBAwfSjBkzEvdJSBDP7du3M19w8TtXJCU9Vs5BD4O0JUuWZNLlAs4gFT7h3aAhQxpPMAm8Ey9wD2yYjGzM9yys9KYLEmJ4yEn7TLzH+OY7Gdh3C1vev2zZsvwxxnFhn+Iax/kc1+QF/2or8z5IZ/To0Wny5MkVAliQ6UYYx3DDyDDvvHnzsievXbuWn/UyhFywiAJtR48e/ZsHOjo6mmPGjKlYkcBnEuREXs53+/fvzy/CyqQMyArvleQUYyjGP+GBxy9dupQhbAqJKOFdkhqxt3Tp0gx7UEdoyCm+M44vWfEew6TUCDq1ysPANl7fwtpYG0P9yazdaGtra0I4JaUbd8ZNhBjW4n48Rkp59OhRTl2ID7xk/kNY4LlJkyZlDnCsFst++IPxZVXfheqD5UuOQRjhfREBhPWsOX/Hjh3p1q1bmf3hAuAMshpdXV1NYgnoMLCyMnpYliXutm/f3pJCmKQpRQka0wKLZTJOKhIPKcN7CZWRI0fmBZaCg3skQaD6+PHjKi8TFuRaWRjCO3/+fItyjA7KkMZbeoeBo3pSUzPpmFejAPF+BUQUIMZsjPlSoGDcuXPn5nDwvihY8CYeYg56TSaPjMwzIMpxTGOm1oxaIU3cQVaICAYDopIMi1aUlyJe65vHhSaeNTfrXYsOoMXCIJlt27alq1evZo/UhZEe5DsLG3OzaUsGVpJqDBELKrhAUKO3t7eJGIg52LSBIGEBwK2MQVHBQMat8GSBa9asqcaMOdkcavEQ41mmLlFmLEeol4a36MCQzI3Uxe979uypNEaultrb23PxwJfKRqSecatVzZHCxXtdJN6bOXNmjnEGJq6ix/gdj1DFYCCIJ5aKpqpoABdYR3LRKHXP+CyG3bdvX34XKM0xzAIV58aXrI3VYWEKCiSaLEjiVyczKESiCHAMIAaBRJXE5Bj72LFj+Z1CG/hj3GfPnuWxuCwzZW0NGHMwnxmjhMi5c+dyWMYFi04MnmNYSieOgTE5mZTiBQxhVLwKgWApjIQ3WZD1rF7XWLEQIMYhp1isx5RXpiyeFQVMHi2P0QkVuCVmB9DBfCLrR/hjCMIshygeVpXwUpnWuDWnxs4GL4OUtCZw9mJQvGbXIzYXuA+CAmJldeQETYexaGBBFC5kEn7yN8al42HBEtWi8tQCyLAk7lsaAN9DDixUIiG+5AVhKHNKiBb4kSPwEuixzuZZ5aIGjfk8xi7jYwAFEQw9bdq0KsXqzJbi4Uf0jEACsBUhpiI8YUcjavA6whGuos1c+yNSZwXpsm78nRUNRmBx9sVMV8Z0LCa4j0ahuiFygWQnpxBm2cNfIypUW8bcv4kK4jl2PCNRxU7ljxAVymLegVGePn2aVVds8LW0eBQIsVBwgU6uLM+IMYp0Cn+L+s/lVJQT+dq2kMwd+1r+zngwMhe/K3+j+lL6RqET05akRjMRovuItMpAjypJQrADSI0aCw7jMXqfOpq45hl+37p1a0ufq+w78Tf3WQkxpjFMakJBlXmdhSAvyRpohvisi1fONvr6+ppQvbm27DQYy7wYZo1dQxaB2ICg4IC6Ij0igglHUVAaKMZfbBZGweF4zENBRNjQf47awWf46TzhgLxgJ+EEzJ0xl5aCwclBGvPnz88vfPXqVe6QELOOESsWPGdBUZaAsSNZVx6a+33euRKrvA+nvX37NlddpCdJr1SROYZLC1owx8/5HQOws/A1iJBRo6W/BxGxHPwWRDQ6OzubeMaghtUspmU7oYq36G4SQxqlbpcA6FL2xfISOFG52EK1X4bxREFdj8wQI+Toczkmc1MolbkctHBNnz49x3VUYRVLl5UJZGWngoeBBpDEILZto4Uj9TMRmvkWG/G+qKycaCwO+MzOSUvh/mFTLcZmWcbyN+Nv2LAh801s8ltdNbq7u5t4jdiQVFRHDG4slOmonAxQw6vuH1nvWgTQRsJQFBEyP0bCqLGJT3HCFcvLWChopG/e5Sy3S7+m5YkUZaEQhdqYCdmWHTp0aO5kfGp30i7nr9ydrCAdC3IW8eDBg5wv3fON8EMEGBdCRZEgOohRvEXJJnKMe4wqm4ucKGwUO3W7FzFemSc9LutquIcGg8qOe4n9s2fP/pMygTS9rP9yjUu4xFqYharWYmcEhZZZOm6GS14xNUWp6HYHrB7jKJZ9piB+ooCsnhAGqrUyLgkD5WHMwyV3MKbziUWEmoH7ESWIEeSuY4FUmhUteVg2jenhd+3UI4YsTGKDXr2u4YR42fZhDeh0LhxaScv+/v4m3YefUXtq3T+pwqo8LDt/yZYjC1iwYEE6c+bMFx9viHu7tn49+CLD1533wDvferzB8tBeeY5ztlp+V7sFlWWeBnolu4K8UkUZbsDVwy8gydZyeX/LcYdG45827Zee6/gv7BCW5zpYNBekWLG0RxrqzlEQ3x5y4UFyLIwH+7rHq6jXwpAEn61fvz5L0oEDB2b1pGwsO6XUudbOP7NTmhsAdvyiTnXikfoVEDAlKooFlydwGAtRYUfDFMGChHCZDWTYsnjwb8VPhG3U/vwuCzM2AmTUqFGV2LAnlp+J57Qc0O5ibNvieSQkXqDqiduacQEMyguoj2NnIhYIHj7hyAIqiIY+hGLlxXimn5hf7a7EZoVHl2JruGxiMJ7FUNXEQ5LZ6I6BXx4g0YJUTbH7EDfUypzIMxhvxYoVLbuEThYDwyE06Lk88KZKgpwwCoxtk93QiOInGj4WL7G533LkAauycz5hwoTKg1iYM5Juf7pgVExdM436k8nTxyIc3IJVKztBJgxSPJjiuwkFDMD35Sm/eEAtanwQw44GIeYxKreP4rZPhjQdj7iJ/L27guXpuF+1K+hxKZzgxh/OscVDSK5du/bvBf/JBbvQjMeZWEhsJrYk63BulMOuHqYDBaCvti8tW8cDYm6nxj5yPJknUaCosLCNANnUOEVdyfagQfaWiHy3pWHcW2IsOcV4jWmQgsH2EqGk17mn2vLhBMDXHu5igK/ZCuF+YyxOtG4rpDzxV9bjEiC9sXgmWiRgEC7LRQmUWCau88E0zyHHDWmMYDzQqfQsZIQPEy4bAHomniLQa/HoBN7lqEXZCCh3DWKOLnNv2QtzbrFvFhsMZKKqeNBysCaTQSXFk3PAxdMAtHacvAornmP2KIMT+JMOuVULLvdpPeMRC3D3kfAMxohNAr3IzygzSWvm0CgIyi5p3PyK7zS2eTfNBOYljyhr4wGZKHvrjlll4VHqYHIg2xj0pNC/ETplH9rOhd60Vfon7lFlp9DT+n84NmwN39LTiv0qvBoLAzwXd+Bl2zqCiN6O8pM9H686eMc+VzyHZQUHlBEP36MEqyMPTORndz3Kfx8w9n7mP3WUXY+PtlpIK7+jyHdLE8N/yz9vxCLffz3yDBhc5GG5iqXVvPG0zZe2Pr/3+DGsj+z7FcePq+KBOtcNKCxTV2zD5ljLPraiwONGQNYyEU/ZuOMnwgUpat/KDkss+n/Ff9RUaclyirxHcX/37t3ctRBeLJZ6lQXZIKh6vR/+oy32gSWzWC19TkXVFQCQFedHovS1Vx1P6cUT+BrwU+dV/gf5nFrpDQ6oIQAAAABJRU5ErkJggg=="/> </defs> </svg>` } function getErrorSvg(){ return `<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg"> <circle cx="100" cy="100" r="100" fill="#BFBFBF"/> <path d="M110.221 49V79.2442H140.465L110.221 49Z" fill="#F8F8FA"/> <path d="M107.552 81.9128V49H61V151H140.465V81.9128H107.552ZM86.2035 102.076C86.2035 100.765 87.265 99.7035 88.5756 99.7035C89.8862 99.7035 90.9477 100.765 90.9477 102.076C90.9477 103.386 89.8862 104.448 88.5756 104.448C87.265 104.448 86.2035 103.386 86.2035 102.076ZM114.781 118.443C114.497 118.704 114.135 118.834 113.779 118.834C113.376 118.834 112.978 118.674 112.688 118.354C110.061 115.49 105.815 113.782 101.326 113.782C96.8364 113.782 92.5904 115.49 89.9633 118.354C89.4117 118.959 88.4688 118.995 87.8699 118.443C87.265 117.892 87.2235 116.955 87.7809 116.35C91.007 112.833 95.9409 110.817 101.326 110.817C106.71 110.817 111.644 112.833 114.87 116.35C115.428 116.949 115.386 117.892 114.781 118.443ZM114.076 104.448C112.765 104.448 111.703 103.386 111.703 102.076C111.703 100.765 112.765 99.7035 114.076 99.7035C115.386 99.7035 116.448 100.765 116.448 102.076C116.448 103.386 115.386 104.448 114.076 104.448Z" fill="#F8F8FA"/> </svg>`; } function getL2TimelineStatusSvg(){ return `<svg width="30" height="26" viewBox="0 0 30 26" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M10.4912 14.4444C9.14123 14.4444 8.04685 15.5762 8.04685 16.9722V23.4722C8.04685 24.8683 9.14123 26 10.4912 26H26.5542C27.9042 26 28.9986 24.8683 28.9986 23.4722V16.9722C28.9986 15.5762 27.9042 14.4444 26.5542 14.4444H10.4912ZM2.45934 17.1873L2.45971 24.9167C2.45971 25.515 2.92873 26 3.50729 26C4.03765 26 4.47595 25.5924 4.54532 25.0637L4.55488 24.9167L4.55541 17.2058C4.23096 17.2891 3.89157 17.3333 3.5422 17.3333C3.16775 17.3333 2.80477 17.2825 2.45934 17.1873ZM10.4912 16.6111H26.5542C26.7471 16.6111 26.9034 16.7728 26.9034 16.9722V23.4722C26.9034 23.6717 26.7471 23.8333 26.5542 23.8333H10.4912C10.2984 23.8333 10.142 23.6717 10.142 23.4722V16.9722C10.142 16.7728 10.2984 16.6111 10.4912 16.6111ZM3.5076 10.2439C2.03568 10.2439 0.842443 11.4778 0.842443 13C0.842443 14.5222 2.03568 15.7561 3.5076 15.7561C4.97953 15.7561 6.17277 14.5222 6.17277 13C6.17277 11.4778 4.97953 10.2439 3.5076 10.2439ZM10.4974 0C9.14736 0 8.05298 1.13172 8.05298 2.52778V9.02778C8.05298 10.4238 9.14736 11.5556 10.4974 11.5556H26.5603C27.9103 11.5556 29.0047 10.4238 29.0047 9.02778V2.52778C29.0047 1.20153 28.017 0.113833 26.7608 0.00837951L26.5603 0H10.4974ZM10.4974 2.16667H26.5603L26.6404 2.1762C26.7947 2.21363 26.9095 2.35683 26.9095 2.52778V9.02778C26.9095 9.22721 26.7532 9.38889 26.5603 9.38889H10.4974C10.3045 9.38889 10.1482 9.22721 10.1482 9.02778V2.52778C10.1482 2.32834 10.3045 2.16667 10.4974 2.16667ZM3.50729 0C2.97694 0 2.53864 0.407555 2.46927 0.936331L2.45971 1.08333L2.45934 8.81274C2.80477 8.71746 3.16775 8.66667 3.5422 8.66667C3.89157 8.66667 4.23096 8.71088 4.55541 8.7942L4.55488 1.08333C4.55488 0.485025 4.08586 0 3.50729 0Z" fill="#0258AD"/> </svg>` } function getDateTimelineStatusSvg(){ return `<svg width="30" height="28" viewBox="0 0 23 28" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M2.09855 12.9949L5.39855 13C6.00607 13.0009 6.50086 13.3024 6.50004 14C6.49928 14.6478 6.07694 14.9279 5.52978 15L5.40149 15.0083L2.99853 15L3.00004 26H5.40002C5.96413 26 6.50004 26.2671 6.50004 27C6.50004 27.6478 6.07537 27.9185 5.5283 27.9915L5.40002 28H2.10002C1.5359 28 1.07096 27.5124 1.00742 26.8842L1.00002 26.7368L0.99707 14.258C0.99707 13.6096 1.42249 13.0755 1.97014 13.0032L2.09855 12.9949ZM5.40002 0C6.00753 0 6.50002 0.302377 6.50002 1C6.50002 1.64779 6.07537 1.91854 5.5283 1.9915L5.40002 2L3.00002 1.9915L2.99853 9.00624L5.39853 9C5.96265 9 6.50002 9.5 6.49261 9.95171L6.50002 10C6.50002 10.5 6.07685 10.9185 5.52978 10.9915L5.4015 11H2.1015C1.53738 11 1.07244 10.5124 1.0089 9.88415L1.0015 9.73684L1.00002 1.26316C1.00002 0.615365 1.42466 0.0814646 1.97173 0.00849819L2.10002 0H5.40002ZM21.6434 5C22.2509 5 22.7434 5.31088 22.7434 6.0085C22.7434 6.65629 22.3188 6.97966 21.7717 7.05263L21.6434 7.06113H8.44341C7.8359 7.06113 7.24343 6.70612 7.24343 6.0085C7.24343 5.36071 7.76806 5.08146 8.31513 5.0085L8.44341 5H21.6434Z" fill="#0258AD"/> <path d="M22.8717 18.0085C22.8717 17.3109 22.3792 17 21.7717 17H8.57169L8.44341 17.0085C7.89634 17.0815 7.37172 17.3607 7.37172 18.0085C7.37172 18.7061 7.96418 19.0611 8.57169 19.0611H21.7717L21.9 19.0526C22.4471 18.9797 22.8717 18.6563 22.8717 18.0085Z" fill="#0258AD"/> <path d="M22.8717 22.9474C22.8717 22.2497 22.3792 21.9389 21.7717 21.9389H8.57169L8.44341 21.9474C7.89634 22.0203 7.37172 22.2996 7.37172 22.9474C7.37172 23.645 7.96418 24 8.57169 24H21.7717L21.9 23.9915C22.4471 23.9185 22.8717 23.5952 22.8717 22.9474Z" fill="#0258AD"/> </svg>`; } function getFilledFilterSvg(){ return `<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M10 10C11.1046 10 12 9.10457 12 8C12 6.89543 11.1046 6 10 6C8.89543 6 8 6.89543 8 8C8 9.10457 8.89543 10 10 10ZM10 12C12.2091 12 14 10.2091 14 8C14 5.79086 12.2091 4 10 4C8.13342 4 6.56545 5.27853 6.12406 7.00762C6.08342 7.00259 6.04201 7 6 7H2C1.44772 7 1 7.44772 1 8C1 8.55228 1.44772 9 2 9H6C6.04201 9 6.08342 8.99741 6.12406 8.99238C6.56545 10.7215 8.13342 12 10 12ZM2 23C1.44772 23 1 23.4477 1 24C1 24.5523 1.44772 25 2 25H10C10.042 25 10.0834 24.9974 10.1241 24.9924C10.5655 26.7215 12.1334 28 14 28C16.2091 28 18 26.2091 18 24C18 21.7909 16.2091 20 14 20C12.1334 20 10.5655 21.2785 10.1241 23.0076C10.0834 23.0026 10.042 23 10 23H2ZM1 16C1 15.4477 1.44772 15 2 15H15C15.5523 15 16 15.4477 16 16C16 16.5523 15.5523 17 15 17H2C1.44772 17 1 16.5523 1 16ZM17 7C16.4477 7 16 7.44772 16 8C16 8.55228 16.4477 9 17 9H30C30.5523 9 31 8.55228 31 8C31 7.44772 30.5523 7 30 7H17ZM20 24C20 23.4477 20.4477 23 21 23H22.5H30C30.5523 23 31 23.4477 31 24C31 24.5523 30.5523 25 30 25H21C20.4477 25 20 24.5523 20 24ZM28.8261 15C28.9398 15.4815 29 15.9837 29 16.5C29 16.6682 28.9936 16.835 28.9811 17H30C30.5523 17 31 16.5523 31 16C31 15.4477 30.5523 15 30 15H28.8261ZM16 24C16 25.1046 15.1046 26 14 26C12.8954 26 12 25.1046 12 24C12 22.8954 12.8954 22 14 22C15.1046 22 16 22.8954 16 24Z" fill="#0258AD"/> <path d="M28 16.5C28 19.5376 25.5376 22 22.5 22C19.4624 22 17 19.5376 17 16.5C17 13.4624 19.4624 11 22.5 11C25.5376 11 28 13.4624 28 16.5ZM25.3766 14.2345C25.1379 13.9959 24.751 13.9959 24.5123 14.2345L21.2778 17.4691L20.4877 16.679C20.249 16.4403 19.8621 16.4403 19.6234 16.679C19.3848 16.9176 19.3848 17.3046 19.6234 17.5432L20.8457 18.7655C21.0843 19.0041 21.4712 19.0041 21.7099 18.7655L25.3766 15.0988C25.6152 14.8601 25.6152 14.4732 25.3766 14.2345Z" fill="#0258AD"/> </svg>`; } function getEmptyFilterSvg(){ return `<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M12 8C12 9.10457 11.1046 10 10 10C8.89543 10 8 9.10457 8 8C8 6.89543 8.89543 6 10 6C11.1046 6 12 6.89543 12 8ZM14 8C14 10.2091 12.2091 12 10 12C8.13342 12 6.56545 10.7215 6.12406 8.99238C6.08342 8.99741 6.04201 9 6 9H2C1.44772 9 1 8.55228 1 8C1 7.44772 1.44772 7 2 7H6C6.04201 7 6.08342 7.00259 6.12406 7.00762C6.56545 5.27853 8.13342 4 10 4C12.2091 4 14 5.79086 14 8ZM1 24C1 23.4477 1.44772 23 2 23H10C10.042 23 10.0834 23.0026 10.1241 23.0076C10.5655 21.2785 12.1334 20 14 20C16.2091 20 18 21.7909 18 24C18 26.2091 16.2091 28 14 28C12.1334 28 10.5655 26.7215 10.1241 24.9924C10.0834 24.9974 10.042 25 10 25H2C1.44772 25 1 24.5523 1 24ZM2 15C1.44772 15 1 15.4477 1 16C1 16.5523 1.44772 17 2 17H15C15.5523 17 16 16.5523 16 16C16 15.4477 15.5523 15 15 15H2ZM16 8C16 7.44772 16.4477 7 17 7H30C30.5523 7 31 7.44772 31 8C31 8.55228 30.5523 9 30 9H17C16.4477 9 16 8.55228 16 8ZM21 23C20.4477 23 20 23.4477 20 24C20 24.5523 20.4477 25 21 25H30C30.5523 25 31 24.5523 31 24C31 23.4477 30.5523 23 30 23H21ZM25.8759 15.0076C25.9166 15.0026 25.958 15 26 15H30C30.5523 15 31 15.4477 31 16C31 16.5523 30.5523 17 30 17H26C25.958 17 25.9166 16.9974 25.8759 16.9924C25.4345 18.7215 23.8666 20 22 20C19.7909 20 18 18.2091 18 16C18 13.7909 19.7909 12 22 12C23.8666 12 25.4345 13.2785 25.8759 15.0076ZM14 26C15.1046 26 16 25.1046 16 24C16 22.8954 15.1046 22 14 22C12.8954 22 12 22.8954 12 24C12 25.1046 12.8954 26 14 26ZM24 16C24 17.1046 23.1046 18 22 18C20.8954 18 20 17.1046 20 16C20 14.8954 20.8954 14 22 14C23.1046 14 24 14.8954 24 16Z" fill="#0258AD"/> </svg>`; } function getClearSvg(){ return `<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4.5 5L4.5 9C4.5 9.27614 4.72386 9.5 5 9.5C5.27614 9.5 5.5 9.27614 5.5 9L5.5 5C5.5 4.72386 5.27614 4.5 5 4.5C4.72386 4.5 4.5 4.72386 4.5 5ZM7 4.5C7.27614 4.5 7.5 4.72386 7.5 5V9C7.5 9.27614 7.27614 9.5 7 9.5C6.72386 9.5 6.5 9.27614 6.5 9V5C6.5 4.72386 6.72386 4.5 7 4.5ZM8 2H11C11.2761 2 11.5 2.22386 11.5 2.5C11.5 2.77614 11.2761 3 11 3H10.4475L9.69462 9.77608C9.55394 11.0422 8.48378 12 7.20991 12H4.79008C3.51621 12 2.44605 11.0422 2.30537 9.77608L1.55247 3H1C0.723858 3 0.5 2.77614 0.5 2.5C0.5 2.22386 0.723858 2 1 2H4C4 0.89543 4.89543 0 6 0C7.10457 0 8 0.895431 8 2ZM6 1C5.44772 1 5 1.44772 5 2H7C7 1.44772 6.55229 1 6 1ZM2.55863 3L3.29925 9.66565C3.38366 10.4253 4.02575 11 4.79008 11H7.20991C7.97423 11 8.61633 10.4253 8.70073 9.66565L9.44136 3H2.55863Z" fill="#0258AD"/> </svg>`; } function getShareSvg(){ return `<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M29 5C29 6.10457 28.1046 7 27 7C25.8954 7 25 6.10457 25 5C25 3.89543 25.8954 3 27 3C28.1046 3 29 3.89543 29 5ZM31 5C31 7.20914 29.2091 9 27 9C25.8255 9 24.7693 8.49383 24.0375 7.68774L17.2354 12.3642C17.727 13.4761 18 14.7061 18 16C18 17.4218 17.6703 18.7665 17.0833 19.962L24.3185 24.0318C25.028 23.3905 25.9684 23 27 23C29.2091 23 31 24.7909 31 27C31 29.2091 29.2091 31 27 31C24.7909 31 23 29.2091 23 27C23 26.5469 23.0753 26.1114 23.2142 25.7053L16.0056 21.6505C14.3557 23.6934 11.8304 25 9 25C4.02944 25 0 20.9706 0 16C0 11.0294 4.02944 7 9 7C11.9588 7 14.5842 8.42782 16.2246 10.632L23.1025 5.90352C23.0354 5.61317 23 5.31072 23 5C23 2.79086 24.7909 1 27 1C29.2091 1 31 2.79086 31 5ZM16 16C16 19.866 12.866 23 9 23C5.13401 23 2 19.866 2 16C2 12.134 5.13401 9 9 9C12.866 9 16 12.134 16 16ZM9 14C9.55228 14 10 13.5523 10 13C10 12.4477 9.55228 12 9 12C8.44772 12 8 12.4477 8 13C8 13.5523 8.44772 14 9 14ZM10.8559 15.3572C11.5527 14.8078 12 13.9562 12 13C12 11.3431 10.6569 10 9 10C7.34315 10 6 11.3431 6 13C6 13.9562 6.44732 14.8078 7.1441 15.3572C7.12488 15.3649 7.10571 15.3727 7.08658 15.3806C6.47995 15.6319 5.92876 16.0002 5.46447 16.4645C5.00017 16.9288 4.63188 17.48 4.3806 18.0866C4.12933 18.6932 4 19.3434 4 20H6C6 19.606 6.0776 19.2159 6.22836 18.8519C6.37913 18.488 6.6001 18.1573 6.87868 17.8787C7.15726 17.6001 7.48797 17.3791 7.85195 17.2284C8.21593 17.0776 8.60603 17 9 17C9.39397 17 9.78407 17.0776 10.1481 17.2284C10.512 17.3791 10.8427 17.6001 11.1213 17.8787C11.3999 18.1573 11.6209 18.488 11.7716 18.8519C11.9224 19.2159 12 19.606 12 20H14C14 19.3434 13.8707 18.6932 13.6194 18.0866C13.3681 17.48 12.9998 16.9288 12.5355 16.4645C12.0712 16.0002 11.52 15.6319 10.9134 15.3806C10.8943 15.3727 10.8751 15.3649 10.8559 15.3572ZM27 29C28.1046 29 29 28.1046 29 27C29 25.8954 28.1046 25 27 25C25.8954 25 25 25.8954 25 27C25 28.1046 25.8954 29 27 29Z" fill="#0258AD"/> </svg>`; } function getDisabledShareSvg(){ return `<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M29 5C29 6.10457 28.1046 7 27 7C25.8954 7 25 6.10457 25 5C25 3.89543 25.8954 3 27 3C28.1046 3 29 3.89543 29 5ZM31 5C31 7.20914 29.2091 9 27 9C25.8255 9 24.7693 8.49383 24.0375 7.68774L17.2354 12.3642C17.727 13.4761 18 14.7061 18 16C18 17.4218 17.6703 18.7665 17.0833 19.962L24.3185 24.0318C25.028 23.3905 25.9684 23 27 23C29.2091 23 31 24.7909 31 27C31 29.2091 29.2091 31 27 31C24.7909 31 23 29.2091 23 27C23 26.5469 23.0753 26.1114 23.2142 25.7053L16.0056 21.6505C14.3557 23.6934 11.8304 25 9 25C4.02944 25 0 20.9706 0 16C0 11.0294 4.02944 7 9 7C11.9588 7 14.5842 8.42782 16.2246 10.632L23.1025 5.90352C23.0354 5.61317 23 5.31072 23 5C23 2.79086 24.7909 1 27 1C29.2091 1 31 2.79086 31 5ZM16 16C16 19.866 12.866 23 9 23C5.13401 23 2 19.866 2 16C2 12.134 5.13401 9 9 9C12.866 9 16 12.134 16 16ZM9 14C9.55228 14 10 13.5523 10 13C10 12.4477 9.55228 12 9 12C8.44772 12 8 12.4477 8 13C8 13.5523 8.44772 14 9 14ZM10.8559 15.3572C11.5527 14.8078 12 13.9562 12 13C12 11.3431 10.6569 10 9 10C7.34315 10 6 11.3431 6 13C6 13.9562 6.44732 14.8078 7.1441 15.3572C7.12488 15.3649 7.10571 15.3727 7.08658 15.3806C6.47995 15.6319 5.92876 16.0002 5.46447 16.4645C5.00017 16.9288 4.63188 17.48 4.3806 18.0866C4.12933 18.6932 4 19.3434 4 20H6C6 19.606 6.0776 19.2159 6.22836 18.8519C6.37913 18.488 6.6001 18.1573 6.87868 17.8787C7.15726 17.6001 7.48797 17.3791 7.85195 17.2284C8.21593 17.0776 8.60603 17 9 17C9.39397 17 9.78407 17.0776 10.1481 17.2284C10.512 17.3791 10.8427 17.6001 11.1213 17.8787C11.3999 18.1573 11.6209 18.488 11.7716 18.8519C11.9224 19.2159 12 19.606 12 20H14C14 19.3434 13.8707 18.6932 13.6194 18.0866C13.3681 17.48 12.9998 16.9288 12.5355 16.4645C12.0712 16.0002 11.52 15.6319 10.9134 15.3806C10.8943 15.3727 10.8751 15.3649 10.8559 15.3572ZM27 29C28.1046 29 29 28.1046 29 27C29 25.8954 28.1046 25 27 25C25.8954 25 25 25.8954 25 27C25 28.1046 25.8954 29 27 29Z" fill="#C4C4C4"/> </svg> `; } function getCopySvg(){ return `<svg width="15" height="25" viewBox="0 0 10 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M1.00029 2.08525L1 8.5C1 9.82548 2.03154 10.91 3.33562 10.9947L3.5 11L7.9144 11.0007C7.70828 11.5829 7.15285 12 6.5 12H3C1.34315 12 0 10.6569 0 9V3.5C0 2.84678 0.417543 2.29109 1.00029 2.08525ZM8.5 0C9.32843 0 10 0.671573 10 1.5V8.5C10 9.32843 9.32843 10 8.5 10H3.5C2.67157 10 2 9.32843 2 8.5V1.5C2 0.671573 2.67157 0 3.5 0H8.5ZM8.5 1H3.5C3.22386 1 3 1.22386 3 1.5V8.5C3 8.77614 3.22386 9 3.5 9H8.5C8.77614 9 9 8.77614 9 8.5V1.5C9 1.22386 8.77614 1 8.5 1Z" fill="#0258AD"/> </svg>`; } function getDeleteSvg(){ return `<svg width="18" height="25" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M4.5 5L4.5 9C4.5 9.27614 4.72386 9.5 5 9.5C5.27614 9.5 5.5 9.27614 5.5 9L5.5 5C5.5 4.72386 5.27614 4.5 5 4.5C4.72386 4.5 4.5 4.72386 4.5 5ZM7 4.5C7.27614 4.5 7.5 4.72386 7.5 5V9C7.5 9.27614 7.27614 9.5 7 9.5C6.72386 9.5 6.5 9.27614 6.5 9V5C6.5 4.72386 6.72386 4.5 7 4.5ZM8 2H11C11.2761 2 11.5 2.22386 11.5 2.5C11.5 2.77614 11.2761 3 11 3H10.4475L9.69462 9.77608C9.55394 11.0422 8.48378 12 7.20991 12H4.79008C3.51621 12 2.44605 11.0422 2.30537 9.77608L1.55247 3H1C0.723858 3 0.5 2.77614 0.5 2.5C0.5 2.22386 0.723858 2 1 2H4C4 0.89543 4.89543 0 6 0C7.10457 0 8 0.895431 8 2ZM6 1C5.44772 1 5 1.44772 5 2H7C7 1.44772 6.55229 1 6 1ZM2.55863 3L3.29925 9.66565C3.38366 10.4253 4.02575 11 4.79008 11H7.20991C7.97423 11 8.61633 10.4253 8.70073 9.66565L9.44136 3H2.55863Z" fill="#0258AD"/> </svg>`; } function getSearchIcon(){ return `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M10.5 0C11.0052 0 11.4922 0.0651042 11.9609 0.195312C12.4297 0.325521 12.8672 0.510417 13.2734 0.75C13.6797 0.989583 14.0495 1.27865 14.3828 1.61719C14.7214 1.95052 15.0104 2.32031 15.25 2.72656C15.4896 3.13281 15.6745 3.57031 15.8047 4.03906C15.9349 4.50781 16 4.99479 16 5.5C16 6.00521 15.9349 6.49219 15.8047 6.96094C15.6745 7.42969 15.4896 7.86719 15.25 8.27344C15.0104 8.67969 14.7214 9.05208 14.3828 9.39062C14.0495 9.72396 13.6797 10.0104 13.2734 10.25C12.8672 10.4896 12.4297 10.6745 11.9609 10.8047C11.4922 10.9349 11.0052 11 10.5 11C9.84896 11 9.22396 10.8906 8.625 10.6719C8.03125 10.4531 7.48438 10.138 6.98438 9.72656L0.851562 15.8516C0.752604 15.9505 0.635417 16 0.5 16C0.364583 16 0.247396 15.9505 0.148438 15.8516C0.0494792 15.7526 0 15.6354 0 15.5C0 15.3646 0.0494792 15.2474 0.148438 15.1484L6.27344 9.01562C5.86198 8.51562 5.54688 7.96875 5.32812 7.375C5.10938 6.77604 5 6.15104 5 5.5C5 4.99479 5.0651 4.50781 5.19531 4.03906C5.32552 3.57031 5.51042 3.13281 5.75 2.72656C5.98958 2.32031 6.27604 1.95052 6.60938 1.61719C6.94792 1.27865 7.32031 0.989583 7.72656 0.75C8.13281 0.510417 8.57031 0.325521 9.03906 0.195312C9.50781 0.0651042 9.99479 0 10.5 0ZM10.5 10C11.1198 10 11.7031 9.88281 12.25 9.64844C12.7969 9.40885 13.2734 9.08594 13.6797 8.67969C14.0859 8.27344 14.4062 7.79688 14.6406 7.25C14.8802 6.70312 15 6.11979 15 5.5C15 4.88021 14.8802 4.29688 14.6406 3.75C14.4062 3.20312 14.0859 2.72656 13.6797 2.32031C13.2734 1.91406 12.7969 1.59375 12.25 1.35938C11.7031 1.11979 11.1198 1 10.5 1C9.88021 1 9.29688 1.11979 8.75 1.35938C8.20312 1.59375 7.72656 1.91406 7.32031 2.32031C6.91406 2.72656 6.59115 3.20312 6.35156 3.75C6.11719 4.29688 6 4.88021 6 5.5C6 6.11979 6.11719 6.70312 6.35156 7.25C6.59115 7.79688 6.91406 8.27344 7.32031 8.67969C7.72656 9.08594 8.20312 9.40885 8.75 9.64844C9.29688 9.88281 9.88021 10 10.5 10Z" fill="#0258AD"/> </svg>`; } function getCrossSvg(){ return `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M12.7071 12.0002L18.0104 6.69693L17.3033 5.98982L12 11.2931L6.6967 5.98982L5.98959 6.69693L11.2929 12.0002L5.98959 17.3035L6.6967 18.0106L12 12.7073L17.3033 18.0106L18.0104 17.3035L12.7071 12.0002Z" fill="#666666"/> </svg> `; } function getExclamationSvg(){ return `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0ZM8.46309 4.59492C8.34004 4.71602 8.19063 4.77656 8.01484 4.77656C7.84297 4.77656 7.69648 4.71797 7.57539 4.60078C7.4543 4.48359 7.39375 4.33516 7.39375 4.15547C7.39375 3.97578 7.4543 3.82637 7.57539 3.70723C7.69648 3.58809 7.84297 3.52852 8.01484 3.52852C8.19063 3.52852 8.34004 3.58809 8.46309 3.70723C8.58613 3.82637 8.64766 3.97578 8.64766 4.15547C8.64766 4.32734 8.58613 4.47383 8.46309 4.59492ZM8.48359 6.3V12.3H7.52266V6.3H8.48359ZM15 8C15 4.13401 11.866 1 8 1C4.13401 1 1 4.13401 1 8C1 11.866 4.13401 15 8 15C11.866 15 15 11.866 15 8Z" fill="#0258AD"/> </svg> `; } function overviewBannerSvg(){ return `<svg width="32" height="32" viewBox="0 0 32 32" fill="none" style="min-width: 28px;" xmlns="http://www.w3.org/2000/svg"> <rect x="1" y="3" width="30" height="20" rx="3" stroke="white" stroke-width="2"/> <path d="M20.09 12.6812C20.658 13.0793 20.658 13.9207 20.09 14.3188L15.0741 17.8354C14.4113 18.3 13.5 17.8259 13.5 17.0165L13.5 9.98345C13.5 9.17411 14.4113 8.70003 15.074 9.16464L20.09 12.6812Z" stroke="white" stroke-width="2"/> <rect y="27" width="7" height="2" rx="1" fill="white"/> <rect x="11" y="27" width="21" height="2" rx="1" fill="white"/> <circle cx="7" cy="28" r="2" fill="white"/> </svg> `; } function overviewBannerCross(){ return `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M13.0607 12.0018L21.0156 4.04686L19.955 2.9862L12 10.9412L4.04505 2.9862L2.98439 4.04686L10.9393 12.0018L2.98439 19.9568L4.04505 21.0174L12 13.0625L19.955 21.0174L21.0156 19.9568L13.0607 12.0018Z" fill="white"/> </svg> `; } function NotesFilledSvg(){ return `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M2.1 4.85L2.10032 20.7062C1.4593 20.4798 1 19.8685 1 19.15V4.3C1 2.47746 2.47746 1 4.3 1H16.95C17.6681 1 18.2791 1.45878 18.5058 2.09923L4.85 2.1L4.66919 2.10585C3.23469 2.19896 2.1 3.39197 2.1 4.85ZM3.19997 6.48125C3.19997 4.61729 4.71101 3.10625 6.57497 3.10625H19.625C21.4889 3.10625 23 4.61729 23 6.48125V14.1379C23 15.033 22.6444 15.8914 22.0115 16.5244L16.6181 21.9177C15.9851 22.5507 15.1267 22.9062 14.2316 22.9062H6.57497C4.71101 22.9062 3.19997 21.3952 3.19997 19.5312V6.48125ZM6.57497 4.45625C5.4566 4.45625 4.54997 5.36287 4.54997 6.48125V19.5312C4.54997 20.6496 5.4566 21.5562 6.57497 21.5562H14V17.2812C14 15.4173 15.511 13.9062 17.375 13.9062H21.65V6.48125C21.65 5.36287 20.7434 4.45625 19.625 4.45625H6.57497ZM15.35 17.2812V21.2194C15.462 21.1452 15.5671 21.0595 15.6635 20.9631L21.0569 15.5698C21.1533 15.4734 21.2389 15.3682 21.3131 15.2562H17.375C16.2566 15.2562 15.35 16.1629 15.35 17.2812Z" fill="#0258AD"/> <path d="M19 10C21.7614 10 24 7.76142 24 5C24 2.23858 21.7614 0 19 0C16.2386 0 14 2.23858 14 5C14 7.76142 16.2386 10 19 10Z" fill="#0258AD"/> <path d="M12.5 9C12.8866 9 13.2 9.3134 13.2 9.7V11.8H15.3C15.6866 11.8 16 12.1134 16 12.5C16 12.8866 15.6866 13.2 15.3 13.2H13.2V15.3C13.2 15.6866 12.8866 16 12.5 16C12.1134 16 11.8 15.6866 11.8 15.3L11.8 13.2H9.7C9.3134 13.2 9 12.8866 9 12.5C9 12.1134 9.3134 11.8 9.7 11.8H11.8V9.7C11.8 9.3134 12.1134 9 12.5 9Z" fill="#0258AD"/> </svg> `; } function NotesEmptySvg(){ return `<svg style="margin-right:5px" width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M13 2H3C2.44772 2 2 2.44772 2 3V14C2 14.5523 2.44771 15 3 15H8.5V12C8.5 10.6193 9.61929 9.5 11 9.5H14V3C14 2.44772 13.5523 2 13 2ZM9.59348 15H9.5V12C9.5 11.1716 10.1716 10.5 11 10.5H14V11.0801C14 11.3721 13.8724 11.6494 13.6508 11.8394L10.2443 14.7593C10.063 14.9146 9.8322 15 9.59348 15ZM3 1C1.89543 1 1 1.89543 1 3V14C1 15.1046 1.89543 16 3 16H9.59348C10.0709 16 10.5326 15.8292 10.8951 15.5185L14.3016 12.5986C14.7449 12.2187 15 11.664 15 11.0801V3C15 1.89543 14.1046 1 13 1H3ZM8 10C7.72386 10 7.5 9.77614 7.5 9.5V8H6C5.72386 8 5.5 7.77614 5.5 7.5C5.5 7.22386 5.72386 7 6 7H7.5V5.5C7.5 5.22386 7.72386 5 8 5C8.27614 5 8.5 5.22386 8.5 5.5V7H10C10.2761 7 10.5 7.22386 10.5 7.5C10.5 7.77614 10.2761 8 10 8H8.5V9.5C8.5 9.77614 8.27614 10 8 10Z" fill="white"/> </svg> `; } function threeDotsVerticle(){ return `<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-three-dots-vertical" viewBox="0 0 16 16"> <path d="M9.5 13a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0-5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z"/> </svg>` } function pencilEditSvg(){ return `<svg width="16" height="15" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M5.54225 14.5894L5.24605 14.8856L0.5 16.0961L1.71051 11.3501L2.00672 11.0539L10.6081 2.45252L12.0606 1L15.5961 4.53553L14.1436 5.98806L5.54225 14.5894ZM13.4365 5.28095L14.1819 4.53553L12.0606 2.41421L11.3152 3.15963L13.4365 5.28095ZM10.6081 3.86673L3.42093 11.0539L5.54225 13.1752L12.7294 5.98806L10.6081 3.86673ZM2.71382 11.761L2.61167 11.8631L1.88536 14.7108L4.73299 13.9845L4.83514 13.8823L2.71382 11.761Z" fill="#0258AD"/> </svg> `; } function getRedDeleteSvg(){ return `<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M6.5 7.5L6.5 11.5C6.5 11.7761 6.72386 12 7 12C7.27614 12 7.5 11.7761 7.5 11.5L7.5 7.5C7.5 7.22386 7.27614 7 7 7C6.72386 7 6.5 7.22386 6.5 7.5ZM9 7C9.27614 7 9.5 7.22386 9.5 7.5V11.5C9.5 11.7761 9.27614 12 9 12C8.72386 12 8.5 11.7761 8.5 11.5V7.5C8.5 7.22386 8.72386 7 9 7ZM10 4.5H13C13.2761 4.5 13.5 4.72386 13.5 5C13.5 5.27614 13.2761 5.5 13 5.5H12.4475L11.6946 12.2761C11.5539 13.5422 10.4838 14.5 9.20991 14.5H6.79008C5.51621 14.5 4.44605 13.5422 4.30537 12.2761L3.55247 5.5H3C2.72386 5.5 2.5 5.27614 2.5 5C2.5 4.72386 2.72386 4.5 3 4.5H6C6 3.39543 6.89543 2.5 8 2.5C9.10457 2.5 10 3.39543 10 4.5ZM8 3.5C7.44772 3.5 7 3.94772 7 4.5H9C9 3.94772 8.55229 3.5 8 3.5ZM4.55863 5.5L5.29925 12.1656C5.38366 12.9253 6.02575 13.5 6.79008 13.5H9.20991C9.97423 13.5 10.6163 12.9253 10.7007 12.1656L11.4414 5.5H4.55863Z" fill="#D83B01"/> </svg> `; } function getSaveSvg(){ return `<svg width="18" height="18" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5 14.5V5.61268L10.2302 1.5H9.5H3.5H1.5V14.5H14.5ZM9.82696 2.5H9.5V6.5H3.5V2.5H2.5V13.5H13.5V6.03792L9.82696 2.5ZM4.5 2.5H8.5V5.5H4.5V2.5ZM8 7.5C9.38071 7.5 10.5 8.61929 10.5 10C10.5 11.3807 9.38071 12.5 8 12.5C6.61929 12.5 5.5 11.3807 5.5 10C5.5 8.61929 6.61929 7.5 8 7.5ZM8 8.5C7.17157 8.5 6.5 9.17157 6.5 10C6.5 10.8284 7.17157 11.5 8 11.5C8.82843 11.5 9.5 10.8284 9.5 10C9.5 9.17157 8.82843 8.5 8 8.5Z" fill="#0258AD"/> </svg> `; } function getExclamationImpSvg(){ return `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M20.5393 15.6245C21.1155 16.6218 21.1118 17.8149 20.5319 18.816C19.9482 19.8244 18.9103 20.4265 17.7541 20.4265H6.1998C5.04732 20.4265 4.01675 19.8318 3.44051 18.8418C2.85688 17.8408 2.85319 16.6403 3.42943 15.6319L9.22136 5.60312C9.7939 4.60209 10.8282 4 11.988 4C13.1479 4 14.1822 4.5984 14.7547 5.60682L20.5393 15.6245ZM17.7502 18.9748C18.3855 18.9748 18.9544 18.646 19.2757 18.092C19.5934 17.5416 19.5971 16.8915 19.2868 16.3522L13.4986 6.32711C13.1846 5.77673 12.6194 5.44798 11.9878 5.44798C11.3525 5.44798 10.791 5.77304 10.477 6.32342L4.68509 16.3485C4.36742 16.9026 4.37112 17.5601 4.68879 18.1104C5.00276 18.6534 5.56792 18.9748 6.19587 18.9748H17.7502ZM11.9844 15.5432C11.482 15.5432 11.0609 15.9643 11.0609 16.4667C11.0609 16.969 11.482 17.3901 11.9844 17.3901C12.4683 17.3901 12.9078 16.969 12.8857 16.4889C12.9078 15.9606 12.4904 15.5432 11.9844 15.5432ZM11.0427 10.069C11.0427 9.58508 11.3161 9.18614 11.7556 9.06055C12.1952 8.95713 12.6348 9.16767 12.8231 9.58138C12.8859 9.72914 12.9081 9.87689 12.9081 10.0431C12.897 10.274 12.8813 10.5048 12.8656 10.7357C12.8499 10.9666 12.8342 11.1974 12.8231 11.4283C12.8028 11.7848 12.7816 12.1412 12.7603 12.4977C12.7391 12.8541 12.7179 13.2106 12.6975 13.567C12.6754 13.7997 12.6754 14.0103 12.6754 14.2393C12.6569 14.6198 12.3614 14.9116 11.9846 14.9116C11.6079 14.9116 11.3161 14.6382 11.2939 14.2615C11.2625 13.7055 11.2311 13.1552 11.1997 12.6048C11.1683 12.0544 11.1369 11.504 11.1055 10.9481C11.0944 10.8022 11.0843 10.6554 11.0741 10.5086C11.064 10.3617 11.0538 10.2149 11.0427 10.069Z" fill="#D83B01"/> </svg> `; } function getCancleButtonSvg(){ return `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M8.70711 7.99926L14.0104 2.69595L13.3033 1.98885L8 7.29215L2.6967 1.98885L1.98959 2.69595L7.29289 7.99926L1.98959 13.3026L2.6967 14.0097L8 8.70636L13.3033 14.0097L14.0104 13.3026L8.70711 7.99926Z" fill="#A42B1A"/> </svg> `; } /*function getSharableFeatureSvg(){ return `<svg style="margin-right: 5px;" width="22" height="14" viewBox="0 0 24 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M18 5V6.5C18.5938 6.5 19.1602 6.57031 19.6992 6.71094C20.2461 6.84375 20.7266 7.0625 21.1406 7.36719C21.5547 7.66406 21.8828 8.05078 22.125 8.52734C22.375 8.99609 22.5 9.57031 22.5 10.25C22.5 10.7656 22.3984 11.25 22.1953 11.7031C22 12.1562 21.7305 12.5547 21.3867 12.8984C21.0508 13.2344 20.6563 13.5039 20.2031 13.707C19.75 13.9023 19.2656 14 18.75 14L12.75 14C12.2344 14 11.75 13.9023 11.2969 13.707C10.8438 13.5039 10.4453 13.2344 10.1016 12.8984C9.76563 12.5547 9.49609 12.1562 9.29297 11.7031C9.09766 11.25 9 10.7656 9 10.25C9 9.57031 9.12109 8.99609 9.36328 8.52734C9.61328 8.05078 9.94531 7.66406 10.3594 7.36719C10.7734 7.0625 11.25 6.84375 11.7891 6.71094C12.3359 6.57031 12.9063 6.5 13.5 6.5V5H12.75C12.0234 5 11.3398 5.14062 10.6992 5.42187C10.0664 5.69531 9.51172 6.07031 9.03516 6.54687C8.56641 7.01562 8.19141 7.57031 7.91016 8.21094C7.63672 8.84375 7.5 9.52344 7.5 10.25C7.5 10.9766 7.63672 11.6602 7.91016 12.3008C8.19141 12.9336 8.56641 13.4883 9.03516 13.9648C9.51172 14.4336 10.0664 14.8086 10.6992 15.0898C11.3398 15.3633 12.0234 15.5 12.75 15.5L18.75 15.5C19.4766 15.5 20.1563 15.3633 20.7891 15.0898C21.4297 14.8086 21.9844 14.4336 22.4531 13.9648C22.9297 13.4883 23.3047 12.9336 23.5781 12.3008C23.8594 11.6602 24 10.9766 24 10.25C24 9.52344 23.8594 8.84375 23.5781 8.21094C23.3047 7.57031 22.9297 7.01562 22.4531 6.54687C21.9844 6.07031 21.4297 5.69531 20.7891 5.42187C20.1562 5.14062 19.4766 5 18.75 5H18ZM10.5 11V9.5C11.0938 9.5 11.6602 9.43359 12.1992 9.30078C12.7461 9.16016 13.2266 8.94141 13.6406 8.64453C14.0547 8.33984 14.3828 7.95312 14.625 7.48437C14.875 7.00781 15 6.42969 15 5.75C15 5.23437 14.8984 4.75 14.6953 4.29687C14.5 3.84375 14.2305 3.44922 13.8867 3.11328C13.5508 2.76953 13.1562 2.5 12.7031 2.30469C12.25 2.10156 11.7656 2 11.25 2L5.25 2C4.73438 2 4.25 2.10156 3.79688 2.30469C3.34375 2.5 2.94531 2.76953 2.60156 3.11328C2.26563 3.44922 1.99609 3.84375 1.79297 4.29688C1.59766 4.75 1.5 5.23438 1.5 5.75C1.5 6.42969 1.62109 7.00781 1.86328 7.48438C2.11328 7.95312 2.44531 8.33984 2.85938 8.64453C3.27344 8.94141 3.75 9.16016 4.28906 9.30078C4.83594 9.43359 5.40625 9.5 6 9.5V11H5.25C4.52344 11 3.83984 10.8633 3.19922 10.5898C2.56641 10.3086 2.01172 9.93359 1.53516 9.46484C1.06641 8.98828 0.691406 8.43359 0.410156 7.80078C0.136719 7.16016 0 6.47656 0 5.75C0 5.02344 0.136719 4.34375 0.410156 3.71094C0.691406 3.07031 1.06641 2.51562 1.53516 2.04688C2.01172 1.57031 2.56641 1.19531 3.19922 0.921875C3.83984 0.640625 4.52344 0.5 5.25 0.5L11.25 0.5C11.9766 0.5 12.6562 0.640625 13.2891 0.921875C13.9297 1.19531 14.4844 1.57031 14.9531 2.04687C15.4297 2.51562 15.8047 3.07031 16.0781 3.71094C16.3594 4.34375 16.5 5.02344 16.5 5.75C16.5 6.47656 16.3594 7.16016 16.0781 7.80078C15.8047 8.43359 15.4297 8.98828 14.9531 9.46484C14.4844 9.93359 13.9297 10.3086 13.2891 10.5898C12.6563 10.8633 11.9766 11 11.25 11H10.5Z" fill="#0258AD"/> </svg> `; }*/ function getSharableFeatureSvg(){ return `<svg style="margin-right: 5px;" width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_7393_649)"> <path d="M10.224 1.62963C10.0384 1.48534 9.78693 1.45932 9.57579 1.56258C9.36465 1.66584 9.23077 1.88035 9.23077 2.11539V4.56798C9.17799 4.57023 9.12269 4.57324 9.06507 4.57716C8.56919 4.61097 7.89081 4.7136 7.16453 4.99174C6.29345 5.32534 5.35233 5.9124 4.58585 6.92924C3.81954 7.94587 3.25536 9.35549 3.07946 11.2904C3.056 11.5485 3.19667 11.7935 3.4313 11.9034C3.66593 12.0133 3.94426 11.9645 4.12746 11.7813C5.59074 10.318 7.04366 9.59566 8.11769 9.23765C8.56098 9.08989 8.94066 9.00391 9.23077 8.9539V11.3462C9.23077 11.5885 9.373 11.8083 9.59406 11.9075C9.81513 12.0068 10.0739 11.9671 10.255 11.8061L15.7935 6.88302C15.9301 6.76156 16.0057 6.58563 15.9997 6.4029C15.9937 6.22017 15.9067 6.04957 15.7624 5.93732L10.224 1.62963ZM9.77591 5.80373L9.77932 5.80405C9.95264 5.82275 10.1266 5.76715 10.2566 5.65085C10.387 5.53411 10.4615 5.36735 10.4615 5.19231V3.37363L14.4228 6.45464L10.4615 9.97579V8.26923C10.4615 7.92936 10.186 7.65385 9.84616 7.65385L9.84481 7.65385L9.84318 7.65385L9.83907 7.65388L9.82747 7.65402L9.79101 7.65492C9.76091 7.65589 9.71932 7.65773 9.667 7.66122C9.5624 7.66819 9.41477 7.68175 9.23028 7.70811C8.86141 7.7608 8.34424 7.86479 7.72848 8.07004C6.83683 8.36726 5.74128 8.87598 4.5931 9.74446C4.83249 8.86194 5.1787 8.18745 5.56868 7.67008C6.17345 6.86777 6.91105 6.40676 7.60471 6.1411C8.18918 5.91727 8.74156 5.83284 9.14877 5.80508C9.35148 5.79127 9.51553 5.79167 9.62601 5.79524C9.68117 5.79702 9.72272 5.79958 9.74877 5.8015L9.77591 5.80373ZM3.07692 2.73077C1.37758 2.73077 0 4.10835 0 5.80769V13.1923C0 14.8916 1.37758 16.2692 3.07692 16.2692H10.4615C12.1609 16.2692 13.5385 14.8916 13.5385 13.1923V11.9615C13.5385 11.6217 13.2629 11.3461 12.9231 11.3461C12.5832 11.3461 12.3077 11.6217 12.3077 11.9615V13.1923C12.3077 14.2119 11.4811 15.0385 10.4615 15.0385H3.07692C2.05732 15.0385 1.23077 14.2119 1.23077 13.1923V5.80769C1.23077 4.78809 2.05732 3.96154 3.07692 3.96154H5.53846C5.87832 3.96154 6.15384 3.68602 6.15384 3.34615C6.15384 3.00629 5.87832 2.73077 5.53846 2.73077H3.07692Z" fill="white"/> </g> <defs> <clipPath id="clip0_7393_649"> <rect width="16" height="16" fill="white" transform="translate(0 0.5)"/> </clipPath> </defs> </svg> `; } function getMagnifyingGlassSvg(){ return `<svg width="38" height="38" viewBox="0 0 38 38" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M8 16.75C8 17.5078 8.09766 18.2383 8.29297 18.9414C8.48828 19.6445 8.76562 20.3047 9.125 20.9219C9.48438 21.5312 9.91406 22.0859 10.4141 22.5859C10.9141 23.0859 11.4727 23.5156 12.0898 23.875C12.6992 24.2344 13.3555 24.5117 14.0586 24.707C14.7617 24.9023 15.4922 25 16.25 25C17.2188 25 18.1602 24.8359 19.0742 24.5078C19.9805 24.1797 20.8008 23.707 21.5352 23.0898L27.7227 29.2773C27.8711 29.4258 28.0469 29.5 28.25 29.5C28.4531 29.5 28.6289 29.4258 28.7773 29.2773C28.9258 29.1289 29 28.9531 29 28.75C29 28.5469 28.9258 28.3711 28.7773 28.2227L22.5898 22.0352C23.207 21.3008 23.6797 20.4805 24.0078 19.5742C24.3359 18.6602 24.5 17.7188 24.5 16.75C24.5 15.9922 24.4023 15.2617 24.207 14.5586C24.0117 13.8477 23.7344 13.1875 23.375 12.5781C23.0156 11.9688 22.5859 11.4141 22.0859 10.9141C21.5859 10.4141 21.0312 9.98438 20.4219 9.625C19.8125 9.26562 19.1562 8.98828 18.4531 8.79297C17.75 8.59766 17.0156 8.5 16.25 8.5C15.4922 8.5 14.7617 8.59766 14.0586 8.79297C13.3555 8.98828 12.6992 9.26562 12.0898 9.625C11.4727 9.98438 10.9141 10.4141 10.4141 10.9141C9.91406 11.4141 9.48438 11.9727 9.125 12.5898C8.76562 13.1992 8.48828 13.8555 8.29297 14.5586C8.09766 15.2617 8 15.9922 8 16.75ZM9.5 16.75C9.5 15.8203 9.67969 14.9453 10.0391 14.125C10.3906 13.3047 10.8711 12.5898 11.4805 11.9805C12.0898 11.3711 12.8047 10.8906 13.625 10.5391C14.4453 10.1797 15.3203 10 16.25 10C17.1797 10 18.0547 10.1797 18.875 10.5391C19.6953 10.8906 20.4102 11.3711 21.0195 11.9805C21.6289 12.5898 22.1133 13.3047 22.4727 14.125C22.8242 14.9453 23 15.8203 23 16.75C23 17.6875 22.8242 18.5664 22.4727 19.3867C22.1211 20.207 21.6406 20.9219 21.0312 21.5312C20.4219 22.1406 19.707 22.6211 18.8867 22.9727C18.0664 23.3242 17.1875 23.5 16.25 23.5C15.3125 23.5 14.4336 23.3242 13.6133 22.9727C12.793 22.6211 12.0781 22.1406 11.4688 21.5312C10.8594 20.9219 10.3789 20.207 10.0273 19.3867C9.67578 18.5664 9.5 17.6875 9.5 16.75Z" fill="#F1F8FF"/> </svg> `; } function getWhatsNewSvg(){ return `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M3.50159 11H8.50159C8.77773 11 9.00159 11.2239 9.00159 11.5C9.00159 11.7455 8.82471 11.9496 8.59146 11.9919L8.50159 12H3.50159C3.22544 12 3.00159 11.7761 3.00159 11.5C3.00159 11.2545 3.17846 11.0504 3.41171 11.0081L3.50159 11H8.50159H3.50159ZM5.1481 5.14638C5.3217 4.97285 5.59113 4.95361 5.78597 5.08865L5.85521 5.14651L9.85368 9.14651C10.0489 9.34181 10.0488 9.6584 9.85355 9.85362C9.67995 10.0272 9.41052 10.0464 9.21568 9.91136L9.14644 9.85349L5.14797 5.85349C4.95274 5.65819 4.9528 5.3416 5.1481 5.14638ZM11.5016 3C11.747 3 11.9512 3.17688 11.9935 3.41012L12.0016 3.5V8.5C12.0016 8.77614 11.7777 9 11.5016 9C11.2561 9 11.052 8.82312 11.0096 8.58988L11.0016 8.5V3.5C11.0016 3.22386 11.2254 3 11.5016 3Z" fill="#0742AB"/> </svg> `; } function getfeedbackSvg(){ return `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M5.66671 1.33337C5.11442 1.33337 4.66671 1.78109 4.66671 2.33337V3.83337H5.50004V2.16671H13.8334V7.16671H12.6584L11.3334 8.49171V7.16671H9.66671V8.00004H10.5V10.5L13 8.00004H13.6667C14.219 8.00004 14.6667 7.55233 14.6667 7.00004V2.33337C14.6667 1.78109 14.219 1.33337 13.6667 1.33337H5.66671ZM7.58162 9.97848C8.33823 9.45155 8.83337 8.57528 8.83337 7.58337C8.83337 5.97254 7.52754 4.66671 5.91671 4.66671C4.30588 4.66671 3.00004 5.97254 3.00004 7.58337C3.00004 8.57528 3.49519 9.45155 4.2518 9.97848C2.54364 10.6447 1.33337 12.3061 1.33337 14.25V14.6667H2.16671V14.25C2.16671 12.179 3.84564 10.5 5.91671 10.5C7.98778 10.5 9.66671 12.179 9.66671 14.25V14.6667H10.5V14.25C10.5 12.3061 9.28978 10.6447 7.58162 9.97848ZM5.91671 9.66671C4.76611 9.66671 3.83337 8.73397 3.83337 7.58337C3.83337 6.43278 4.76611 5.50004 5.91671 5.50004C6.46924 5.50004 6.99915 5.71953 7.38985 6.11023C7.78055 6.50094 8.00004 7.03084 8.00004 7.58337C8.00004 8.73397 7.0673 9.66671 5.91671 9.66671Z" fill="#0258AD"/> </svg> `; } function newMagnifyingGlassSvg(){ return `<svg width="21" height="22" viewBox="0 0 21 22" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0 8.75C0 9.50781 0.0976562 10.2383 0.292969 10.9414C0.488281 11.6445 0.765625 12.3047 1.125 12.9219C1.48438 13.5312 1.91406 14.0859 2.41406 14.5859C2.91406 15.0859 3.47266 15.5156 4.08984 15.875C4.69922 16.2344 5.35547 16.5117 6.05859 16.707C6.76172 16.9023 7.49219 17 8.25 17C9.21875 17 10.1602 16.8359 11.0742 16.5078C11.9805 16.1797 12.8008 15.707 13.5352 15.0898L19.7227 21.2773C19.8711 21.4258 20.0469 21.5 20.25 21.5C20.4531 21.5 20.6289 21.4258 20.7773 21.2773C20.9258 21.1289 21 20.9531 21 20.75C21 20.5469 20.9258 20.3711 20.7773 20.2227L14.5898 14.0352C15.207 13.3008 15.6797 12.4805 16.0078 11.5742C16.3359 10.6602 16.5 9.71875 16.5 8.75C16.5 7.99219 16.4023 7.26172 16.207 6.55859C16.0117 5.84766 15.7344 5.1875 15.375 4.57812C15.0156 3.96875 14.5859 3.41406 14.0859 2.91406C13.5859 2.41406 13.0312 1.98438 12.4219 1.625C11.8125 1.26562 11.1562 0.988281 10.4531 0.792969C9.75 0.597656 9.01562 0.5 8.25 0.5C7.49219 0.5 6.76172 0.597656 6.05859 0.792969C5.35547 0.988281 4.69922 1.26562 4.08984 1.625C3.47266 1.98438 2.91406 2.41406 2.41406 2.91406C1.91406 3.41406 1.48438 3.97266 1.125 4.58984C0.765625 5.19922 0.488281 5.85547 0.292969 6.55859C0.0976562 7.26172 0 7.99219 0 8.75ZM1.5 8.75C1.5 7.82031 1.67969 6.94531 2.03906 6.125C2.39062 5.30469 2.87109 4.58984 3.48047 3.98047C4.08984 3.37109 4.80469 2.89062 5.625 2.53906C6.44531 2.17969 7.32031 2 8.25 2C9.17969 2 10.0547 2.17969 10.875 2.53906C11.6953 2.89062 12.4102 3.37109 13.0195 3.98047C13.6289 4.58984 14.1133 5.30469 14.4727 6.125C14.8242 6.94531 15 7.82031 15 8.75C15 9.6875 14.8242 10.5664 14.4727 11.3867C14.1211 12.207 13.6406 12.9219 13.0312 13.5312C12.4219 14.1406 11.707 14.6211 10.8867 14.9727C10.0664 15.3242 9.1875 15.5 8.25 15.5C7.3125 15.5 6.43359 15.3242 5.61328 14.9727C4.79297 14.6211 4.07812 14.1406 3.46875 13.5312C2.85938 12.9219 2.37891 12.207 2.02734 11.3867C1.67578 10.5664 1.5 9.6875 1.5 8.75Z" fill="#F1F8FF"/> </svg> `; } function languageEarthSvg(){ return `<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10ZM10 1.42889L9.92945 1.42917C10.0599 1.68475 10.2028 1.99335 10.3315 2.33537C10.6788 3.25816 10.9939 4.60954 10.433 5.8041C9.91612 6.90468 9.02559 7.18971 8.36047 7.36156L8.26434 7.38634C7.61757 7.55292 7.3495 7.62196 7.15646 7.91503C6.97588 8.18919 7.00845 8.53328 7.21344 9.20127C7.22803 9.24881 7.24376 9.29893 7.26012 9.35108C7.34153 9.61048 7.43868 9.92003 7.48934 10.2112C7.55231 10.5732 7.56914 11.0283 7.34052 11.467C7.11154 11.9064 6.8089 12.2046 6.45205 12.399C6.11616 12.582 5.76753 12.6518 5.50312 12.6987L5.4051 12.716C4.89326 12.8059 4.63364 12.8516 4.38397 13.119C4.18846 13.3285 4.06674 13.6925 3.99613 14.222C3.96732 14.4381 3.94999 14.6523 3.93217 14.8726L3.92262 14.99C3.90254 15.2335 3.87783 15.5107 3.82386 15.7479L3.788 15.9055C5.34948 17.5475 7.5552 18.5711 10 18.5711C11.5935 18.5711 13.0854 18.1363 14.3636 17.3787C14.2501 17.2672 14.1212 17.1294 13.9946 16.97C13.6559 16.5436 13.2177 15.816 13.3697 14.9604C13.4426 14.5502 13.6629 14.2051 13.8784 13.9379C14.0978 13.666 14.3631 13.4141 14.5966 13.1992C14.6518 13.1485 14.7047 13.1001 14.7556 13.0536C14.9346 12.8902 15.088 12.7502 15.219 12.6129C15.2997 12.5283 15.3573 12.4595 15.3963 12.404C15.4293 12.357 15.4396 12.3328 15.4412 12.3291C15.5137 12.0893 15.4256 11.9134 15.3214 11.8328C15.243 11.7723 15.0425 11.6823 14.6845 11.909C14.5454 11.9971 14.4215 12.0755 14.3218 12.1334C14.2469 12.1769 14.0954 12.2649 13.9297 12.3011C13.8395 12.3208 13.6413 12.3496 13.4252 12.2481C13.1811 12.1333 13.069 11.9286 13.0239 11.7878C12.9843 11.6642 12.9826 11.554 12.9831 11.5024C12.9836 11.4419 12.9889 11.3843 12.9933 11.3424C12.9969 11.3076 13.0014 11.2706 13.0062 11.2312C13.0428 10.9303 13.0967 10.4877 12.9248 9.82776C12.7866 9.29711 12.5852 8.89347 12.3797 8.4813C12.2849 8.29133 12.1893 8.09952 12.0985 7.89265C11.9734 7.60761 11.8358 7.23635 11.86 6.84116C11.8879 6.38446 12.1195 6.01199 12.4927 5.73204C12.9458 5.39224 13.5155 4.61452 14.0085 3.82691C14.2443 3.4502 14.4462 3.09826 14.5892 2.84026C14.6005 2.81979 14.6115 2.79992 14.6221 2.7807C13.2885 1.92507 11.7022 1.42889 10 1.42889Z" fill="#0B53CE"/> </svg> `; } function languageEarthLightSvg(){ return `<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M0 10C0 4.47715 4.47715 0 10 0C15.5228 0 20 4.47715 20 10C20 15.5228 15.5228 20 10 20C4.47715 20 0 15.5228 0 10ZM10 1.42889L9.92945 1.42917C10.0599 1.68475 10.2028 1.99335 10.3315 2.33537C10.6788 3.25816 10.9939 4.60954 10.433 5.8041C9.91612 6.90468 9.02559 7.18971 8.36047 7.36156L8.26434 7.38634C7.61757 7.55292 7.3495 7.62196 7.15646 7.91503C6.97588 8.18919 7.00845 8.53328 7.21344 9.20127C7.22803 9.24881 7.24376 9.29893 7.26012 9.35108C7.34153 9.61048 7.43868 9.92003 7.48934 10.2112C7.55231 10.5732 7.56914 11.0283 7.34052 11.467C7.11154 11.9064 6.8089 12.2046 6.45205 12.399C6.11616 12.582 5.76753 12.6518 5.50312 12.6987L5.4051 12.716C4.89326 12.8059 4.63364 12.8516 4.38397 13.119C4.18846 13.3285 4.06674 13.6925 3.99613 14.222C3.96732 14.4381 3.94999 14.6523 3.93217 14.8726L3.92262 14.99C3.90254 15.2335 3.87783 15.5107 3.82386 15.7479L3.788 15.9055C5.34948 17.5475 7.5552 18.5711 10 18.5711C11.5935 18.5711 13.0854 18.1363 14.3636 17.3787C14.2501 17.2672 14.1212 17.1294 13.9946 16.97C13.6559 16.5436 13.2177 15.816 13.3697 14.9604C13.4426 14.5502 13.6629 14.2051 13.8784 13.9379C14.0978 13.666 14.3631 13.4141 14.5966 13.1992C14.6518 13.1485 14.7047 13.1001 14.7556 13.0536C14.9346 12.8902 15.088 12.7502 15.219 12.6129C15.2997 12.5283 15.3573 12.4595 15.3963 12.404C15.4293 12.357 15.4396 12.3328 15.4412 12.3291C15.5137 12.0893 15.4256 11.9134 15.3214 11.8328C15.243 11.7723 15.0425 11.6823 14.6845 11.909C14.5454 11.9971 14.4215 12.0755 14.3218 12.1334C14.2469 12.1769 14.0954 12.2649 13.9297 12.3011C13.8395 12.3208 13.6413 12.3496 13.4252 12.2481C13.1811 12.1333 13.069 11.9286 13.0239 11.7878C12.9843 11.6642 12.9826 11.554 12.9831 11.5024C12.9836 11.4419 12.9889 11.3843 12.9933 11.3424C12.9969 11.3076 13.0014 11.2706 13.0062 11.2312C13.0428 10.9303 13.0967 10.4877 12.9248 9.82776C12.7866 9.29711 12.5852 8.89347 12.3797 8.4813C12.2849 8.29133 12.1893 8.09952 12.0985 7.89265C11.9734 7.60761 11.8358 7.23635 11.86 6.84116C11.8879 6.38446 12.1195 6.01199 12.4927 5.73204C12.9458 5.39224 13.5155 4.61452 14.0085 3.82691C14.2443 3.4502 14.4462 3.09826 14.5892 2.84026C14.6005 2.81979 14.6115 2.79992 14.6221 2.7807C13.2885 1.92507 11.7022 1.42889 10 1.42889Z" fill="#D5D5D5"/> </svg> `; } function learnMicrosoftBookSvg(){ return `<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M16 1.01562H9.25C8.77022 1.01562 8.33197 1.19675 8 1.49422C7.66803 1.19675 7.22978 1.01562 6.75 1.01562H0V12.0156H6.75C7.09462 12.0156 7.375 12.296 7.375 12.6406H8.625C8.625 12.296 8.90537 12.0156 9.25 12.0156H16V1.01562ZM16 13.2656H9.25C8.78522 13.2656 8.34559 13.4392 8 13.7568C7.65441 13.4392 7.21478 13.2656 6.75 13.2656H0V14.5156H6.75C7.08878 14.5156 7.375 14.8162 7.375 15.1719H8.625C8.625 14.8162 8.91122 14.5156 9.25 14.5156H16V13.2656ZM7.375 10.8727V2.89062C7.375 2.546 7.09462 2.26562 6.75 2.26562H1.25V10.7656H6.75C6.96903 10.7656 7.17944 10.8034 7.375 10.8727ZM14.75 2.26562V10.7656H9.25C9.03097 10.7656 8.82056 10.8034 8.625 10.8727V2.89062C8.625 2.546 8.90537 2.26562 9.25 2.26562H14.75ZM3 4H6V5H3V4ZM13 4H10V5H13V4ZM3 6H6V7H3V6ZM13 6H10V7H13V6ZM3 8H6V9H3V8ZM13 8H10V9H13V8Z" fill="#0742AB"/> </svg> `; } function addPlanPlusSvg(){ return `<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M17 5H15V15H5V17H15V27H17V17H27V15H17V5Z" fill="#0258AD"/> </svg> `; } function removePlanBinSvg(){ return `<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M13.1875 14.125L13.1875 21.625C13.1875 22.1428 13.6072 22.5625 14.125 22.5625C14.6428 22.5625 15.0625 22.1428 15.0625 21.625L15.0625 14.125C15.0625 13.6072 14.6428 13.1875 14.125 13.1875C13.6072 13.1875 13.1875 13.6072 13.1875 14.125ZM17.875 13.1875C18.3928 13.1875 18.8125 13.6072 18.8125 14.125V21.625C18.8125 22.1428 18.3928 22.5625 17.875 22.5625C17.3572 22.5625 16.9375 22.1428 16.9375 21.625V14.125C16.9375 13.6072 17.3572 13.1875 17.875 13.1875ZM19.75 8.5H25.375C25.8928 8.5 26.3125 8.91973 26.3125 9.4375C26.3125 9.95527 25.8928 10.375 25.375 10.375H24.3391L22.9274 23.0801C22.6636 25.4541 20.6571 27.25 18.2686 27.25H13.7314C11.3429 27.25 9.33633 25.4541 9.07257 23.0801L7.66088 10.375H6.625C6.10723 10.375 5.6875 9.95527 5.6875 9.4375C5.6875 8.91973 6.10723 8.5 6.625 8.5H12.25C12.25 6.42893 13.9289 4.75 16 4.75C18.0711 4.75 19.75 6.42893 19.75 8.5ZM16 6.625C14.9645 6.625 14.125 7.46447 14.125 8.5H17.875C17.875 7.46447 17.0355 6.625 16 6.625ZM9.54742 10.375L10.9361 22.8731C11.0944 24.2974 12.2983 25.375 13.7314 25.375H18.2686C19.7017 25.375 20.9056 24.2974 21.0639 22.8731L22.4526 10.375H9.54742Z" fill="#A42B1A"/> </svg> `; } function addAnonymousBtnSvg(){ return `<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M17 5H15V15H5V17H15V27H17V17H27V15H17V5Z" fill="#B3B0AD"/> </svg> `; } </script> <script> $(document).ready(function(){ let id=""; id=""; if(id !== '') AppState.SkipWave.push(id); setFilterOnLoad(); setGroupFilterOnLoad(); onExpandOfFeature(); }); function renderDataSets(tabledata, count, filterValue, parentAccordionSelector) { moment.locale(langCode); const showMoreText = "... "+"click Learn more for details"+"."; for (var i = 0; i < count; i++) { //function to find category/Available To value let availableTo = identifyCategory(tabledata[i].FeatureCategory, tabledata[i].Product, tabledata[i].ReleaseWaveName,tabledata[i].SegmentPath, tabledata[i].GAReleaseWaveName, tabledata[i].GASegmentPath, tabledata[i].FolderName); let formattedEADate = tabledata[i].EarlyAccessDate ? moment(new Date(tabledata[i].EarlyAccessDate)).format('MMM DD, YYYY') : ''; let formattedPPDate = tabledata[i].PublicPreviewDate ? moment(new Date(tabledata[i].PublicPreviewDate)).format('MMM DD, YYYY') : ''; let formattedGADate = tabledata[i].GADate ? moment(new Date(tabledata[i].GADate)).format('MMM DD, YYYY') : ''; var gitCommitDate=tabledata[i].GitCommitDate; let waveID = tabledata[i].ReleaseWaveID; if (tabledata[i].ReleaseWaveID == '' || tabledata[i].ReleaseWaveID == undefined) { waveID = tabledata[i].GAReleaseWaveId; } else if (tabledata[i].ReleaseWaveName != tabledata[i].GAReleaseWaveName) { if (tabledata[i].GADate !== '' && tabledata[i].GADate !== undefined && tabledata[i].GAReleaseWaveId != '' && tabledata[i].GAReleaseWaveId != undefined) { var array = new Array(); array = tabledata[i].GADate.split('/') GA = parseInt(array[2], 10); var array1 = new Array(); array1 = tabledata[i].PublicPreviewDate.split('/') PP = parseInt(array1[2], 10); if (GA - PP > 0 && tabledata[i].GAIsActiveWave == 'true') { waveID = tabledata[i].GAReleaseWaveId; } else { if (tabledata[i].GAIsActiveWave == 'true') { waveID = tabledata[i].GAReleaseWaveId; } else if (tabledata[i].PPStatus == 'Planned') { waveID = tabledata[i].ReleaseWaveID; } else { waveID = tabledata[i].GAReleaseWaveId; } } } else { waveID = tabledata[i].ReleaseWaveID; } } else if (tabledata[i].ReleaseWaveName == tabledata[i].GAReleaseWaveName) { if (tabledata[i].GAIsActiveWave == 'true') { waveID = tabledata[i].GAReleaseWaveId; } else if (tabledata[i].PPStatus == 'Planned') { waveID = tabledata[i].ReleaseWaveID; } else { waveID = tabledata[i].GAReleaseWaveId; } } let formattedGitCommitDate = gitCommitDate ? moment(gitCommitDate).format('MMM DD, YYYY') : ''; let currentDate = moment().format('YYYY-MM-DD'); let fillEADateBullet = false; let fillPPDateBullet = false; let fillGADateBullet = false; if(tabledata[i].GAStatus && tabledata[i].GAStatus.toLowerCase() === "shipped"){ fillGADateBullet = true; fillEADateBullet = true; fillPPDateBullet = true; } if(fillPPDateBullet === false && tabledata[i].PPStatus && tabledata[i].PPStatus.toLowerCase() === "shipped"){ fillPPDateBullet = true; fillEADateBullet = true; } if(fillEADateBullet === false && tabledata[i].EAStatus && tabledata[i].EAStatus.toLowerCase() === "shipped"){ fillEADateBullet = true; } let mileStoneDetails = tabledata[i].Milestone; let milesStoneDateValue=''; let tempDate = moment(mileStoneDetails.date); if(mileStoneDetails.dateValue.split(',').length == 1) milesStoneDateValue = mileStoneDetails.groupValue; else milesStoneDateValue = tempDate.format('ll'); let capability = tabledata[i].FeatureType ? (tabledata[i].FeatureType === 'New Feature' ? 'New Capability' : 'Enhancement') : ''; let hasProductArea = true; if(tabledata[i].ProductArea.length <= 0) hasProductArea = false; let isTrue; if(isMyReleasePlanSelected() && isGroupedByDate()) isTrue = true; //show div else if(isMyReleasePlanSelected() && !isGroupedByDate()) isTrue = false; else isTrue = false; var functionVariable=''; if(AppState.urlParams.rp.selectedValue === 'my-plans') functionVariable=true; let row = $(`<div class="list-group--data-items panel panel-default"> <div class="f-feature-head panel-heading"> <h4 class="panel-title" style="width:100%;"> <a class="accordion-toggle collapsed feature-title" data-toggle="collapse" data-parent="#${parentAccordionSelector}" href="#plan-${tabledata[i].SnapshotId}" aria-expanded="false" onclick="loadDetails('${tabledata[i].ProductID}','${tabledata[i].SnapshotId}')"> <div class="f-feature-head-primary"> <div class="feature-name f-name">${tabledata[i].FeatureName}</div> <div style="flex-wrap: wrap;display: inline-flex;gap: 10px" class="${isTrue ? '':'hidden-item'}"> <div class="feature-name f-capability ${isTrue ? '' : 'hidden-item'}">${isTrue ? tabledata[i].Product: ''}</div> <div class="feature-name f-capability ${isTrue ? '' : 'hidden-item'} ${hasProductArea ? '' : 'hidden-item'}" style="width: 6px;height: 6px;border-radius: 10px;background: #696969;align-self: center;"></div> <div class="feature-name f-capability ${isGroupedByDate() ? '' : 'hidden-item'}">${isGroupedByDate() ? tabledata[i].ProductArea : capability}</div> </div> </div> <div class="f-feature-head-secorndary"> <div class="updated-cue-box ${showUpdatedCueBox(tabledata[i]) ? '' : 'hidden-item'}"> <div class="updated-cue ${showUpdatedCue(tabledata[i]) ? '' : 'hidden-item'}">UPDATED </div> </div> <div class="new-cue-box ${showNewCueBox(tabledata[i]) ? '' : 'hidden-item'}""> <div class="new-cue ${showNewCue(tabledata[i]) ? '' : 'hidden-item'}">NEW </div> </div> <div class="id-${tabledata[i].SnapshotId} placeholderDiv ${showPlaceholderBox(tabledata[i]) ? 'hidden-item' : ''}"> </div> <div class="milestone-details"> <div class="milestone-name">${mileStoneDetails.localeName}</div> <div class="milestone-date">${milesStoneDateValue}</div> </div> <div class="milestone-separator"> <div class="v-separator"> </div> </div> <!--This is place of replacement--> <div id="planHead-${tabledata[i].ReleasePlanID}"></div> <div class="comment-separator"> <div class="v-comment-separator"> </div> </div> </div> </a> </h4> </div> <div class="panel-collapse collapse" id="plan-${tabledata[i].SnapshotId}" data-id="plan-${tabledata[i].ReleasePlanID}" role="region" aria-labelledby="plan-${tabledata[i].SnapshotId}"> <div class="panel-body" style="display:flex;flex-wrap:wrap;"> <div class="f-main"> <div class="featuredata" id="${tabledata[i].SnapshotId}"> <div class="f-productarea">${tabledata[i].ProductArea }</div> <div class="f-expanded-name hidden">${tabledata[i].FeatureName}</div> <div class="f-detail" tabindex="-1">${tabledata[i].BusinessValue}</div> <div class="f-images carousel-container-${tabledata[i].SnapshotId}"></div> <div class="more--links${i} f-m-links"> <div class="plan-action-item" id="myplan-${tabledata[i].ReleasePlanID}"></div> </div> </div> <div class="hidden changeHistoryLoader"></div> </div> <div class="f-side"> <div class="r-item1"> <div class="r-item1-available"> <div class="r-heading">Available to:<br></div> <div class="r-value">${availableTo[0]}</div> </div> <div class="r-item1-lastupdated"> <div class="r-heading">Last updated:<br></div> <div class="r-value">${formattedGitCommitDate}</div> </div> </div> <hr> <div class="r-item2"> <div class="r-heading">Timelines:<br></div> <div class="r-value"> <div class="step"> <div> <div class="circle ${fillEADateBullet?'circle-fill':'circle-empty'}"></div> </div> <div> <div class="title">Early Access: <span class="EA-t-value${i}"></span></div> </div> </div> <div class="step"> <div> <div class="circle ${fillPPDateBullet?'circle-fill':'circle-empty'}"></div> </div> <div> <div class="title">Public Preview: <span class="PP-t-value${i}"></span></div> </div> </div> <div class="step"> <div> <div class="circle ${fillGADateBullet?'circle-fill':'circle-empty'}"></div> </div> <div> <div class="title">General Availability : <span class="GA-t-value${i}"></span></div> </div> </div> </div> <hr> </div> <div class="r-item3"> <div class="r-heading">Included in:<br></div> <div class="r-value">${tabledata[i].Product}<br> <div class="r-value-relWave ${isApplicableWave(`${tabledata[i].GAIsActiveWave}`,`${tabledata[i].GAIsSyncenable}`) ? '' : 'hidden-item'}">${tabledata[i].GAReleaseWaveName}</div> <div class="r-value-relWave ${isApplicableWave(`${tabledata[i].GAIsActiveWave}`,`${tabledata[i].GAIsSyncenable}`) && `${tabledata[i].GAReleaseWaveId}`? 'hidden-item' : ''}">${tabledata[i].ReleaseWaveName}</div> <div class="r-value-rOverviewLink rlink"> <a class="overview_hyperlink ${isApplicableWave(`${tabledata[i].GAIsActiveWave}`,`${tabledata[i].GAIsSyncenable}`) ? '' : 'hidden-item'}" onClick="openProductOverview('${tabledata[i].GAReleaseWaveName}','${tabledata[i].GAReleaseWaveId}','${availableTo[3]}','${tabledata[i].ProductID}',event,this,'allplans','${tabledata[i].ProductHierarchyPath}','${tabledata[i].SnapshotId}')" role="button" tabindex="0" style="text-decoration:underline;">Read release overview</a> <a class="overview_hyperlink ${isApplicableWave(`${tabledata[i].GAIsActiveWave}`,`${tabledata[i].GAIsSyncenable}`) && `${tabledata[i].GAReleaseWaveId}`? 'hidden-item' : ''}" onClick="openProductOverview('${tabledata[i].ReleaseWaveName}','${tabledata[i].ReleaseWaveID}','${availableTo[2]}','${tabledata[i].ProductID}',event,this,'allplans','${tabledata[i].ProductHierarchyPath}','${tabledata[i].SnapshotId}')" role="button" tabindex="0" style="text-decoration:underline;">Read release overview</a> </div> <div class="r-value-rwavePDFSummary-${tabledata[i].SnapshotId}" style="display:none;"> <a role="button" style="display:flex" class="r-dwl-link-${tabledata[i].SnapshotId} dwlPDFPopover" onClick="downloadWaveSummary('${waveID}','${tabledata[i].ProductHierarchyPath}','${tabledata[i].SnapshotId}')" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true" data-trigger="hover"> <div class="r-value-rwavePDFSummary-dwlLink" tabindex="0" style="text-decoration:underline;">Download wave summary</div> </a> </div> </div> <hr> </div> <div class="r-item4"><div class="r-heading">Enabled for:<br></div><div class="r-value" style="text-align:left;">${tabledata[i].EnabledFor}<br><div class="r-value-catedesc">${availableTo[1]}</div><div class="r-value-rDocLink${i} rlink"></div></div></div> </div> <div class="f-changeHistory hidden-item" style="padding: 20px 0px 32px 40px;width: 70%;" > <table style="width: 100%;"> <tbody> <tr> <th style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 15px;line-height: 24px;color: #000000;">Change history</th> </tr> </tbody> </table> </div> </div> </div> </div>`); const rowParent = $(`[id='${parentAccordionSelector}']`); rowParent.append(row); setBusinessValue(row.find('.f-detail'), 1000, showMoreText); if($(window).width() < 500){ setMoreValueTwo(row.find('.accordion-toggle.feature-title'),60,'...'); $(".f-expanded-name").removeClass('hidden'); $("[href=#plan-"+tabledata[i].SnapshotId+"]").children('.f-feature-head-primary').append(`<hr class="hr-seperator">`); $(".f-feature-head-primary").css('padding-right','0px'); } row.find('.f-detail').find('ul').find('br').remove(); // Remove <br> from ul/li tags $(`#myplan-${tabledata[i].ReleasePlanID}`).append(`<button class="btn notes-empty ${isMyReleasePlanSelected() ? '' : 'hidden-item'}" type="button" onClick="openNotesModel('${tabledata[i].ReleasePlanID}')" title="Add notes." tabindex="-1">Add notes</button> <button title="share this feature" aria-label="share this feature" class ="btn share-feature ${isMyReleasePlanSelected() ? 'hidden-item' : ''}" type="button" onClick="shareThisFeature('${tabledata[i].SnapshotId}',event,this)" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true">Share</button>`); renderAddRemovePlans($(`#planHead-${tabledata[i].ReleasePlanID}`), tabledata[i].ReleasePlanID); tabledata[i].EADateValue && tabledata[i].EADateValue != "-" ? row.find(`.EA-t-value${i}`).text(`${tabledata[i].EADateValue}`) : row.find(`.EA-t-value${i}`).text("---"); tabledata[i].PPDateValue && tabledata[i].PPDateValue != "-" ? row.find(`.PP-t-value${i}`).text(`${tabledata[i].PPDateValue}`) : row.find(`.PP-t-value${i}`).text("---"); tabledata[i].GADateValue && tabledata[i].GADateValue != '-' ? row.find(`.GA-t-value${i}`).text(`${tabledata[i].GADateValue}`) : row.find(`.GA-t-value${i}`).text("---"); highlightTimelineDate(row.find(`.EA-t-value${i}`), tabledata[i].EarlyAccessDate); highlightTimelineDate(row.find(`.PP-t-value${i}`), tabledata[i].PublicPreviewDate); highlightTimelineDate(row.find(`.GA-t-value${i}`), tabledata[i].GADate); let CTA_Buttons = ""; if (tabledata[i].BusinessValue || tabledata[i].FeatureDetails) { //CTA_Buttons += `<a onclick='redirectFeatureDetails("${tabledata[i].FeatureName}","${tabledata[i].BusinessValue}","${tabledata[i].FeatureDetails}","${tabledata[i].SnapshotId}","${tabledata[i].EnabledFor}","${tabledata[i].GADate}","${tabledata[i].GAStatus}","${tabledata[i].PPStatus}", event,this)' class='btn btn-default' role='button' tabindex='0'>Learn more</a>`; CTA_Buttons += `<a onclick="openFeatureDetails('${tabledata[i].SnapshotId}', event)" class="btn btn-default" role="button" tabindex="0">Learn more</a>`; } if (tabledata[i].OverviewVideoLink) { CTA_Buttons += `<a href="${tabledata[i].OverviewVideoLink}" class="btn btn-default" role="button" target="_blank"></a>`; } if (tabledata[i].BlogLink) { CTA_Buttons += `<a href="${tabledata[i].BlogLink}" class="btn btn-default" role="button" target="_blank">Read the blog</a>`; } if(tabledata[i].DocsUrl){ row.find(`.r-value-rDocLink${i}`).append(`<a class="readDocu" href="${tabledata[i].DocsUrl}" target = "_blank"> Read documentation </a>`) } row.find(`.more--links${i}`).append(CTA_Buttons); ChangeHistoryContent(tabledata[i].SnapshotId); } sharedLinkPopover(); focusFeature(); popoverTooltip("share-feature",UI_Strings.poverShareFeature); } function openFeatureDetails(snapshotId, event){ event.preventDefault(); var record = ''; if(isMyReleasePlanSelected() && ($(event.target).closest(".secondary-top-panel").length != 0 || isGroupedByDate())) record = AppState.userProductResults.find(item => item.SnapshotId === snapshotId); else record = AppState.productResults.find(item => item.SnapshotId === snapshotId); if(!record){ return; } record.FeatureDetails = record.FeatureDetails.replace('\\\\','\\'); let featureDetails=''; let Notes=''; if(record.FeatureDetails.contains('<blockquote>')){ Notes = record.FeatureDetails.substring(record.FeatureDetails.indexOf('<blockquote>')+12,record.FeatureDetails.indexOf('</blockquote>')).replace('[!NOTE]',''); Notes = Notes.replace("[!IMPORTANT]",''); featureDetails = record.FeatureDetails.replace(record.FeatureDetails.substring(record.FeatureDetails.indexOf('<blockquote>')),""); $('#featureDetailsModal').find('.notes-value').css('display',''); } else{ featureDetails = record.FeatureDetails; $('#featureDetailsModal').find('.notes-value').css('display','none'); } let modelWindowImages = $('<div>'); let featureDetailsContent = $('<div>'); featureDetailsContent.append(featureDetails); let snapshotImagePromise = AppState.snapshotImagePromises.find(item=>item.snapshotId === record.SnapshotId); let snapshotImages = []; snapshotImagePromise.annotationPromise.then(data =>{ if (data.results.length > 0) { data.results.forEach(element => { snapshotImages.push({ FileName: element.FileName, MimeType: element.MimeType, Description: element.Description, Title: element.Title, Image: element.Image }); }); let images = featureDetailsContent.find('img'); if(images.length <= 0){ snapshotImages.forEach(function(item){ let imageSrc = getImageBlobUrl(item.Image, item.MimeType); let val = "<img src = "+imageSrc+" alt= "+item.Description+" title= "+item.Title+" class='img-scale-down'/><br><br>"; modelWindowImages.append(val); }); } else{ images.each((index, element) =>{ let imageSrc = $(element).attr('src'); if(imageSrc.indexOf('media/') !== -1){ let imageName = imageSrc.substring(imageSrc.lastIndexOf(`/`) + 1); let imageAnnotation = snapshotImages.find(file => file.FileName === imageName); if(imageAnnotation){ let imageSrc = getImageBlobUrl(imageAnnotation.Image, imageAnnotation.MimeType); $(element).attr('src', imageSrc); } else $(element).css("display","none"); } let imageAlt = $(element).attr('alt'); imageAlt = imageAlt.replace('<!--alt text start -->', '').replace('<!--alt text end -->', ''); $(element).attr('alt', imageAlt); $(element).addClass('img-scale-down'); }); } } if(record.GeographicAreasDetails.length > 0) $('#featureDetailsModal').find('.geo-details').parent('div').css("display",""); else $('#featureDetailsModal').find('.geo-details').parent('div').css("display","none"); $('#featureDetailsModal').find('.images-content').html(''); $('#featureDetailsModal').find('.images-content').append(modelWindowImages); $('#featureDetailsModal').find('#featureDetailLabel').text(record.FeatureName); $('#featureDetailsModal').find('.feature-details').empty().append(featureDetailsContent); $('#featureDetailsModal').find('.geo-details').empty().append(record.GeographicAreasDetails); $('#featureDetailsModal').find('.bussiness-value').empty().append(record.BusinessValue); $('#featureDetailsModal').find('.notes-details').empty().append(Notes); if (record.AiContribution === "true") { $('#featureDetailsModal').find('.AIBanner').css('display', ''); } else { $('#featureDetailsModal').find('.AIBanner').css('display', 'none'); } if(record.GADate === '' && record.PPStatus.trim().toLowerCase() !== 'shipped'){ $('#featureDetailsModal').find('.ImportantNote').css('display',''); } else if(record.GADate !== '' && record.GAStatus.trim().toLowerCase() !== 'shipped'){ $('#featureDetailsModal').find('.ImportantNote').css('display',''); } else $('#featureDetailsModal').find('.ImportantNote').css('display','none'); $('#featureDetailsModal').modal('show'); }); $("#featureDetailsModal").attr("tabindex","1").attr("aria-hidden",false); $("#featureDetailsModal").find('.modal-footer').children('[data-dismiss="modal"]').attr("tabindex","1"); } //<-- Feature expand POC work start--> function redirectFeatureDetails(FeatureName,businessValue,featureDetails,snapshotID,enabledFor,GADate,GAStatus,PPStatus,event,thisEvent){ var featureBody = $(`<div style="border-color: #eee;border-width: 1px;border-bottom-style: solid;display: flex;padding: 10px;"> <button class="backBtnArea" style="display: flex;border: none;background: none;" onclick='backToFeature("${snapshotID}")'> <span class="featurePageBack"><</span> <div class="featurePageBack">Back</div> </button> </div> <div style="display:flex;"> <!--Element for Fmain and Fside--> <div class="feature-main" style="flex: 70%; background-color: #F6F7F9; padding: 20px 40px;"> <div class="Modal-body"> <div class="Feature-name-section" style="margin-bottom: 10px;"> <div style="font-family: Segoe UI;font-size: 20px;font-weight: 600;line-height: 28px;letter-spacing: 0px;text-align: left;">${FeatureName}</div> </div> <div class="Important-note-section" style="display:none;margin-bottom: 10px;"> <div style='display:flex;'> <div class="exclamationsvg"></div> <div class="importantText" style='margin-left: 6px;margin-top:-2px'>Important</div> </div> <div class="important-note" style="margin-top:12px"><b style="font-weight:600">Some of the functionality described in this release plan has not been released.</b> Delivery timelines may change and projected functionality may not be released (see <a href="https://www.microsoft.com/legal/intellectualproperty/online-disclaimer" target="_blank" style="color:#00748b" tabindex="1">Microsoft policy</a>).</div> </div> <h4 class="business-value-heading">Business value</h2> <div class="bussiness-value"> <div class="feature-details-section">${businessValue}</div> </div> <h4 class="feature-details-heading">Feature Details</h2> <div class="feature-details-section"> <div class="col-lg-12">${featureDetails} </div> </div> <div class="images-content"></div> </div> </div> <div class="feature-side" style="flex: 30%;"> </div> </div>`); const currentState = history.state || {}; var url=new URL(window.location); var hasStatus = url.searchParams.has('status'); if(hasStatus){ var status = url.searchParams.get('status'); sessionStorage.setItem("Status",status); url.searchParams.delete("status"); } url.searchParams.delete("featureName"); url.searchParams.append("featureName",FeatureName); history.replaceState(currentState, '', url); let modelWindowImages = $('<div>'); let featureDetailsContent = $('<div>'); featureDetailsContent.append(featureDetails); let snapshotImagePromise = AppState.snapshotImagePromises.find(item=>item.snapshotId === snapshotID); let snapshotImages = []; snapshotImagePromise.annotationPromise.then(data =>{ if (data.results.length > 0) { data.results.forEach(element => { snapshotImages.push({ FileName: element.FileName, MimeType: element.MimeType, Description: element.Description, Title: element.Title, Image: element.Image }); }); let images = featureDetailsContent.find('img'); if(images.length <= 0){ snapshotImages.forEach(function(item){ let imageSrc = getImageBlobUrl(item.Image, item.MimeType); let val = "<img src = "+imageSrc+" alt= "+item.Description+" title= "+item.Title+" class='img-scale-down'/><br><br>"; modelWindowImages.append(val); }); } else{ images.each((index, element) =>{ let imageSrc = $(element).attr('src'); if(imageSrc.indexOf('media/') !== -1){ let imageName = imageSrc.substring(imageSrc.lastIndexOf(`/`) + 1); let imageAnnotation = snapshotImages.find(file => file.FileName === imageName); if(imageAnnotation){ let imageSrc = getImageBlobUrl(imageAnnotation.Image, imageAnnotation.MimeType); $(element).attr('src', imageSrc); } else $(element).css("display","none"); } let imageAlt = $(element).attr('alt'); imageAlt = imageAlt.replace('<!--alt text start -->', '').replace('<!--alt text end -->', ''); $(element).attr('alt', imageAlt); $(element).addClass('img-scale-down'); }); } } featureBody.find('.images-content').html(''); featureBody.find('.images-content').append(modelWindowImages); }); featureBody.find('.feature-side').append($(thisEvent).closest(".f-main").siblings('.f-side')); $(".f-details").children('.videoCarousel').css("display","none"); $(".f-details").children('.overviewBannerText').css("display","none"); $(".f-details").children('.list-group--features').css("display","none"); $(".f-details").children('.plan-group').children().remove(); $(".f-details").children('.plan-group').append(featureBody); $(".f-details").children('.plan-group').css("padding-top","0px"); $('.exclamationsvg').append(getExclamationSvg()); if(GADate === '' && PPStatus.trim().toLowerCase()!== 'shipped'){ $(".f-details").find('.Important-note-section').css("display",''); } else if(GADate === '' && GAStatus.trim().toLowerCase()!== 'shipped'){ $(".f-details").find('.Important-note-section').css("display",''); } else $(".f-details").find('.Important-note-section').css("display",'none'); hideLoader(); } setTimeout(function(){ const url = new URL(window.location); var hasFeatureName = url.searchParams.has('featureName'); if(hasFeatureName){ showLoader(); var featureName = url.searchParams.get('featureName'); if(AppState.productResults.length>0) { var SnapshotRecord = AppState.productResults.find(x=>x.FeatureName == featureName); var id = "#myplan-"+SnapshotRecord.ReleasePlanID; $(id).siblings('a').click(); } //redirectFeatureDetails(); } },7000); function backToFeature(snapshotID){ const currentState = history.state || {}; var url = new URL(window.location); var status = sessionStorage.getItem("Status"); url.searchParams.append("status",status); url.searchParams.delete("featureName"); history.replaceState(currentState, '', url); sessionStorage.setItem("snapshotID", snapshotID); productClick($('.panel-group .panel .collapse').find('li.active').children('a')); $(".f-details").children('.list-group--features').css("display",""); $(".f-details").children('.plan-group').css("padding-top","40px"); } <!-- Feature expand POC work end--> function removeFromMyPlan(planId, parentId,thisEvent,event){ event.preventDefault(); webapi.safeAjax({ type: "DELETE", url: "/_api/rn_releasenotes("+planId+")/rn_ReleaseNote_Contact_Contact/$ref?$id=https://" + window.location.host + "/_api/contacts("+UserId+")", contentType: "application/json", success: function (res, status, xhr) { AppState.userSnapshots = $.grep(AppState.userSnapshots, function(item){ return item.ReleasePlanID !== planId; }); let ifExist = $(thisEvent).closest('.secondary-top-panel').children('.panel-collapse').length; let closedElementParent = $(thisEvent).closest('.secondary-top-panel'); if(ifExist<=0) $(closedElementParent).children('.top-panel-heading').hide(); resetUserProductList(); }, error: function (error) { console.log(error); } }); if(isMyReleasePlanSelected()){ let parentPlanElement = $(`#${parentId}`).closest('.list-group--data-items'); let parentGroup = $(`#${parentId}`).closest('.list-group--data'); parentPlanElement.remove(); let remainingPlans = $('.list-group--data-items').length; if(remainingPlans === 0){ setNoResultMessage($('#accordion-group')); } if($(".status--filters-1").children().hasClass('active')) PlannedCount--; if($(".status--filters-2").children().hasClass('active')) ComingSoonCount--; if($(".status--filters-3").children().hasClass('active')) TryNowCount--; setCount(); } else{ $(`#${parentId}`).empty(); appendAddToPlanButton(planId, parentId); } } function updateJson(elementId,checkUncheck) { let parentID = $("[name='"+elementId+"']").parent().parent().attr("id"); if(parentID.contains('StatusBox')) { $.each( filterBoxState.FilterBy[0].Status , function( key, value ) { if(key === elementId) filterBoxState.FilterBy[0].Status[elementId] = checkUncheck; }); } else if(parentID.contains('AvailDateBox')) //sort by Availaibility dates { $.each( filterBoxState.SortBy[0].AvailabilityDates , function( key, value ) { if(key === elementId) filterBoxState.SortBy[0].AvailabilityDates[elementId] = checkUncheck; }); } else if(parentID.contains('ForBox')) { $.each( filterBoxState.FilterBy[0].For , function( key, value ) { if(key === elementId) filterBoxState.FilterBy[0].For[elementId] = checkUncheck; }); } else if(parentID.contains('sortByBox')) // sort by old to new & vice versa { $.each( filterBoxState.SortBy[0].order , function( key, value ) { if(key === elementId) filterBoxState.SortBy[0].order[elementId] = checkUncheck; }); } else if(parentID.contains('bodyBlock3')) //Filter by Availaibility { $.each( filterBoxState.FilterBy[0].Availability , function( key, value ) { if(key === elementId) filterBoxState.FilterBy[0].Availability[elementId] = checkUncheck; }); } else if(parentID.contains('bodyBlock4')) //Filter by Release wave { $.each( filterBoxState.FilterBy[0].Wave , function( key, value ) { //if(key === elementId) filterBoxState.FilterBy[0].Wave[elementId] = checkUncheck; }); } } function ReleaseWaveFilter(featureObj) { var filterWave = filterBoxState.FilterBy[0].Wave; var waveEnabled = false; var firstWave = false; var secondWave = false; var thirdWave = false; $.each(filterWave,function(key,value){ if(value) waveEnabled = true; }); if(waveEnabled){ //enabled for filter let releaseWaveName = featureObj.SegmentPath.trim(); let GAreleaseWaveName = featureObj.GASegmentPath.trim(); $.each(filterWave,function(key,value){ if((key === releaseWaveName || key === GAreleaseWaveName) && value){ let index = Object.keys(filterWave).indexOf(key); if(index===0) firstWave=true; else if(index===1) secondWave=true; else if(index===2) thirdWave=true; } }); if(firstWave && secondWave && thirdWave) return true; else if(firstWave && secondWave) return true; else if(firstWave && thirdWave) return true; else if(secondWave && thirdWave) return true; else if(firstWave) return true; else if(secondWave) return true; else if(thirdWave) return true; else return false; } else return true; } function skipThisWave(featureObj){ let wavesLength = AppState.SkipWave.length; if(wavesLength>0){ let index = AppState.SkipWave.indexOf(featureObj.ReleaseWaveID); if(index >=0 ) return false; else return true; } else return true; } function updateWaveState(){ let len = AppState.urlParams.wave.selectedValue.length; //if(len<=0) return; let param=''; $.each(AppState.urlParams.wave.selectedValue,function(index,value){ param+=value; if(len !== index+1) param+=','; }); updateHistoryState(AppState.urlParams.wave.key, param); } function updateAvailabilityState(){ let len = AppState.urlParams.availability.selectedValue.length; //if(len<=0) return; let param=''; $.each(AppState.urlParams.availability.selectedValue,function(index,value){ param+=value; if(len !== index+1) param+=','; }); updateHistoryState(AppState.urlParams.availability.key, param); } function setFilterOnLoad(){ const url = new URL(window.location); let newParam = new URLSearchParams(url.search); let availParam=''; let waveParam=''; if(newParam.has('availability')){ let availFilter='avail'; availParam=url.searchParams.get('availability'); if(availParam!=''){ let availArr = availParam.split(','); $.each(availArr,function(index,value){ filterBoxState.FilterBy[0].Availability[value]=true; }); } } if(newParam.has('wave')){ let waveFilter='wave'; waveParam=url.searchParams.get('wave'); if(waveParam!=''){ let waveArr = waveParam.split(','); $.each(waveArr,function(index,value){ filterBoxState.FilterBy[0].Wave[value]=true; }); } } if(availParam!='' || waveParam!=''){ filterBoxStateObjectUpdate(); } } function downloadWaveSummary(waveID,ProductHierarchyPath,snapshotID,load=false){ let parentProd=ProductHierarchyPath.split('/')[1]; let wurl = `${document.location.origin}/wave-overview-snapshot/?waveID=${waveID}&productFamily=${parentProd}`; $.ajax({ url: wurl, success: function(data) { var parsedData = JSON.parse(data); if(parsedData.results.length > 0 ){ if(load){ $(".r-value-rwavePDFSummary-"+snapshotID).css('display',""); $(".prodOverview-"+snapshotID).css('display',""); } else{ let docURL = parsedData.results[0].docURL; var parsedDocURL = new URL(docURL); const urlParams2 = new URLSearchParams(parsedDocURL.search); if(!parsedDocURL.search.contains("linkid")) { let langLocaleFromDocURL = urlParams2.get('url').split('/')[3]; var localeURL = ''; if(langLocaleFromDocURL.length >0){ localeURL = parsedDocURL.origin + parsedDocURL.pathname+"?url="+urlParams2.get('url').replace(langLocaleFromDocURL,langCode); } else localeURL = docURL; let count = parsedData.results[0].dwlCount; let releaseOverviewSnapshotID = parsedData.results[0].releaseWaveOverviewID; UpdatePdfCount(count,releaseOverviewSnapshotID); window.open(localeURL,'_blank'); } else window.open(docURL,'_blank'); } } } }); } function dwlWavePopover(){ $(".dwlPDFPopover").each(function(i, obj) { $(this).popover({ html: true, sanitize: false, content: function() { return $('#popover-content-dwlPDF').html(); } }); }); } function UpdatePdfCount(count,releaseOverviewSnapshotID){ let toStr=""; if(count==="") toStr="1"; else{ let toINt = parseInt(count)+1; toStr = toINt.toString(); } var record = {}; record.mssh_pdfdownloadcount = toStr; webapi.safeAjax({ type: "PATCH", contentType: "application/json", url: "/_api/mssh_releaseoverviewsnapshots("+releaseOverviewSnapshotID+")", data: JSON.stringify(record), success: function (data, textStatus, xhr) { console.log("Record updated"); }, error: function (xhr, textStatus, errorThrown) { console.log(xhr); } }); } function isApplicableWave(GAIsActiveWave, GAIsSyncenable){ if(GAIsSyncenable.toLowerCase() === "true") return true; else return false; } </script> <script> function openNotesModel(snapshotID){ lazyLoadCSS('https://cdn.quilljs.com/1.3.6/quill.core.css'); lazyLoadCSS('https://cdn.quilljs.com/1.3.6/quill.snow.css'); lazyLoadJS('https://cdn.quilljs.com/1.3.6/quill.js','text/javascript'); lazyLoadJS('https://cdn.quilljs.com/1.3.6/quill.min.js','text/javascript'); lazyLoadJS('https://cdnjs.cloudflare.com/ajax/libs/dompurify/2.0.12/purify.min.js','text/javascript'); $("#commentModal").children('.modal-dialog').children('.modal-content').children('.modal-body').children().remove(); let spinner = `<div style="display:flex;flex-direction: column;align-items: center;" class="openComment"><p>Retrieving comments...</p><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span></div>`; $("#commentModal").children('.modal-dialog').children('.modal-content').children('.modal-body').append(spinner); $("#commentModal").attr("data-id",snapshotID); var loggedInUserID = ""; $('#commentModal').modal('show'); var editorBox = `<div id="editor"></div>`; let purl = `${document.location.origin}/notes-comment/?releasePlanID=${snapshotID}&linkedUserID=${UserId}`; $.ajax({ url: purl, success: function(data) { $("#commentModal").find(".modal-body").children('.openComment').remove(); var clearedData = data.replaceAll('\t','').replaceAll('\r','').replaceAll('\b','').replaceAll('\f',''); var parsedData = JSON.parse(clearedData); for(var i=0;i<parsedData.results.length ; i++) { let systemCreatedDate = parsedData.results[i].createdon; var indexOffirstMatchCharSysCreated = /[.\/:-]/.exec(systemCreatedDate).index; var symbolToSplitonSysCreated = systemCreatedDate[indexOffirstMatchCharSysCreated]; var timeSys = ''; if( systemCreatedDate.split(symbolToSplitonSysCreated).length >3){ timeSys = systemCreatedDate.split(symbolToSplitonSysCreated)[2].split(' ')[1]+":"+systemCreatedDate.split(symbolToSplitonSysCreated)[3]+":"+systemCreatedDate.split(symbolToSplitonSysCreated)[4]; } else if(systemCreatedDate.split(symbolToSplitonSysCreated).length>0 && systemCreatedDate.split(symbolToSplitonSysCreated).length<=3) timeSys = systemCreatedDate.split(symbolToSplitonSysCreated)[2].split(' ')[1]; var indexOffirstMatchCharTimeOnly = /[.\/:-]/.exec(systemCreatedDate).index; timeSys = timeSys.replace('.',':'); let UpdatedSystemCreatedDate = systemCreatedDate.split(symbolToSplitonSysCreated)[1] +"/"+systemCreatedDate.split(symbolToSplitonSysCreated)[0]+"/"+systemCreatedDate.split(symbolToSplitonSysCreated)[2].split(' ')[0]+' '+timeSys; var tempDate = moment(UpdatedSystemCreatedDate).format('DD/MM/YYYY hh:mm A'); let createdDate = new Date(UpdatedSystemCreatedDate); createdDate = moment(createdDate).format('DD/MM/YYYY hh:mm A'); //-------------------------------------------------------------------------- let systemModifiedDate = parsedData.results[i].modifiedon; var indexOffirstMatchCharSysModified = /[.\/:-]/.exec(systemModifiedDate).index; var symbolToSplitonSysModi = systemModifiedDate[indexOffirstMatchCharSysModified]; var timeSys = ''; if( systemModifiedDate.split(symbolToSplitonSysModi).length >3){ timeSys = systemModifiedDate.split(symbolToSplitonSysModi)[2].split(' ')[1]+":"+systemModifiedDate.split(symbolToSplitonSysModi)[3]+":"+systemModifiedDate.split(symbolToSplitonSysModi)[4]; } else if(systemModifiedDate.split(symbolToSplitonSysModi).length>0 && systemModifiedDate.split(symbolToSplitonSysModi).length<=3) timeSys = systemModifiedDate.split(symbolToSplitonSysModi)[2].split(' ')[1]; let UpdatedSystemModifiedDate = systemModifiedDate.split(symbolToSplitonSysModi)[1] +"/"+systemModifiedDate.split(symbolToSplitonSysModi)[0]+"/"+systemModifiedDate.split(symbolToSplitonSysModi)[2].split(' ')[0]+' '+timeSys; let modifiedDate = new Date(UpdatedSystemModifiedDate); modifiedDate = moment(modifiedDate).format('DD/MM/YYYY hh:mm A'); let contactName = DOMPurify.sanitize(parsedData.results[i].portalContact); let splittedName = contactName.split(' '); let initialName = ''; if(splittedName.length>0){ initialName = splittedName[0].charAt(0).toUpperCase() + splittedName[1].charAt(0).toUpperCase(); } else initialName = splittedName[0].charAt(0).toUpperCase(); var back = ["#EBF1F9","#FDE9A3"]; var rand = back[Math.floor(Math.random() * back.length)]; var chatHead = `<div class="group-${snapshotID}_${i}" data-id="${parsedData.results[i].activityID}" tabindex="1" aria-label="comment-${i}"> <div class="header-tab" style="display: flex;"> <div class="img"> <div style="width: 30px;height: 30px;object-fit: cover;border-radius: 50%;text-align: center;color: #0258AD;font-family: 'Segoe UI';font-style: normal;font-weight: 600;font-size: 13px;">${DOMPurify.sanitize(initialName)}</div> </div> <div style="flex:1;margin-top: -4px;margin-left: 10px;"> <p style="margin-bottom: -6px;" aria-label="created by ${contactName}" tabindex="1">${contactName}</p> <div style="display:flex;"> <p style="font-size: 10px;" aria-label="on ${createdDate}" tabindex="1">${createdDate}</p> <p style="font-size: 10px;margin-left: 5px" class="isEdited hidden">(edited)</p> </div> </div> <div class="actionArea"> <button class="edit-button nobackButton" type="button" onClick="ActionEdit(this,event)" name="Edit dropdown" aria-label="Edit dropdown" tabindex="1"></button> </div> </div> <div class="edit-action-modal hidden" style="margin-top:-22px;right: 30px;background-color: white;position: absolute;" onClick="ToggelActionEdit(event)"> </div> <div class="data_${parsedData.results[i].activityID}" tabindex="1" aria-label="Comment ${i} descripion is: ${DOMPurify.sanitize(parsedData.results[i].description)}"> ${DOMPurify.sanitize(parsedData.results[i].description)} </div> </div><hr>`; $("#commentModal").children('.modal-dialog').children('.modal-content').children('.modal-body').append(chatHead); if(createdDate !== modifiedDate) $('.group-'+snapshotID+'_'+i).children('.header-tab').find('.isEdited').removeClass('hidden'); $(".group-"+snapshotID+"_"+i).find(".img").children('div').css('background',rand); chatHead=''; if(loggedInUserID === parsedData.results[i].portalContactID) { $('.group-'+snapshotID+'_'+i).children('.header-tab').children().children('.edit-button').append(threeDotsVerticle()); } } var commentNotification = `<h3 class="commentNote" aria-label="Add new notes" tabindex="1">Add Note</h3> <div class="PIIBanner" aria-label="Important banner"> <div class="exclamationImage"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path fill-rule="evenodd" clip-rule="evenodd" d="M20.5393 15.6245C21.1155 16.6218 21.1118 17.8149 20.5319 18.816C19.9482 19.8244 18.9103 20.4265 17.7541 20.4265H6.1998C5.04732 20.4265 4.01675 19.8318 3.44051 18.8418C2.85688 17.8408 2.85319 16.6403 3.42943 15.6319L9.22136 5.60312C9.7939 4.60209 10.8282 4 11.988 4C13.1479 4 14.1822 4.5984 14.7547 5.60682L20.5393 15.6245ZM17.7502 18.9748C18.3855 18.9748 18.9544 18.646 19.2757 18.092C19.5934 17.5416 19.5971 16.8915 19.2868 16.3522L13.4986 6.32711C13.1846 5.77673 12.6194 5.44798 11.9878 5.44798C11.3525 5.44798 10.791 5.77304 10.477 6.32342L4.68509 16.3485C4.36742 16.9026 4.37112 17.5601 4.68879 18.1104C5.00276 18.6534 5.56792 18.9748 6.19587 18.9748H17.7502ZM11.9844 15.5432C11.482 15.5432 11.0609 15.9643 11.0609 16.4667C11.0609 16.969 11.482 17.3901 11.9844 17.3901C12.4683 17.3901 12.9078 16.969 12.8857 16.4889C12.9078 15.9606 12.4904 15.5432 11.9844 15.5432ZM11.0427 10.069C11.0427 9.58508 11.3161 9.18614 11.7556 9.06055C12.1952 8.95713 12.6348 9.16767 12.8231 9.58138C12.8859 9.72914 12.9081 9.87689 12.9081 10.0431C12.897 10.274 12.8813 10.5048 12.8656 10.7357C12.8499 10.9666 12.8342 11.1974 12.8231 11.4283C12.8028 11.7848 12.7816 12.1412 12.7603 12.4977C12.7391 12.8541 12.7179 13.2106 12.6975 13.567C12.6754 13.7997 12.6754 14.0103 12.6754 14.2393C12.6569 14.6198 12.3614 14.9116 11.9846 14.9116C11.6079 14.9116 11.3161 14.6382 11.2939 14.2615C11.2625 13.7055 11.2311 13.1552 11.1997 12.6048C11.1683 12.0544 11.1369 11.504 11.1055 10.9481C11.0944 10.8022 11.0843 10.6554 11.0741 10.5086C11.064 10.3617 11.0538 10.2149 11.0427 10.069Z" fill="#D83B01"/> </svg></div> <div class="commentPIIBanner" tabindex="1">Please don't share any personal or confidential information in your notes</div> </div>`; $("#commentModal").children('.modal-dialog').children('.modal-content').children('.modal-body').append(commentNotification); $("#commentModal").children('.modal-dialog').children('.modal-content').children('.modal-body').append(editorBox); quill = new Quill('#editor', { modules: { toolbar: true }, theme: 'snow' }); delete quill.getModule('keyboard').bindings["9"]; $(".ql-editor").css("height","200px"); $(".ql-editor").attr("tabindex","1"); $(".ql-toolbar").find('button').attr('tabindex','1'); $(".ql-toolbar").find('.ql-picker-label').attr("tabindex","1"); $(".ql-toolbar").find('.ql-picker-options').children().attr("tabindex","1"); }, error: function (error) { $("#commentModal").children('.modal-dialog').children('.modal-content').children('.modal-body').append(editorBox); var quill = new Quill('#editor', { modules: { toolbar: true }, theme: 'snow' }); delete quill.getModule('keyboard').bindings["9"]; $(".ql-editor").css("height","200px"); $(".ql-editor").attr("tabindex","1"); $(".ql-toolbar").find('button').attr('tabindex','1'); $(".ql-toolbar").find('.ql-picker-label').attr("tabindex","1"); $(".ql-toolbar").find('.ql-picker-options').children().attr("tabindex","1"); } }); $("#commentModal").attr("tabindex","1").attr("aria-hidden",false); $("#commentModal").find('.modal-footer').children('[data-dismiss="modal"]').attr("tabindex","2"); $("#commentModal").find('.modal-footer').children('.notes-apply-btn').attr("tabindex","2"); } <!--Added for contact RP Model start--> function createAssociationHandler(planID,parentID,event){ event.stopPropagation(); loadCreateAssociationModal(planID,parentID); $("#createApplicationModal").css("display","block"); } function triggerOriginalButtonClick() { var $modal = $('#createAssociationModal'); var $iFrame = $modal.find('iframe'); var iframeContents = $iFrame.contents(); iframeContents.find('#InsertButton').click(); } function loadCreateAssociationModal(planID, parentID) { var createURL = '/_portal/modal-form-template-path/6052aef1-9ed7-ed11-a7c7-0022482e7599?entityformid=ff84e192-4843-ef11-8409-7c1e520d298b'; var createAppURL = createURL; var $modal = $("#createAssociationModal"); var $iFrame = $modal.find("iframe"); $iFrame.prop('src', createAppURL); var iframeLoaded = false; $iFrame.on("load", function() { if (iframeLoaded) return; iframeLoaded = true; history.replaceState(null, null, location.pathname + location.search); manipulateIframeContents(planID, parentID); $modal.modal(); }); } function manipulateIframeContents(planID, parentID) { var $modal = $("#createAssociationModal"); var $iFrame = $modal.find("iframe"); var iframeContents = $iFrame.contents(); if (iframeContents.length > 0) { var $privateText = iframeContents.find("#privateModeText"); $privateText.hide(); var $submitButton = iframeContents.find("#InsertButton"); var $lookupField = iframeContents.find("#mssh_releaseplan_name"); var $lookupFieldValue = iframeContents.find("#mssh_releaseplan"); var $lookupFieldEntityType = iframeContents.find("#mssh_releaseplan_entityname"); var FeatureName = AppState.productResults.find(x => x.ReleasePlanID == planID).FeatureName; var $lookupButton = iframeContents.find('.input-group-btn .btn.clearlookupfield'); $lookupField.val(FeatureName); $lookupFieldValue.val(planID); $lookupFieldEntityType.val("rn_releasenote"); $lookupField.prop('disabled', true); $lookupButton.prop('disabled', true); iframeContents.find("body .input-group-btn").eq(0).hide(); iframeContents.find("body #mssh_releaseplan_name").css({"width": "650px", "height": "50px"}); iframeContents.find("body .text-muted").css("display", "none"); iframeContents.find('.input-group-btn').eq(4).hide(); iframeContents.find("#InsertButton").parent(".actions").hide(); iframeContents.find("#InsertButton").hide(); $lookupField.trigger("change"); if ($submitButton.length > 0) { $submitButton.off("click").on("click", function() { AppState.userSnapshots.push({ 'SnapshotContactId': UserId, 'ProductId': AppState.selectedProduct, 'ReleasePlanID': planID }); resetUserProductList(); $(`#${parentID}`).empty(); appendRemoveFromPlanButton(planID, parentID); $modal.modal('hide'); }); } } } <!-- Added for contact RP Model end--> function CommentApply(){ let saveSpinner = `<span class="glyphicon glyphicon-refresh save-comment" aria-hidden="true" style="margin-left: 47%;">Saving</span>`; let extraLength = `<div class="LenghtVali" style="color: red;margin-top: 5px;">.</div>`; var userID = ""; var store = quill.root.innerHTML; var releasePlanID = $("#commentModal").attr("data-id"); var a=new Date();//system date var systemDate = moment(a).format('YYYY-MM-DD HH:mm'); var record = {}; record["mssh_portalcontact_adx_portalcomment@odata.bind"] = "/contacts("+userID+")"; record["mssh_linkedcontact_adx_portalcomment@odata.bind"] = "/contacts("+UserId+")"; record.description = store; // Multiline Text record["regardingobjectid_rn_releasenote_adx_portalcomment@odata.bind"] = "/rn_releasenotes("+releasePlanID+")"; // Lookup var lengthOfText = quill.root.textContent.length; if( lengthOfText > 0){ if(lengthOfText > 3000){$("#commentModal").find('.modal-body').append(extraLength);$("#commentModal").find('.save-comment').remove();} else{ $('.notes-apply-btn').prop('disabled', true); $("#commentModal").find('.LenghtVali').remove(); $("#commentModal").find('.modal-body').append(saveSpinner); webapi.safeAjax({ type: "POST", contentType: "application/json", url: "/_api/adx_portalcomments", data: JSON.stringify(record), success: function (data, textStatus, xhr) { $("#commentModal").find('.modal-body').find('.save-comment').remove(); $('.notes-apply-btn').prop('disabled', false); openNotesModel(releasePlanID); }, error: function (xhr, textStatus, errorThrown) { $('.notes-apply-btn').prop('disabled', false); console.log(xhr); } });} } } function ActionEdit(e,event){ event.stopPropagation(); var isHidden = $("."+e.parentElement.parentElement.parentElement.className).children(".edit-action-modal").hasClass('hidden'); let className = e.parentElement.parentElement.parentElement.className; let data_id = $(e).parent().parent().parent().attr('data-id'); if(isHidden){ $("#commentModal").find('.edit-action-modal').addClass('hidden'); $("#commentModal").find('.edit-button').removeClass('editActionClick'); $("."+className).children(".edit-action-modal").children().remove(); var actionButtons = `<div class="this-element" style="border: 1px solid rgba(0,0,0,.2);border-radius: 6px;box-shadow: 0px 0px 4px rgb(0 0 0 / 10%);width: auto;height: auto;padding: 5px;display: flex;flex-direction: column;" tabindex="1"> <button class="nobackButton" id="editSection" type="button" style="display: flex;" onClick="EditComment('${className}','${data_id}')" aria-label="Edit comment" name="Edit comment" tabindex="1"> <div style="" class="editIconAttach" style="margin-top: 2px"></div> <div style="margin-left: 10px;" class="editStatement"><p>Edit</p></div> </button> <hr style="width: 100%;margin-top: 5px;margin-bottom: 5px;"> <button class="nobackButton" id="deleteSection" type="button" style="display: flex;" onClick="DeleteComment('${className}','${data_id}')" aria-label="Delete comment" name="Delete comment" tabindex="1"> <div class="deleteIconAttach" style="margin-top: 2px"></div> <div style="margin-left: 10px;" class="deleteStatement"><p>Delete</p></div> </button> </div>`; $(e).addClass('editActionClick'); $("."+className).children(".edit-action-modal").append(actionButtons); $("."+className).children(".edit-action-modal").find('.editIconAttach').append(pencilEditSvg()); $("."+className).children(".edit-action-modal").find('.deleteIconAttach').append(getRedDeleteSvg()); $("."+className).children(".edit-action-modal").removeClass('hidden'); } else{ $("."+className).children(".edit-action-modal").addClass('hidden'); $("."+className).children(".edit-action-modal").children().remove(); $(e).removeClass('editActionClick'); } } function DeleteComment(snapshotIDClass, commentID){ let spinner = `<span class="glyphicon glyphicon-refresh delete-comment" aria-hidden="true" style="margin-left: 47%;top: -20px;">Deleting</span>`; $("."+commentID).css("opacity","20%"); $("."+snapshotIDClass).append(spinner); webapi.safeAjax({ type: "DELETE", url: "/_api/adx_portalcomments("+commentID+")", contentType: "application/json", success: function (data, textStatus, xhr) { let snapID = $("."+snapshotIDClass).closest(".modal-window").attr('data-id'); openNotesModel(snapID); }, error: function (xhr, textStatus, errorThrown) { $("."+snapshotIDClass).find('.delete-comment').remove(); } }); } function EditComment(snapshotIDClass,commentID){ var editorBoxAction = `<div id='editor_edit_${commentID}'></div>`; var commentText = $('.data_'+commentID).html().replace('\n','').trim(); $('.data_'+commentID).text(''); $(".data_"+commentID).append(editorBoxAction); quills = new Quill('#editor_edit_'+commentID, { modules: { toolbar: true }, theme: 'snow' }); delete quill.getModule('keyboard').bindings["9"]; quills.setContents(quills.clipboard.convert(commentText), 'user'); let updateArea = `<div class="update-area hidden" style="display:flex;"> <button class="save-comment-area nobackButton" type="button" style="align-items: center;align-content: space-between;margin-right: 10px;display:flex;" onClick="SaveEditedComment('${snapshotIDClass}','${commentID}')" aria-label="save comment" name="save comment" tabindex="1"> <div class="save-button-image" style="margin-right: 2px;"></div> <div class="save-button" style="margin-top: -3px;">Save</div> </button> <button class="cancle-comment-area nobackButton" type="button" style="display:flex;" onClick="CancelEditing('${snapshotIDClass}','${commentID}')" aria-label="cancel editing" name="cancel editing" tabindex="1"> <div class="cancle-button-image" style="margin-right: 2px;"></div> <div class="cancle-button" style="margin-top: -2px;">Cancel</div> </button> </div>`; $("."+snapshotIDClass).children(".edit-action-modal").addClass('hidden'); $("."+snapshotIDClass).children().find('.actionArea').append(updateArea); $("."+snapshotIDClass).children().find('.actionArea').children('.update-area').children('.cancle-comment-area').children('.cancle-button-image').append(getCancleButtonSvg()); $("."+snapshotIDClass).children().find('.actionArea').children('.update-area').children('.save-comment-area').children('.save-button-image').append(getSaveSvg()); $("."+snapshotIDClass).children().find('.actionArea').children('.edit-button').addClass('hidden'); $("."+snapshotIDClass).children().find('.actionArea').children('.update-area').removeClass('hidden'); } function SaveEditedComment(snapshotIDClass,commentID){ var savingSpinner = `<span class="glyphicon glyphicon-refresh saving-comment" aria-hidden="true" style="margin-left: 47%;top: -20px;">Saving</span>`; let extraLength = `<div class="LenghtVali" style="color: red;margin-top: 5px;">You have exceeded the allowed number of characters.</div>`; let updatedComment = quills.root.innerHTML; let snapshotID = $("."+snapshotIDClass).closest('.modal-window').attr('data-id'); var record = {}; record.description = updatedComment; var lengthOfText = quills.getText().replaceAll("\n","").trim().length; if(lengthOfText>3000){$("#commentModal").find(".data_"+commentID).append(extraLength);$("#commentModal").find('.save-comment').remove();} else{ $('.save-comment-area').prop('disabled', true); $('.save-comment-area').css("opacity",'50%'); $(".data_"+commentID).append(savingSpinner);$("#commentModal").find('.LenghtVali').remove(); webapi.safeAjax({ type: "PATCH", contentType: "application/json", url: "/_api/adx_portalcomments("+commentID+")", data: JSON.stringify(record), success: function (data, textStatus, xhr) { $(".data_"+commentID).children().remove(); $('.save-comment-area').prop('disabled', false); $('.save-comment-area').css("opacity",'100%'); openNotesModel(snapshotID); }, error: function (xhr, textStatus, errorThrown) { $('.save-comment-area').prop('disabled', false); $('.save-comment-area').css("opacity",'100%'); console.log(xhr); } }); } } function CancelEditing(snapshotIDClass,commentID){ let snapshotID = $("."+snapshotIDClass).closest('.modal-window').attr('data-id'); openNotesModel(snapshotID); } function loadPostExpand(snapID){ const showMoreText = `... click Learn more for details.`; let snapshotPromise = AppState.snapshotImagePromises.find(item=>item.snapshotId === snapID); if(!snapshotPromise) { $(`.carousel-container-${snapID}`).addClass('imageLoader'); snapshotPromise = {snapshotId: snapID, annotationPromise: getImagesFromAttachment(snapID, $(`.carousel-container-${snapID}`))}; AppState.snapshotImagePromises.push(snapshotPromise); } const annotationsPromise = snapshotPromise.annotationPromise; createMediaCarousel(annotationsPromise, snapID, function(hasImages, $imageContainer){ if(hasImages && $imageContainer){ let $parentDetailElement = $imageContainer.closest('.featuredata').find('.f-detail'); setBusinessValue($parentDetailElement, 700, showMoreText); } }); var productResultObj =''; let selectedPlanGroup=false; let isMyplan= false; if(urlUserID !== "" && urlUserID !== null) selectedPlanGroup = isSharedReleasePlan(); else{ selectedPlanGroup = isMyReleasePlanSelected(); isMyplan=true;} if(selectedPlanGroup){ if(isMyplan) productResultObj = AppState.userProductResults.find(item => item.SnapshotId === snapID); else productResultObj = AppState.productResults.find(item => item.SnapshotId === snapID); } else productResultObj = AppState.productResults.find(item => item.SnapshotId === snapID); let waveID = productResultObj.ReleaseWaveID; if(productResultObj.ReleaseWaveID == '' || productResultObj.ReleaseWaveID == undefined){ waveID = productResultObj.GAReleaseWaveId; } downloadWaveSummary(waveID,productResultObj.ProductHierarchyPath,snapID,true); } </script> <style> @media screen and (max-width: 1010px){ .videoCarousel{ margin-top: 65px; margin-bottom: 55px; } .plan-group{ margin-top: 55px; } .modal-dialog { width: 95%; } #videoModalWindow, #productOverviewmodelVideo{ height:auto; } #accordion-group { padding-top: 10px; } } .overviewBanner{ display: flex; align-items: center; justify-content: space-between; width: 100%; height: 59px; margin-bottom: 20px; } div.image{ content: url("/videoBanner.png"); } .bannerTextDecoration{ font-family: 'Segoe UI'; font-style: normal; font-weight: 700; font-size: 18px; line-height: 24px; color: #FFFFFF; display: inline; text-decoration: underline; } .highlightMessage{ align-items: center; width: 270px; float: right; display: flex; color: white; margin-left: 15px; flex-direction: row; justify-content: space-between; } .save-button:hover,.cancle-button:hover, .editStatement:hover, .deleteStatement:hover, .languageText:hover, .dwlPDFPopover:hover, .overview_hyperlink:hover, .readDocu:hover{ text-decoration: underline; transition: 0.7s; } .notes-apply-btn:hover{ color:white; } #editSection:hover,#deleteSection:hover, .save-comment-area:hover, .cancle-comment-area:hover{ background-color:#ebf1f9; } .commentApplyButton:active,.commentApplyButton:focus{ color: white } #hamburger:focus{ outline:auto!important; } </style> <div> </div> <!--Product overview Model Window start--> <div id="productOverviewModal" class="modal fade modal-window" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true" name="Close product overview window">×</button> <h1 class="modal-title title" id="productOverviewDetailLabel"></h1> </div> <div class="modal-body"> <div class="row important-notes-value hidden" style="background: #EBF1F9;"> <div class="important-note-title">Important</div> <div class="important-notes-details col-lg-12"> </div> </div> <h2 class="overview-head">Overview</h2> <iframe alt="product Overview Video" width="1100" height="500" id="productOverviewmodelVideo" style="max-width: 100%;width:100%" class='hidden'> </iframe> <br> <div class="row overview-details"> <div class="col-lg-12"> </div> </div> <div class="row AIBanner-notes-value hidden" style="background: #EBF1F9;"> <div class="AIBanner-note col-lg-12"></div> </div> <h2 class="whats-new-head">What's new and planned</h2> <br> <div class="investement-image"></div> <br> <div class="whats-new-deatails"> <div class="col-lg-12"> </div> </div> </div> <div class="modal-footer"> <button class="btn" data-dismiss="modal" aria-hidden="true" aria-label="Close product overview window">Close</button> </div> </div> </div> </div> <!--Product overview Model Window end--> <!--Video Model Window start--> <div id="videoModal" class="modal fade modal-window" tabindex="-1" aria-labelledby="overviewModelWindowLabel"> <div class="modal-dialog" role="dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close Video modal window">×</button> <h1 class="modal-title title" id="overviewModelWindowLabel"></h1> </div> <div class="modal-body"> <iframe alt="HECFIT-Mobile App-V2.mp4" width="1100" height="500" id="videoModalWindow" style="max-width: 100%;width: 100%;" class='hidden productOverviewVideo'> </iframe> </div> <div class="modal-footer"> <button class="btn" data-dismiss="modal" aria-hidden="true" aria-label="Close Video modal window">Close</button> </div> </div> </div> </div> <!--Video Model Window end--> <!--Comment Model Window start--> <div id="commentModal" class="modal fade modal-window" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog modal-dialog-scrollable"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true" aria-label="Close note" tabindex="1">×</button> <h1 class="modal-title title" tabindex="1">Notes</h1> <hr style="margin-bottom: -3px;"> </div> <div class="modal-body"> </div> <div class="modal-footer" style="border-top: 0px !important"> <button type="button" class="btn commentApplyButton notes-apply-btn" onClick="CommentApply(this)" aria-label="Add note">Add Note</button> <button type="button" class="btn" data-dismiss="modal" aria-hidden="true" aria-label="Close note window">Close</button> </div> </div> </div> </div> <!--Comment Model Window end--> <!--Contact Release Plan Association Model Window start--> <section id="createAssociationModal" role="dialog" class="modal fade modal-window" aria-hidden="true" aria-label="<span class='fa fa-info-circle' aria-hidden='true'></span> My Modal Title" data-backdrop="static" tabindex="-1" style="display: none;"> <div class="modal-dialog modal-sm" role="document" style="width:680px;"> <div class="modal-content"> <div class="modal-header"> <button aria-label="Close" class="close" data-dismiss="modal" tabindex="0" title="Close" type="button"> <span aria-hidden="true">×</span><span class="sr-only">Close</span> </button> <h1 class="modal-title title" title="My Modal Title">Add to My Plan</h1> <hr style="margin-bottom: -3px;"> </div> <div class="modal-body" style="padding: 0; overflow: hidden; height:115px;"> <div class="form-loading" style="display: none;"> <span class="fa fa-spinner fa-spin fa-4x" aria-hidden="true"></span> </div> <iframe id="createAssociationModal" src="" style="height: 100%; width: 100%; border: none;"></iframe> </div> <div class="modal-footer"> <button type="button" class="btn commentApplyButton notes-apply-btn" aria-label="Add plan" onclick="triggerOriginalButtonClick()">Add</button> <button type="button" class="btn" data-dismiss="modal" aria-hidden="true" aria-label="Close note window">Close</button> </div> </div> </div> </section> <!--Contact Release Plan Association Window end--> <script type="text/javascript"> var lang=[]; var shortlang=[]; lang.push("fr-fr"); shortlang.push("fr"); lang.push("en-us"); shortlang.push("en"); lang.push("ja-jp"); shortlang.push("ja"); lang.push("sv-se"); shortlang.push("sv"); lang.push("pt-br"); shortlang.push("pt"); lang.push("nb-no"); shortlang.push("nb"); lang.push("nl-nl"); shortlang.push("nl"); lang.push("it-it"); shortlang.push("it"); lang.push("fi-fi"); shortlang.push("fi"); lang.push("es-es"); shortlang.push("es"); lang.push("de-de"); shortlang.push("de"); lang.push("da-dk"); shortlang.push("da"); var PlannedCount = 0; var ComingSoonCount = 0; var TryNowCount = 0; var AllCount = 0; var urlUserID=''; var videosrcURL=''; var latestWaveName=''; var arrayOfClosedBanner=[]; var youtubeParameters = '?modestbranding=1&fs=0'; var quill = ""; var quills=""; let tempurl = new URL(window.location); $(".important-note-title").prepend(getExclamationSvg()); $(".AIBanner-note-title").prepend(getExclamationSvg()); function hideControl(myCarousel,itemFirst,itemLast,controlLeft,controlRight) { if ( itemFirst.hasClass('active') ) { controlLeft.css('display', 'none'); } if ( itemLast.hasClass('active') ) { controlRight.css('display', 'none'); myCarousel.carousel('pause'); // stop from cycling through items } } function showControl(myCarousel,itemFirst,itemLast,controlLeft,controlRight) { if ( itemFirst.hasClass('active') ) { controlLeft.css('display', 'block'); } if ( itemLast.hasClass('active') ) { controlRight.css('display', 'block'); } } if(urlUserID === '' && tempurl.search.contains('amp')) { let decodedURL = decodeURIComponent(tempurl.href).replace(/&/g, "&"); var urlc = new URL(decodedURL) urlUserID = urlc.searchParams.get('userID'); } function setSearchedSnapshot() { var PArray = ''; var x = PArray.split('|'); for(var item=0; item<x.length-1;item++) { var val = x[item].toString().split(','); //console.log('Product ID '+item+' is: '+val[0]+' & snapshot ID- '+item+' is: '+val[1]); AppState.searchedSnapshots.push( { "SnapshotId": val[1], "ProductId": val[0] } ); } } function resetSearchedProductList() { let results = AppState.searchedSnapshots.map(r => r.ProductId); results = [... new Set(results)]; AppState.searchedProductList = []; results.forEach(element => { let productItem = AppState.productList.find(item=> item.id === element); if(productItem){ AppState.searchedProductList.push(productItem); } }); } function urlSearchParameter() { const url = new URL(window.location); if(url.searchParams.get('q') !== null && url.searchParams.get('q') !== '') return true; else return false; } function loadMobileHTML() { $('#popover-content-login').children().remove(); $('#popover-content-login').append(` <div style="justify-content: space-between;display: flex;"> <div id='titleBlocl' style='font-weight: 600;font-size: 14px;'>Sort by:</div> <div style="margin-left: 15%;" class="clearFilter" aria-label='clear sort' role='button' onclick='clearSortBy()' tabindex="0"></div> </div> <hr style='background-color:#C4C4C4;margin-top: 3px;'> <div id='AvailDateBox' aria-label="Availibility dates sort group." role="group"> <p>Availability dates</p> <div> <input name='EarlySort' type='checkbox' value='Early' class='check' aria-label='Early Sort' onchange="avalaibilityCheckboxSingle(this)"> <label for='Early'> Early Access </label> <br> <input name='PublicSort' type='checkbox' value='Public' class='check' aria-label='Public Sort' onchange="avalaibilityCheckboxSingle(this)"> <label for='Public'>Public Preview </label> <br> <input name='GASort' type='checkbox' value='GA' class='check' aria-label='GA Sort' onchange="avalaibilityCheckboxSingle(this)"> <label for='GA'>General Availability </label> </div> <hr style="margin-right: 50%;background-color: #C4C4C4;"> </div> <div id='sortByBox' aria-label="Sort by dates group." role="group"> <div> <input type='checkbox' name='NewOld' value='NewOld' class='check1' aria-label='New to Old sort' onchange='orderCheckboxSingle(this)'> <label for='NewOld'> Newest to Oldest </label> <br> <input type='checkbox' name='OldNew' value='OldNew' class='check1' aria-label='Old to New sort' onchange='orderCheckboxSingle(this)'> <label for='OldNew'>Oldest to Newest </label></div> </div> <br> <div style="justify-content: space-between;display: flex;"> <div id='titleBlocl' style='font-weight: 600;font-size: 14px;'>Filter by:</div> <div style="margin-left: 15%;" class="clearFilter" aria-label='clear filter' role='button' onclick='clearFilterBy()' tabindex="0"></div> </div> <hr style='background-color: #C4C4C4;margin-top: 3px;'> <div id='StatusBox' style="margin-bottom: 15px;" aria-label="Status filter group." role="group"> <p>Status </p> <div> <input name='New7' type='checkbox' value='New7' aria-label='New7'> <label for='New7'> New (Last 7 days)</label> <br> <input name='New30' type='checkbox' value='New30' aria-label='New30'> <label for='New30'> New (Last 30 days)</label> <br> <input name='Changed7' type='checkbox' value='Changed7' aria-label='Changed7'> <label for='Changed7'> Changed (Last 7 days)</label> <br> <input name='Changed30' type='checkbox' value='Changed30' aria-label='Changed30'> <label for='Changed30'> Changed (Last 30 days)</label> </div> <hr style="margin-right: 50%;background-color: #C4C4C4;"> </div> <div id='ForBox' style="margin-bottom: 15px;" aria-label="Enabled for filter group." role="group"> <p>Enabled For</p> <div> <input name='Admins' type='checkbox' value='Admins' aria-label='Admins'> <label for='Admins'> Admins or makers, automatically</label> <br> <input name='Makers' type='checkbox' value='Makers' aria-label='Makers'> <label for='Makers'>Users, by admins or makers</label> <br> <input name='Users' type='checkbox' value='Users' aria-label='Users'> <label for='Users'>Users, automatically</label> </div> <hr style="margin-right: 50%;background-color: #C4C4C4;"> </div> <div id='bodyBlock3' name='bodyBlock3' aria-label="Availability filter group." role="group"> <p>Availability</p> <div> <input name='Early' type='checkbox' value='EarlyAccess' aria-label='Early Access'> <label for='Early'> Early Access </label> <br> <input name='Public' type='checkbox' value='PublicPreview' aria-label='Public Preview'> <label for='Public'>Public Preview </label> <br> <input name='GA' type='checkbox' value='GeneralAvailability' aria-label='General Availability'> <label for='GA'>General Availability </label> </div> <hr style="margin-right: 50%;background-color: #C4C4C4;"> </div> <div id="bodyBlock4" name="bodyBlock4" aria-label="Release wave filter group." role="group"> <p>Release wave</p> <div> <input type="checkbox" name="firstWave" value="firstWave"> <label for="firstWave" id="firstWave"> firstWave</label><br> <input type="checkbox" name="secondWave" value="SecondWave"> <label for="SecondWave" id="secondWave">SecondWave</label><br> <input type="checkbox" name="thirdWave" value="ThirdWave"> <label for="ThirdWave" id="thirdWave">ThirdWave</label> </div> </div> <br> <div style="justify-content: space-between;display: flex;"> <input type='button' class='applyButton' aria-label='Apply button' value="Apply" onclick='filterBoxStateObjectUpdate()' style="width:148px" > <input type='button' class='closeButton' aria-label='Close button' value="Close" onclick='closePopover()' style="width:148px"> </div>`); } function AvailabilityCheck(featureObj) { let MileStonename = featureObj.Milestone.name; var filterAvailability = filterBoxState.FilterBy[0].Availability; var availaibilityCheck = false; $.each(filterAvailability,function(key,value){ if(value) availaibilityCheck = true; }); if(availaibilityCheck) { var EAStatus = false; var GAStatus = false; var PPStatus = false; var filtercheck_EA = filterBoxState.FilterBy[0].Availability.Early; var filtercheck_GA = filterBoxState.FilterBy[0].Availability.GA; var filtercheck_PP = filterBoxState.FilterBy[0].Availability.Public; if(filtercheck_EA && MileStonename.contains('Early Access')) EAStatus = true; else EAStatus = false; if(filtercheck_GA && MileStonename.contains('GA')) GAStatus = true; else GAStatus = false; if(filtercheck_PP && MileStonename.contains('Public Preview')) PPStatus = true; else PPStatus = false; if(EAStatus && GAStatus && PPStatus) return true; else if(EAStatus && GAStatus) return true; else if(EAStatus && PPStatus) return true; else if(GAStatus && PPStatus) return true; else if(EAStatus) return true; else if(GAStatus) return true; else if(PPStatus) return true; else return false; } else return true; } function EnabledForCheck(featureObj){ var fitlerEnabledFor = filterBoxState.FilterBy[0].For; var enabledForMatched = false; $.each(fitlerEnabledFor,function(key,value){ if(value) enabledForMatched = true; }); if(enabledForMatched) { //function to find category/Available To value let keyCheck = ''; let enabledFor = featureObj.FeatureCategory; if(enabledFor.contains('B. Enabled for admins/makers/marketers automatically')) keyCheck='Admins'; //B. Enabled for admins/makers/marketers automatically if(enabledFor.contains('A. Enabled for end users automatically')) keyCheck='Users'; //A. Enabled for end users automatically if(enabledFor.contains('C. Enabled by admins/makers/marketers for end users')) keyCheck='Makers'; //C. Enabled by admins/makers/marketers for end users var userChecked = false; //Users, automatically - this is for features (CAT A) var adminChecked = false; //Admins or makers, automatically - this is for features (CAT B) var makersChecked = false; //Users, by admins or makers - this is for features (CAT C) $.each(fitlerEnabledFor,function(key,value){ if(key === keyCheck && value) { if(key === 'Admins') adminChecked = true; if(key === 'Users') userChecked = true; if(key === 'Makers') makersChecked = true; } }); if(adminChecked && userChecked && makersChecked) return true; else if(adminChecked && userChecked) return true; else if(adminChecked && makersChecked) return true; else if(makersChecked && userChecked) return true; else if(adminChecked) return true; else if(userChecked) return true; else if(makersChecked) return true; else return false; } else return true; } function StatusInteractiveFilter(featureObj){ var last30 = filterBoxState.FilterBy[0].Status.Changed30; //changed30 var last7 = filterBoxState.FilterBy[0].Status.Changed7; //changed7 var lastModifiedDayDifference = 0; var new30 = filterBoxState.FilterBy[0].Status.New30; //New30 var new7= filterBoxState.FilterBy[0].Status.New7; //New7 var lastCreatedDayDifference = 0; var matchedLastModified = true; if(featureObj.GitCommitDate === featureObj.FirstGitHubPushDate ) matchedLastModified = false; var matchedNewCreated = true; if(last30){ lastModifiedDayDifference = 30; } else if(last7){ lastModifiedDayDifference = 7; } if(new30){ lastCreatedDayDifference = 30; } else if(new7){ lastCreatedDayDifference = 7; } let currentDate = moment(); if(lastModifiedDayDifference > 0 && getDateDifference(currentDate, featureObj.GitCommitDate) > lastModifiedDayDifference){ matchedLastModified = false; } if(lastCreatedDayDifference > 0 && getDateDifference(currentDate, featureObj.FirstGitHubPushDate) > lastCreatedDayDifference){ matchedNewCreated = false; } if(lastCreatedDayDifference > 0 && lastModifiedDayDifference > 0){ return matchedLastModified || matchedNewCreated; } else if(lastCreatedDayDifference > 0){ return matchedNewCreated; } else if(lastModifiedDayDifference > 0){ return matchedLastModified; } else return true; } function closeShareMyPlan() { $(".triggerMessage").text(""); $(".closeSharePopover").popover('hide'); jQuery('.shareGroup').on('hidden.bs.popover', function (e) { e.preventDefault(); $(e.target).data("bs.popover").inState.click = false; }); } function updateisShare(value) { const url = new URL(window.location); url.searchParams.delete('rp'); let urlContainsPlanID = url.searchParams.has("planID"); if(urlContainsPlanID) url.searchParams.delete("planID"); url.searchParams.delete("wave"); url.searchParams.delete("availability"); url.searchParams.delete("q"); let browserLocale = url.pathname.split('/')[1]; let link = url.origin+'/sharedplans/'+url.search+'&userID='+UserId; var popID = $(".popupShareLink").closest('.popover').attr('id'); if(value){ $(".triggerMessageCop").css("display",""); $(".triggerMessageDel").css("display","none"); $(".triggerMessageCop").css("color","green"); $(".popupDelectAccessToLink").removeClass('notactive'); copyToClipboard(link); $("#"+popID).find('.triggerMessageCop').focus(); } else if(!value){ $(".triggerMessageCop").css("display","none"); $(".triggerMessageDel").css("display",""); $(".triggerMessageDel").css("color","red"); $(".popupDelectAccessToLink").addClass('notactive'); $("#"+popID).find('.triggerMessageDel').focus(); } webapi.safeAjax({ type: "PATCH", url: "/_api/contacts("+UserId+")", contentType: "application/json", data: JSON.stringify({ "mssh_isshared": value, "mssh_sharedlink" : link }), success: function () { } }); } function getIsShareValue() { let isshared = false; if(isshared === 'true') $(".popupDelectAccessToLink").removeClass('notactive'); else if(isshared === 'false') $(".popupDelectAccessToLink").addClass('notactive'); } function copyToClipboard(text) { var $temporary = $("<input>"); $("body").append($temporary); $temporary.val(text).select(); document.execCommand("copy"); $temporary.remove(); } function countSnapshots(results, filterValue) { let filteredSnapshots = []; let isMyReleasePlan = false; if (urlUserID !== "" && urlUserID !== null) isMyReleasePlan = isSharedReleasePlan(); else isMyReleasePlan = isMyReleasePlanSelected(); if (isMyReleasePlan) { results.forEach(snapshot => { let snapshotRecord = AppState.userSnapshots.find(item => item.SnapshotId === snapshot.SnapshotId); if (snapshotRecord) { filteredSnapshots = filterCheck(snapshot, filteredSnapshots, filterValue); } }); if (filteredSnapshots.length !== 0) { if (urlSearchParameter()) { $('.searchMessageBar').removeClass('hidden'); let filteredSearchedSnapshots = filteredSnapshots; filteredSnapshots = []; filteredSearchedSnapshots.forEach(snapshot => { let snapshotRecord = AppState.searchedSnapshots.find(item => item.SnapshotId === snapshot.SnapshotId); if (snapshotRecord) { filteredSnapshots = filterCheck(snapshot, filteredSnapshots, filterValue); } }); } } } else { if (urlSearchParameter()) { results.forEach(snapshot => { let snapshotRecord = AppState.searchedSnapshots.find(item => item.SnapshotId === snapshot.SnapshotId); if (snapshotRecord) { if (filterValue === 3) { if (snapshot.PPStatus === "Shipped" || snapshot.GAStatus === "Shipped") { snapshot.Milestone = filterValue === 3 ? getLastMilestoneDateValue(snapshot) : getNextMilestoneDateValue(snapshot, filterValue); filteredSnapshots = filterCheck(snapshot, filteredSnapshots, filterValue); } } else { snapshot.Milestone = filterValue === 3 ? getLastMilestoneDateValue(snapshot) : getNextMilestoneDateValue(snapshot, filterValue); filteredSnapshots = filterCheck(snapshot, filteredSnapshots, filterValue); } } }); } else { results.forEach(item => { if (filterValue === 3) { if (item.PPStatus === "Shipped" || item.GAStatus === "Shipped") { item.Milestone = filterValue === 3 ? getLastMilestoneDateValue(item) : getNextMilestoneDateValue(item, filterValue); filteredSnapshots = filterCheck(item, filteredSnapshots, filterValue); } } else { item.Milestone = filterValue === 3 ? getLastMilestoneDateValue(item) : getNextMilestoneDateValue(item, filterValue); filteredSnapshots = filterCheck(item, filteredSnapshots, filterValue); } }); } } return filteredSnapshots.length; } function setNoResultMessage($element){ $element.html(''); $element.append($(`<div class="no-result"></div>`)); $element.find('.no-result').append(getNoResultSvg()); $element.find('.no-result').append($('<div class="no-result-header"><p>No Results</p></div>')); const selectedTab = $('#filterDropdown select').val(); if (AppState.selectedProduct && urlUserID ===""){ if(urlSearchParameter()) { $('.searchMessageBar').removeClass('hidden'); $('.list-group--features').addClass('hidden-item'); $('.product-family').addClass('hidden-item'); $('.f-details').removeClass('col-lg-9').addClass('col-lg-12'); $('.f-details').css('margin-top','0px'); $('.f-details').css('top', '0'); $('.show-on-mobile').addClass('hidden-item'); $('.separator').addClass('hidden-item'); const noProductsMessage = UI_Strings.noprodmessage; $element.find('.no-result').append(`<div class="no-product-message"><p>${noProductsMessage}</p><div>`); let noSearchedResult = `<div class="no-product-message"> <b>Close</b> to view release plans or try again using a different search criteria.<div>`; $element.find('.no-product-message').append(noSearchedResult); } else { $('.searchMessageBar').addClass('hidden'); let selectedProductObj = AppState.productList.find(x => x.id == AppState.selectedProduct); let selectedProductName = selectedProductObj.shortname || selectedProductObj.name; let tip=`<div class="no-record-message tip"><p><span class="semibold">Tip</span>: Click on <span class="semibold">SelectedOptionPlaceHolder</span> to view all new features recently released to market or select a different application.</p></div>`; let noRecordMessageHtml = `<div class="no-record-message"><p>We didn't find any results for: <span class="semibold">${$('#filterDropdown option:selected').text()}</span> in <span class="semibold">${selectedProductName}</span>.<p></div>`; if(selectedTab === '1' || selectedTab === '2'){ tip = tip.replace('SelectedOptionPlaceHolder', $('#filterDropdown option[value="3"]').text()); } else if(selectedTab === '3'){ if(isMyReleasePlanSelected()){ tip = '<div class="no-record-message tip"><p><span class="semibold">Tip</span>: Click on <span class="semibold">All release plans</span> to add features to your release plan or select a different application.</p></div>'; } else{ tip = '<div class="no-record-message tip"><p><span class="semibold">Tip</span>: Click on <span class="semibold">SelectedOptionPlaceHolder</span> to view all upcoming features or select a different application.</p></div>'; tip = tip.replace('SelectedOptionPlaceHolder', $('#filterDropdown option[value="1"]').text()); } } $element.find('.no-result').append(noRecordMessageHtml); $element.find('.no-result').append(tip); } } else{ var urls = new URL(window.location); let noProductsMessage = UI_Strings.noprodmessage; $('.list-group--features').addClass('hidden-item'); $('.product-family').addClass('hidden-item'); $('.f-details').removeClass('col-lg-9').addClass('col-lg-12'); $('.show-on-mobile').addClass('hidden-item'); $('.separator').addClass('hidden-item'); let closeMessage = ""; if(urlUserID !== "") //we are in shared page else this would be empty { $('.f-details').css('margin-top','0px'); $('.f-details').css('top', '0'); if(AppState.productResults.length<=0 || !isSharedReleasePlan()){ $(".overviewBanner").css('display','none'); $(".overviewBannerText").css('display','none');} noProductsMessage = UI_Strings.sharedNoProdMessage; closeMessage = UI_Strings.sharedNoProdCloseMessage; if(urlSearchParameter()){ let noSearchedResult = `<div class="no-product-message">Click <b>Close</b> to view release plans or try again using a different search criteria.<div>`; $element.find('.no-result').append(`<div class="no-product-message">${noProductsMessage}</div>`); $element.find('.no-product-message').append(noSearchedResult); } else{ let sharedNoRecordMessage = `<div class="no-record-message"><p>${noProductsMessage}<b>Close</b>${closeMessage}<p></div>`; $element.find('.no-result').append(sharedNoRecordMessage); let isSnapshotExist = AppState.userSnapshots.filter(x=>x.ProductId == AppState.selectedProduct).length; if(isSnapshotExist <= 0){ $(".overviewBanner").addClass('hidden'); $(".overviewBannerText").addClass('hidden'); } } } else if(isMyReleasePlanSelected()){ $('.f-details').css('margin-top','0px'); $('.f-details').css('top', '0'); let myPlanNoRecordMessage = `<div class="no-record-message"><p>${noProductsMessage}<p></div>`; if(urlUserID !== ""){ myPlanNoRecordMessage = `<div class="no-record-message"><p>${noProductsMessage}<b>Close</b>${closeMessage}<p></div>`; } if(urls.searchParams.get('rp') === 'my-plans' && (AppState.selectedProduct=== '' || AppState.selectedProduct === null)&& AppState.userProductList.length>0){ $('.list-group--features').removeClass('hidden-item'); $('.product-family').removeClass('hidden-item'); $('.f-details').addClass('col-lg-9').removeClass('col-lg-12'); $('.show-on-mobile').removeClass('hidden-item'); $('.separator').removeClass('hidden-item'); } if(AppState.userProductList.length<=0){$(".overviewBanner").css('display','none'); $(".overviewBannerText").css('display','none'); } let myPlanNoRecordTip = `<div class="no-record-message tip"><p><span class="semibold">Tip</span>: Add features to your personalized release plan by clicking the "<span class="semibold">+ To my plan</span>" button for any feature that you would like to track. Click "<span class="semibold">Planned</span>" in <span class="semibold">All release plans</span> to start adding features to your plan.</p></div>`; $element.find('.no-result').append(myPlanNoRecordMessage); if(!UserId){ let myPlanNoRecordNote = `<div class="no-record-message tip"><p><span class="semibold">Note</span>: You must <u class="semibold">${getRegisterHtml()}</u> and <u class="semibold">${getSignInHtml()}</u> to the portal to create your personalized release plan. Click "<span class="semibold">Sign in</span>" to get started.</p>`; $element.find('.no-result').append(myPlanNoRecordNote); } else{ if(urlSearchParameter()){ $('.searchMessageBar').removeClass('hidden'); let noSearchedResult = `<div class="no-product-message">Click <b>Close</b> to view release plans or try again using a different search criteria..<div>`; $element.find('.no-record-message').append(noSearchedResult); } else{ $('.searchMessageBar').addClass('hidden'); $element.find('.no-result').append(myPlanNoRecordTip); } } } else{ let val = ''; if(urlUserID !== ""){ val=`<div class="no-product-message"><p>${noProductsMessage}<b>Close</b>${closeMessage}</p><div>`; } else val=`<div class="no-product-message"><p>${noProductsMessage}</p><div>`; $element.find('.no-result').append(val); if(urlSearchParameter()){ $('.searchMessageBar').removeClass('hidden'); let noSearchedResult = `<div class="no-product-message">Click <b>Close</b> to view release plans or try again using a different search criteria..<div>`; $element.find('.no-product-message').append(noSearchedResult); } else $('.searchMessageBar').addClass('hidden'); } } } function filterBoxStateObjectUpdate() { const currentState = history.state || {}; const url = new URL(window.location); url.searchParams.delete('planID'); let checkedObj = []; let uncheckedObj = []; $(".popover-content input[type='checkbox']:checked").each(function() { checkedObj.push($(this).attr("name")); }); $(".popover-content input[type='checkbox']:not(:checked)").each(function() { uncheckedObj.push($(this).attr("name")); }); if($(".popover-content input:checkbox:checked").length>0){ history.replaceState(currentState, '', url); } for(var i=0;i<checkedObj.length ;i++) updateJson(checkedObj[i],true); for(var i=0;i<uncheckedObj.length ;i++) updateJson(uncheckedObj[i],false); let isWaveObjectEmpty = $.isEmptyObject(filterBoxState.FilterBy[0].Wave); closePopover(); let isTrue=false; let isWaveFilterFilled=false; let isAvailFilterFilled=false; if(!isWaveObjectEmpty){ $.each(filterBoxState.FilterBy[0].Wave,function(key,value){ if(value) isTrue=true; }); if(isTrue) isWaveFilterFilled=true; else isWaveFilterFilled=false; } else isWaveFilterFilled=false; let isAvailcheck=false; $.each(filterBoxState.FilterBy[0].Availability,function(key,value){ if(value) isAvailcheck=true; }); if(isAvailcheck) isAvailFilterFilled=true; else isAvailFilterFilled=false; if(isWaveFilterFilled && isAvailFilterFilled){ $('.filter-filled').removeClass('hidden-item'); $('.filter-empty').addClass('hidden-item'); } else if(isWaveFilterFilled){ $('.filter-filled').removeClass('hidden-item'); $('.filter-empty').addClass('hidden-item') } else if(isAvailFilterFilled){ $('.filter-filled').removeClass('hidden-item'); $('.filter-empty').addClass('hidden-item') } else{ if(checkedObj.length > 0) { $('.filter-filled').removeClass('hidden-item'); $('.filter-empty').addClass('hidden-item'); } else { $('.filter-filled').addClass('hidden-item'); $('.filter-empty').removeClass('hidden-item'); } } let filterWave = filterBoxState.FilterBy[0].Wave; AppState.urlParams.wave.selectedValue=[]; $.each(filterWave,function(key,value){ if(value) AppState.urlParams.wave.selectedValue.push(key); }); updateWaveState(); let filterAvailability = filterBoxState.FilterBy[0].Availability; AppState.urlParams.availability.selectedValue=[]; $.each(filterAvailability,function(key,value){ if(value) AppState.urlParams.availability.selectedValue.push(key); }); updateAvailabilityState(); groupPlans(); } function showUpdatedCue(plan){ if(plan.GitCommitDate != plan.FirstGitHubPushDate){ var gitCommitDate = plan.GitCommitDate; let currentDate = moment(); let lastGitCommitDate = moment(gitCommitDate); let boolVal = currentDate.diff(lastGitCommitDate, 'days') <= 30; if(boolVal){ } return boolVal; } return false; } function showNewCue(plan){ if(plan.GitCommitDate === plan.FirstGitHubPushDate){ let currentDate = moment(); var gitPushDate = plan.FirstGitHubPushDate; let FirstGitHubPushDate = moment(gitPushDate); let boolVal = currentDate.diff(FirstGitHubPushDate, 'days') <= 30; if(boolVal){ } return boolVal; } return false; } function showUpdatedCueBox(plan){ if(plan.GitCommitDate != plan.FirstGitHubPushDate){ var gitCommitDate = plan.GitCommitDate; let currentDate = moment(); let lastGitCommitDate = moment(gitCommitDate); let boolVal = currentDate.diff(lastGitCommitDate, 'days') <= 30; return boolVal; } return false; } function showNewCueBox(plan){ if(plan.GitCommitDate === plan.FirstGitHubPushDate){ let currentDate = moment(); var gitPushDate = plan.FirstGitHubPushDate; let FirstGitHubPushDate = moment(gitPushDate); let boolVal = currentDate.diff(FirstGitHubPushDate, 'days') <= 30; return boolVal; } return false; } function showPlaceholderBox(plan){ if(!showUpdatedCueBox(plan) && !showNewCueBox(plan)) { return false; } else{ $(".id"+plan.SnapshotId).attr('style', 'width: 0px !important'); return true; } } function getImagesFromAttachment(snapshotId, $element){ const promise = new Promise((resolve, reject)=>{ webapi.safeAjax({ type: "GET", url: "/_api/mssh_releaseplansnapshots("+snapshotId+")?$select=mssh_releaseplansnapshotid&$expand=mssh_releaseplansnapshot_releaseplanattachment($select=mssh_description,mssh_mimetype,mssh_name,mssh_releaseplanimage)", contentType: "application/json", success: async function (data, textStatus, xhr) { var myResults={"results":[]}; var result = data; var mssh_releaseplansnapshotid = result["mssh_releaseplansnapshotid"]; // Guid let tempObj=null; for (var j = 0; j < result.mssh_releaseplansnapshot_releaseplanattachment.length; j++) { tempObj= new Object(); tempObj.FileName = result.mssh_releaseplansnapshot_releaseplanattachment[j].mssh_name; tempObj.MimeType = result.mssh_releaseplansnapshot_releaseplanattachment[j].mssh_mimetype; tempObj.Description = result.mssh_releaseplansnapshot_releaseplanattachment[j].mssh_description; tempObj.Title = result.mssh_releaseplansnapshot_releaseplanattachment[j].mssh_description; let newTempObj = await getBase64OfAttachedImage(result.mssh_releaseplansnapshot_releaseplanattachment[j].mssh_releaseplansnapshotattachmentid); tempObj.Image = newTempObj.value; myResults.results.push(tempObj); } $(`.carousel-container-${snapshotId}`).removeClass('imageLoader'); return resolve(myResults); }, error: function (xhr, textStatus, errorThrown) { console.log(errorThrown); $(`.carousel-container-${snapshotId}`).removeClass('imageLoader'); reject(xhr); } }); }) return promise; } async function getBase64OfAttachedImage(snapshotattachmentID) { return webapi.safeAjax({ type: "GET", url: "/_api/mssh_releaseplansnapshotattachments("+snapshotattachmentID+")/mssh_releaseplanimage?size=full", contentType: "application/json", success : function(data,textStatus,xhr){ } }); } function verifyInteractiveFilters(featureObj) { return StatusInteractiveFilter(featureObj) && EnabledForCheck(featureObj) && AvailabilityCheck(featureObj) && ReleaseWaveFilter(featureObj); } function setQueryOnSearch(thisEvent) { const url = new URL(window.location); const params = new URLSearchParams(url.search); params.delete('q'); localStorage.setItem('key', params.toString()); } function hideSearchWhenNotInUse(flag) { if(flag === 'false' || flag === 'False'){ $(".searchbartop").css('display','none'); $(".mobileSearchBar").css('display','none'); $(".hide-when-not-use").css('display','none'); } else if(flag === 'true' || flag === 'True'){ $(".searchbartop").css('display',''); $(".mobileSearchBar").css('display',''); $(".hide-when-not-use").css('display',''); } } function getChangeHistoryContent(productID) { showLoader(); let changeHistoryData; AppState.changeHistory = []; let url = `${document.location.origin}/snapshot-history-json/?productID=${productID}&langCode=${langCode}`; $.ajax({ url: url, dataType: 'json', async: false, success: function(data) { for(var i=0;i<data.results.length;i++){ changeHistoryData = { changeDescription : data.results[i].changeDescription, dateModified : data.results[i].dateModified, snapshotID : data.results[i].snapshotID } AppState.changeHistory.push(changeHistoryData); } hideLoader(); } }); } function ChangeHistoryContent(snapshotID) { var changeHistoryArray = AppState.changeHistory; for(var i=0;i<changeHistoryArray.length;i++) { if(changeHistoryArray[i].snapshotID === snapshotID) { let changedescription = changeHistoryArray[i].changeDescription.split('.'); let finalChangeDescription = ''; for(var j=0;j<changedescription.length;j++) { if(changedescription[j] !== '') finalChangeDescription += changedescription[j]+'<br>'; } let dateModified = changeHistoryArray[i].dateModified; if(changedescription.length > 0){ let row = $(`<tr><td><hr style='margin-top: 10px;margin-bottom: 10px;'></td><td><hr style='margin-top: 10px;margin-bottom: 10px;'></td></tr> <tr> <td>${finalChangeDescription}</td> <td style="text-align: right;">${dateModified}</td> </tr> `); $('#plan-'+changeHistoryArray[i].snapshotID).children().children('.f-changeHistory').children().children('tbody').append(row); $('#plan-'+changeHistoryArray[i].snapshotID).children().children('.f-changeHistory').removeClass('hidden-item'); changedescription=''; dateModified=''; } } } } function dropdownValueOnLoad(val) { $(".filter--dropdown").css('padding','0px 0px 20px 16px'); $(".filter--dropdown").css('height','65px'); $('#filterDropdown').children('p').remove(); if(val === "1"){ $('#filterDropdown').children('p').remove(); $('#filterDropdown').append("<p style='margin: -35px 0px -40px 18px; font-size: 13px;font-weight: 600;'>"+PlannedCount+" upcoming features included in release plans</p>"); } if(val === "2"){ $('#filterDropdown').children('p').remove(); $('#filterDropdown').append("<p style='margin: -35px 0px -40px 18px; font-size: 13px;font-weight: 600;'>"+ComingSoonCount+" upcoming features available this month</p>"); } if(val === "3"){ $('#filterDropdown').children('p').remove(); $('#filterDropdown').append("<p style='margin: -35px 0px -40px 18px; font-size: 13px;font-weight: 600;'>"+TryNowCount+" new features recently released to market</p>"); } if(val === "4"){ $('#filterDropdown').children('p').remove(); $('#filterDropdown').append("<p style='margin: -35px 0px -40px 18px; font-size: 13px;font-weight: 600;'>"+AllCount+" features included in release plans</p>"); } } function openProductOverview(ReleaseWaveName,waveID,redirectDocURI,productID,event,ids,plan,HeirarchyPath,snapID) { event.preventDefault(); showLoader(); let productid; if(plan.contains('sharedplans')){ productid=AppState.selectedProduct; } else{ if(!isMyReleasePlanSelected()) productid=AppState.selectedProduct; else{ if(productID ==='undefined') productid=AppState.selectedProduct; else productid = productID; } } let purl = `${document.location.origin}/product-overview-json/?productOverviewID=${productid}&releaseWaveID=${waveID}&langCode=${langCode}`; $.ajax({ url: purl, async: false, success: function(data) { let parsedJSON = JSON.parse(data.replaceAll('\r','').replaceAll('\n','')); if(!parsedJSON.results.length > 0){ $(ids).attr('href',redirectDocURI); $(ids).attr('target','_blank'); window.open(redirectDocURI); hideLoader(); return; } for(var i=0;i<parsedJSON.results.length;i++) { let title = parsedJSON.results[i].ProductName+" | "+ ReleaseWaveName; let importantNote = parsedJSON.results[i].important; let productInURL = ''; if(parsedJSON.results[i].ProductName.trim().contains('Dynamics 365')) productInURL= 'dynamics365'; else productInURL = 'power-platform'; if(importantNote.length > 0) importantNote = importantNote.replaceAll('[!IMPORTANT]',''); let dwlPD = `<blockquote style="margin-top: -35px;display:none;" class="prodOverview-${snapID}"><a style="font-size: 14px;" class="dwlPDFPopover" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true" data-trigger="hover" onClick="downloadWaveSummary('${waveID}','${HeirarchyPath}','${snapID}')" tabindex="0">Download the ${ReleaseWaveName} PDF</a></blockquote>`; importantNote = importantNote+dwlPD; $('#productOverviewModal').find('#productOverviewDetailLabel').text(title); $('#productOverviewModal').find('.important-notes-details').empty().append(importantNote); if(parsedJSON.results[i].important.length > 0) { $('.important-notes-value').removeClass('hidden'); $('.overview-head').css('margin-top','32px'); } else{ $('.important-notes-value').addClass('hidden'); $('.overview-head').css('margin-top','0px'); } if(parsedJSON.results[i].SummaryVideoURL.length > 0) { let summaryVideoURL = parsedJSON.results[i].SummaryVideoURL; let urla = new URL(summaryVideoURL); let isYoutubeLink = false; isYoutubeLink = summaryVideoURL.replace(urla.pathname,'').toLowerCase().contains('youtube'); if(isYoutubeLink) summaryVideoURL = summaryVideoURL+youtubeParameters; $("#productOverviewmodelVideo").attr('src',summaryVideoURL); $("#productOverviewmodelVideo").removeClass('hidden'); } else{ $("#productOverviewmodelVideo").addClass('hidden'); } $('#productOverviewModal').find('.overview-details').empty().append(parsedJSON.results[i].overview); let banner = `<b style="font-weight:600">Note:</b> The author created this article with assistance from AI. <a href="https://learn.microsoft.com/en-us/principles-for-ai-generated-content" target="_blank" style="color:#00748b; text-decoration: underline;" tabindex="1">Learn more</a>`; $('#productOverviewModal').find('.AIBanner-note').empty().append(banner); if(parsedJSON.results[i].overviewAicontribution === "true" && parsedJSON.results[i].SummaryVideoURL.length > 0) { $('.AIBanner-notes-value').removeClass('hidden'); $('.AIBanner-notes-value').css('margin-bottom','32px'); $('.overview-head').css('margin-bottom','0px'); } else if (parsedJSON.results[i].overviewAicontribution === "true") { $('.AIBanner-notes-value').removeClass('hidden'); $('.AIBanner-notes-value').css('margin-bottom','0px'); } else{ $('.AIBanner-notes-value').addClass('hidden'); $('.overview-head').css('margin-bottom','0px'); } var investmentArea = parsedJSON.results[i].investmentArea; // Match all occurrences and ensure matches is not null var matches = investmentArea.match(/<strong>[^<]+<\/strong><br/g) || []; matches = matches.map(match => match.replace(/<\/?strong>/g, '')); //matches.forEach(match => console.log(match)); for (let index = 0; index < parsedJSON.results[i].plaL2.length; index++) { const element = parsedJSON.results[i].plaL2[index]; let l2snapaicontribution = element.l2snapaicontribution; var planl2name = element.planl2name; let AIBanner = `<div class="l2AIBanner-note col-lg-12" style="background: #EBF1F9;"><b style="font-weight:600">Note:</b> The author created this article with assistance from AI. <a href="https://learn.microsoft.com/en-us/principles-for-ai-generated-content" target="_blank" style="color:#00748b; text-decoration: underline;" tabindex="1">Learn more</a></div>`; if (l2snapaicontribution === "true") { var l2index = matches.indexOf(planl2name + "<br"); if (l2index != -1) { if (l2index !== matches.length - 1) { var templ2 = matches[l2index + 1]; investmentArea = investmentArea.replace("<p><strong>" + templ2.replace("<br", '') + "</strong><br>", AIBanner + "<br><p><strong>" + templ2.replace("<br", '') + "</strong><br>"); } else { investmentArea = investmentArea + AIBanner + "</br></br>"; } } } } $('#productOverviewModal').find('.whats-new-deatails').empty().append(investmentArea); $('#productOverviewModal').find('.investement-image').empty().append(`<img src='https://docs.microsoft.com/en-us/${productInURL}-release-plan/media/whatsnewandplanned.jpg' style='height: auto;max-width: 100%;'>`); $('#productOverviewModal').modal('show'); $('#productOverviewModal').on('hidden.bs.modal', function () { $('iframe').attr('src', $('iframe').attr('src')); }); downloadWaveSummary(waveID,HeirarchyPath,snapID,true); } dwlWavePopover(); hideLoader(); } }); } function setCarouselImage(productID) { $(".videoCarousel").remove(); $(".overviewBannerText").remove(); $(".overview-head + br").remove(); $(".overviewBannerText").addClass('hidden'); let purl = `${document.location.origin}/productoverview/?productID=${productID}`; $.ajax({ url: purl, async: false, success: function(data) { let parsedJSON = JSON.parse(data.replaceAll('\r','').replaceAll('\n','')); for(var i=0;i<parsedJSON.results.length;i++){ let area=`<div class="videoCarousel overviewBanner image" style="object-fit: cover;" alt="bannerBack"> </div> <div class='overviewBannerText' style="justify-content: space-between;display: flex;margin-top: -68px;margin-bottom: 24px;" aria-label="Highlighted video banner" tabindex="0"> <div class='highlightMessage'> <a role="button" class='bannerTextDecoration' style="font-family: 'Segoe UI';font-style: normal;font-weight: 700;font-size: 18px;line-height: 24px;color: #FFFFFF;display: inline;min-width: max-content;padding-left: 20px" onclick='openvideomodel()' tabindex="0">Watch the new highlights!</a> </div> <div class="banner-close-button" style="margin-right: 3%;margin-top:2px;"> <div aria-label='close Banner' class='bannerCloseIcon' role='button' onclick='closeBanner()' style='margin-top: 3px;' tabindex="0"> </div> </div> `; $(".f-details > div:nth-child(1)").after(area); if(parsedJSON.results[i].summaryvideourl) { $(".productOverviewVideo").removeClass('hidden'); videosrcURL = parsedJSON.results[i].summaryvideourl; latestWaveName = parsedJSON.results[i].wavename; $(".productOverviewVideo").attr('src',videosrcURL); $('#productOverviewModal').children().children().children('.modal-body').children('.overview-head').after('<br>'); $(".overviewBanner").removeClass('hidden') $(".overviewBannerText").removeClass('hidden'); } else{ $(".productOverviewVideo").addClass('hidden'); $(".overviewBannerText").addClass('hidden'); $(".overviewBanner").addClass('hidden'); } $('.highlightMessage').prepend(overviewBannerSvg()); $('.bannerCloseIcon').append(overviewBannerCross()); } var sessionValue = sessionStorage.getItem('bannerClosed'); if(sessionValue !== null) { let parsedSessionValue = JSON.parse(sessionValue); if(parsedSessionValue.length > 0) { for(var i=0;i<parsedSessionValue.length;i++) { if(parsedSessionValue[i] === AppState.selectedProduct) { $(".overviewBanner").addClass('hidden'); $(".overviewBannerText").addClass('hidden'); } } } } if(parsedJSON.results.length === 0) //no data present for selected present { $(".productOverviewVideo").addClass('hidden'); } $(".list-group").css("box-shadow","0px 0px 4px rgb(0 0 0 / 10%)"); $(".plan-group").css("box-shadow","0px 0px 4px rgb(0 0 0 / 10%)"); $(".f-details").css("box-shadow",""); } }); } function closeBanner() { $(".overviewBanner").addClass('hidden'); $(".overviewBannerText").addClass('hidden'); arrayOfClosedBanner.push(AppState.selectedProduct); let arrayOfClosedBannerJSON = JSON.stringify(arrayOfClosedBanner); sessionStorage.setItem('bannerClosed',arrayOfClosedBannerJSON); } function openvideomodel() { $(".productOverviewVideo").attr('src',videosrcURL); let title = AppState.productList.find(x=>(x.id === AppState.selectedProduct)).name +" "+latestWaveName; $('#videoModal').find('#overviewModelWindowLabel').text(title); $('#videoModal').modal('show'); } function setBusinessValue($businessValueElement, charsCount, showMoreText){ let parentElementId = $businessValueElement.closest('.featuredata').attr('id'); let totalLength = $businessValueElement.text().length; let shouldTrimBusinessValue = totalLength > charsCount; let addShowMore = false; while(shouldTrimBusinessValue){ let currentTextLength = $(`[id='${parentElementId}']`).find('.f-detail').text().length; let $lastElement = $(`[id='${parentElementId}']`).find('.f-detail').children().last(); if($lastElement.length > 0 && currentTextLength > charsCount){ $lastElement = getLastInnerElement($lastElement); if($lastElement.text().length <= (currentTextLength - charsCount)){ $lastElement.remove(); addShowMore = true; } else if($lastElement.text().length > (currentTextLength - charsCount)){ shouldTrimBusinessValue = false; $lastElement.text($lastElement.text().substring(0, $lastElement.text().length - (currentTextLength - charsCount))); addShowMore = true; } } else if(currentTextLength > charsCount && $lastElement.text().length > (currentTextLength - charsCount)){ $lastElement.text($lastElement.text().substring(0, $lastElement.text().length - (currentTextLength - charsCount))); shouldTrimBusinessValue = false; addShowMore = true; } else{ shouldTrimBusinessValue = false; } } if(addShowMore){ let updatedElement = $(`[id='${parentElementId}']`).find('.f-detail'); updatedElement.find('.showMoreText').remove(); let lastInnerMostElement = getLastInnerElement(updatedElement); lastInnerMostElement.append('<span class="showMoreText font-weight-semibold"> '+ showMoreText +'</span>') } } function renderProductOnTab(prod,products){ $('.list-group--features').removeClass('hidden-item'); $('.product-family').removeClass('hidden-item'); $('.f-details').removeClass('col-lg-12').addClass('col-lg-9'); $('.f-details').css('margin-top','-62px') $('.show-on-mobile').removeClass('hidden-item'); $('.separator').removeClass('hidden-item'); $('.f-details').css('top', ''); var row = ""; var ProductByCategory = products.filter(x => x.hierarchy == prod); for (var item = 0; item < ProductByCategory.length; item++){ let displayName = ProductByCategory[item].shortname || ProductByCategory[item].name; var category = $(`<div class="panel panel-default top-panel"> <div class="panel-heading top-panel-heading"> <h4 class="panel-title"> <a class="accordion-toggle top-panel-toggle collapsed navigationProduct" id="${ProductByCategory[item].id}" name="${ProductByCategory[item].id}" onclick="onTabProductClick(this)" data-toggle="collapse" data-name="${displayName}" href="#collapses${item + 1}" aria-expanded="false"> ${displayName} </a> </h4> </div> <div id="collapses${item + 1}" class="panel-collapse collapse"><div class="panel-body"><ul></ul></div></div> </div>`); $('#accordion-group').append(category); } } function onProductGroupClick(element){ $('#accordion-group').html(''); updateProductState($(element).children().children('a').attr('data-name')); let selectedProductGroup = AppState.productsObj.find(x=>(x === AppState.urlParams.app.selectedValue)); $(element).parent().addClass('active'); $('div.active').removeClass('active'); $('li.active').removeClass('active'); $(element).addClass('active'); var filterValue = parseInt($('#filterDropdown option:selected').val()); } function showSnapshotsOfGroupProduct(snapshots, filterValue){ if (snapshots.length == 0) { setNoResultMessage($('#accordion-group')); return; } let url = new URL(window.location); let selectedParam = url.searchParams.get('app'); let isExist = AppState.productsObj.filter(x=>x == selectedParam).length; if(isExist>0){ $(".videoCarousel").remove(); $(".overviewBannerText").remove(); $(".overview-head + br").remove(); $(".overviewBannerText").addClass('hidden'); } $('.list-group--features').removeClass('hidden-item'); $('.product-family').removeClass('hidden-item'); $('.f-details').removeClass('col-lg-12').addClass('col-lg-9'); $('.f-details').css('margin-top','-62px') $('.show-on-mobile').removeClass('hidden-item'); $('.separator').removeClass('hidden-item'); $('.f-details').css('top', ''); var groupedSnapshots=''; if(isGroupedByDate()){ groupedSnapshots = groupUserProductSnapshotByDate(snapshots, filterValue); } else{ groupedSnapshots = groupByUserProductSnapshots(snapshots, filterValue); //first group by product } const groupAccordionHTML = `<div class="panel panel-default top-panel"> <div class="panel-heading top-panel-heading"> <h4 class="panel-title"> <a class="accordion-toggle collapsed top-panel-toggle" data-toggle="collapse" data-parent="#accordion-group" href="#panel-{id}"> {groupName} </a> </h4> </div> <div id="panel-{id}" class="panel-collapse collapse"> <div class="panel-body"> <div class="list-group--data" id="plan-accordion-{id}"> </div> </div> </div> </div>`; if(isGroupedByDate()){ groupedSnapshots.forEach(item=>{ let updatedAccordionHtml = groupAccordionHTML.replaceAll('{groupName}', item.key).replaceAll('{id}', item.key.replaceAll(' ', '-').replaceAll(',').replaceAll('&','').replaceAll('*','').replaceAll('.',''), ''); $('#accordion-group').append(updatedAccordionHtml); let sortedSnapshots = sortSnapshots(item.snapshots, filterValue); renderDataSets(sortedSnapshots, sortedSnapshots.length, filterValue, $(updatedAccordionHtml).find(".list-group--data").attr('id')); }); } else{ const productAreaGroupAccordionHTML = `<div class="panel panel-default top-panel secondary-top-panel" style="margin-left: 50px;margin-top: 10px;"> <div class="panel-heading top-panel-heading"> <h4 class="panel-title"> <a class="accordion-toggle collapsed top-panel-toggle secondary-top-panel-toggle" data-toggle="collapse" data-parent="#panel-{id}" href="#panel-{id}"> {groupName} </a> </h4> </div> <div id="panel-{id}" class="panel-collapse collapse"> <div class="panel-body"> <div class="list-group--data" id="plan-accordion-{id}"> </div> </div> </div> </div>`; var i=0; groupedSnapshots.forEach(item=>{ var updatedAccordionHtml = groupAccordionHTML.replaceAll('{groupName}', item.key).replaceAll('{id}', item.key.replaceAll(' ', '-').replaceAll(',').replaceAll('&','').replaceAll('*','').replaceAll('.',''), ''); $('#accordion-group').append(updatedAccordionHtml); let groupedSnapshotData = groupUserSnapshots(item.snapshots, filterValue); groupedSnapshotData.forEach(items=>{ let fullUpdatedAccordianHTML = productAreaGroupAccordionHTML.replaceAll('{groupName}',items.key).replaceAll('{id}', i); $('#accordion-group').find("#panel-"+item.key.replaceAll(' ', '-')).append(fullUpdatedAccordianHTML); let sortedSnapshots = sortSnapshots(items.snapshots, filterValue); renderDataSets(sortedSnapshots, sortedSnapshots.length, filterValue, $(fullUpdatedAccordianHTML).find(".list-group--data").attr('id')); i++; }); }); } $('.top-panel .panel-collapse').first().addClass('in'); $('.top-panel .accordion-toggle.top-panel-toggle').first().removeClass('collapsed'); $('.top-panel .panel-collapse .secondary-top-panel .panel-collapse').first().addClass('in'); //expand first l1 Product $('.top-panel .accordion-toggle.secondary-top-panel-toggle').first().removeClass('collapsed'); $('.notes-empty').append(NotesEmptySvg()); $('.notes-empty').attr('tabindex','0'); } function showSnapshotsAsChildren(snapshots, filterValue) { if (snapshots.length == 0) { setNoResultMessage($('#accordion-group')); } $('.list-group--features').removeClass('hidden-item'); $('.product-family').removeClass('hidden-item'); $('.f-details').removeClass('col-lg-12').addClass('col-lg-9'); $('.f-details').css('margin-top','-62px') $('.show-on-mobile').removeClass('hidden-item'); $('.separator').removeClass('hidden-item'); $('.f-details').css('top', ''); let selectedProduct = AppState.selectedProduct; let idss = $('[name='+selectedProduct+']').parent().parent().siblings().get(0).id; $('#'+idss).children().remove(); const groupedSnapshots = groupSnapshots(snapshots, filterValue); const groupAccordionHTML = `<div class="panel panel-default top-panel secondary-top-panel" style="margin-left: 50px;margin-top: 10px;"> <div class="panel-heading top-panel-heading"> <h4 class="panel-title"> <a class="accordion-toggle collapsed top-panel-toggle secondary-top-panel-toggle" data-toggle="collapse" data-parent="#panel-{id}" href="#panel-{id}"> {groupName} </a> </h4> </div> <div id="panel-{id}" class="panel-collapse collapse"> <div class="panel-body"> <div class="list-group--data" id="plan-accordion-{id}"> </div> </div> </div> </div>`; var i=0; groupedSnapshots.forEach(item=>{ let updatedAccordionHtml = groupAccordionHTML.replaceAll('{groupName}', item.key).replaceAll('{id}',i); let selectedProduct = AppState.selectedProduct; let idss = $('[name='+selectedProduct+']').parent().parent().siblings().get(0).id; $('#'+idss).append(updatedAccordionHtml); let sortedSnapshots = sortSnapshots(item.snapshots, filterValue); renderDataSets(sortedSnapshots, sortedSnapshots.length, filterValue, $(updatedAccordionHtml).find(".list-group--data").attr('id')); i++; }); $('.secondary-top-panel .panel-collapse').first().addClass('in'); $('.secondary-top-panel .accordion-toggle.secondary-top-panel-toggle').first().removeClass('collapsed'); } function createMediaCarousel(annotationsPromise, snapshotId, onCompleted) { annotationsPromise.then((data)=>{ $imageContainer = $(`.carousel-container-${snapshotId}`); if(!$imageContainer || $imageContainer.length === 0){ onCompleted(false); return; } let annotations = []; if (data.results.length > 0) { data.results.forEach(element => { annotations.push({ FileName: element.FileName, MimeType: element.MimeType, Description: element.Description, Title: element.Description, Image: element.Image }); }); } if(annotations && annotations.length > 0){ const carouselLegth = 3; let carouselHtml = `<div class="row mx-auto my-auto justify-content-center"> <div id="snapshot-carousel-${snapshotId}" class="carousel slide" data-interval="false" style="width: 100%;"> <div class="carousel-inner"></div> <a class="left carousel-control ${annotations.length <= carouselLegth ? 'hidden-item': ''}" href="#snapshot-carousel-${snapshotId}" data-slide="prev" role="button" tabindex="0">‹</a> <a class="right carousel-control ${annotations.length <= carouselLegth ? 'hidden-item': ''}" href="#snapshot-carousel-${snapshotId}" data-slide="next" role="button" tabindex="0">›</a> </div> </div>`; $imageContainer.html(''); $imageContainer.append(carouselHtml); let $innerCarousel = $(`#snapshot-carousel-${snapshotId}`).find('.carousel-inner'); for(let i = 0; i < annotations.length; i = i+carouselLegth){ $innerCarousel.append($(`<div class="item item-${i} ${i===0 ? 'active' : ''}"> <div class="row"> </div> </div>`)); let j = 0; while (j < carouselLegth && i + j < annotations.length){ let imageBlobUrl = getImageBlobUrl(annotations[i+j].Image, annotations[i+j].MimeType); let imageDescription = escape(annotations[i+j].Title); $innerCarousel.find(`.item-${i}`).find('.row').append($(`<div class="col-xs-4 col-image"> <a onclick="openImageModal('${imageBlobUrl}', '${imageDescription}', event)" target="_blank" tabindex="0"> <img src="${imageBlobUrl}" alt="${annotations[i+j].Description}" title="${annotations[i+j].Title}" class="img-responsive" /> </a> </div>`)); j++; } } let myCarousel = $("#snapshot-carousel-"+snapshotId); let itemFirst = myCarousel.find('.carousel-inner > .item:first-child'); let itemLast = myCarousel.find('.carousel-inner > .item:last-child'); let controlLeft = myCarousel.find('a.left.carousel-control'); let controlRight = myCarousel.find('a.right.carousel-control'); hideControl(myCarousel,itemFirst,itemLast,controlLeft,controlRight); myCarousel.on('slid.bs.carousel', function() { hideControl(myCarousel,itemFirst,itemLast,controlLeft,controlRight); }); myCarousel.on('slide.bs.carousel', function() { showControl(myCarousel,itemFirst,itemLast,controlLeft,controlRight); }); } onCompleted(annotations && annotations.length > 0, $imageContainer); }); } function filterCheck(featureObj, tabledata, filterValue) { var targetReleaseDate = ""; var earlyAccessDate = featureObj.EarlyAccessDate; var publicPreviewDate = featureObj.PublicPreviewDate; var gaDate = featureObj.GADate; if (earlyAccessDate != "") { targetReleaseDate = earlyAccessDate; } else if (publicPreviewDate != "") { targetReleaseDate = publicPreviewDate; } else { targetReleaseDate = gaDate; } if(filterValue == 4){ if ((shouldAddInCurrentFilterAll(`${filterValue}`, earlyAccessDate, featureObj) || shouldAddInCurrentFilterAll(`${filterValue}`, publicPreviewDate, featureObj) || shouldAddInCurrentFilterAll(`${filterValue}`, gaDate, featureObj)) && (verifyInteractiveFilters(featureObj)) && (skipThisWave(featureObj))) { tabledata.push(featureObj); } } else{ if ((shouldAddInCurrentFilter(`${filterValue}`, earlyAccessDate) || shouldAddInCurrentFilter(`${filterValue}`, publicPreviewDate) || shouldAddInCurrentFilter(`${filterValue}`, gaDate)) && (verifyInteractiveFilters(featureObj)) && (skipThisWave(featureObj))) { tabledata.push(featureObj); }} return tabledata; } function shouldAddInCurrentFilterAll(filterValue, dateValue, featureObj){ if (!dateValue || dateValue === ''){ return false; } let includeInFilter = false; let givenDate = moment(dateValue, 'MM/DD/YYYY'); let givenMonth = Number(givenDate.format('M')); let givenYear = Number(givenDate.format('YYYY')); let currentDateOnly = $.datepicker.formatDate('mm/dd/yy', new Date()); let currentDate = moment(currentDateOnly, 'MM/DD/YYYY'); let currentMonth = Number(currentDate.format('M')); let currentYear = Number(currentDate.format('YYYY')); var dayDiff = givenDate.diff(currentDate, 'days'); if (filterValue === '3'){ // Try now if(dayDiff <0) includeInFilter=true; //if incoming plan date is less then current date } else if (filterValue === '2'){ // Coming Soon if(dayDiff >=0 && dayDiff<=30) includeInFilter = true; } else if (filterValue === '1'){ // Planned if(dayDiff >30)includeInFilter = true; } else if(filterValue === '4'){ if(dayDiff >30){ includeInFilter = true;} else if(dayDiff < 0 && (featureObj.PPStatus === "Shipped" || featureObj.GAStatus === "Shipped") ){ includeInFilter = true;} } return includeInFilter; } function setMoreValueTwo($businessValueElement, charsCount, showMoreText){ let totalLength = $businessValueElement.find('.feature-name.f-name').text().length; let shouldTrimBusinessValue = totalLength > charsCount; if(shouldTrimBusinessValue){ $businessValueElement.find('.showMoreText').remove(); let newString = $businessValueElement.find('.feature-name.f-name').text().substring(0,charsCount) $businessValueElement.find('.feature-name.f-name').text(newString).append('<span class="showMoreText font-weight-semibold"> '+ showMoreText +'</span>'); } } function getNextMilestoneDateValue(plan,filterType){ let mileStone = {'dateValue':'', 'name':'', 'date': null, 'groupValue':''}; let currentDate = new Date(); currentDate.setHours(0, 0, 0, 0); var daysToCompare = 1; if(filterType === 1){//planned daysToCompare = 31; } let dayDiff = getDateDifference(plan.EarlyAccessDate, currentDate); if(dayDiff != null && dayDiff >= daysToCompare){ mileStone.dateValue = plan.EADateValue; mileStone.name = 'Early Access'; mileStone.localeName='Early Access'; mileStone.date = plan.EarlyAccessDate; mileStone.groupValue = moment(plan.EarlyAccessDate).format('MMM YYYY'); return mileStone; } else if(dayDiff != null && dayDiff < 0 && filterType == 4){ mileStone = getLastMilestoneDateValue(plan); return mileStone; } dayDiff = getDateDifference(plan.PublicPreviewDate, currentDate); if(dayDiff != null && dayDiff >= daysToCompare){ mileStone.dateValue = plan.PPDateValue; mileStone.name = 'Public Preview'; mileStone.localeName='Public Preview'; mileStone.date = plan.PublicPreviewDate; mileStone.groupValue = moment(plan.PublicPreviewDate).format('MMM YYYY'); return mileStone; } else if(dayDiff != null && dayDiff < 0 && filterType == 4){ mileStone = getLastMilestoneDateValue(plan); return mileStone; } dayDiff = getDateDifference(plan.GADate, currentDate); if(dayDiff != null && dayDiff >= daysToCompare){ mileStone.dateValue = plan.GADateValue; mileStone.name = 'GA'; mileStone.localeName='General Availability '; mileStone.date = plan.GADate; mileStone.groupValue = moment(plan.GADate).format('MMM YYYY'); return mileStone; } else if(dayDiff != null && dayDiff < 0 && filterType == 4){ mileStone = getLastMilestoneDateValue(plan); return mileStone; } return mileStone; } function getLastMilestoneDateValue(plan){ let mileStone = {'dateValue':'', 'name':'', 'date': null, 'groupValue':''}; let currentDate = new Date(); currentDate.setHours(0, 0, 0, 0); let dayDiff = getDateDifference(currentDate, plan.GADate); if(dayDiff != null && dayDiff >= 0){ mileStone.dateValue = plan.GADateValue; mileStone.name = 'GA'; mileStone.localeName='General Availability '; mileStone.date = plan.GADate; mileStone.groupValue = moment(plan.GADate).format('MMM YYYY'); return mileStone; } dayDiff = getDateDifference(currentDate, plan.PublicPreviewDate); if(dayDiff != null && dayDiff >= 0){ mileStone.dateValue = plan.PPDateValue; mileStone.name = 'Public Preview'; mileStone.localeName='Public Preview'; mileStone.date = plan.PublicPreviewDate; mileStone.groupValue = moment(plan.PublicPreviewDate).format('MMM YYYY'); return mileStone; } dayDiff = getDateDifference(currentDate, plan.EarlyAccessDate); if(dayDiff != null && dayDiff >= 0){ mileStone.dateValue = plan.EADateValue; mileStone.name = 'Early Access'; mileStone.localeName='Early Access'; mileStone.date = plan.EarlyAccessDate; mileStone.groupValue = moment(plan.EarlyAccessDate).format('MMM YYYY'); return mileStone; } return mileStone; } $(document).ready(function () { var presentURLLocale = window.location.pathname.split('/')[1].toLowerCase(); var presentCaseLocaleURL = window.location.pathname.split('/')[1]; if (presentURLLocale.length > 5) { presentURLLocale = presentURLLocale.substring(0, 5); } if (presentCaseLocaleURL.length > 5) { presentCaseLocaleURL = presentCaseLocaleURL.substring(0, 5); } var presentURLLocaleHalfLanguage = presentURLLocale.split("-")[0]; var browserLanguage = navigator.language.toLocaleLowerCase(); var browserHalfLanguage = navigator.language.toLocaleLowerCase().split("-")[0]; var supportedFullLanguages = lang; var supportedHalfLanguages = shortlang; var alreadyRedirected = sessionStorage.getItem("Redirected"); if (presentCaseLocaleURL.length == 5 && presentCaseLocaleURL != "en-US") { sessionStorage.setItem("Redirected", "true"); alreadyRedirected = sessionStorage.getItem("Redirected"); } if (alreadyRedirected == null) { sessionStorage.setItem("Redirected", "true"); if (presentURLLocale != browserLanguage) { for (var i = 0; i < supportedFullLanguages.length; i++) { if (browserLanguage == supportedFullLanguages[i]) { let redirectionURL = window.location.href.replace(presentCaseLocaleURL, supportedFullLanguages[i]); window.location.href = redirectionURL; return; } else if (browserHalfLanguage == supportedHalfLanguages[i]) { let redirectionURL = window.location.href.replace(presentCaseLocaleURL, supportedFullLanguages[i]); window.location.href = redirectionURL; return; } } for (var i = 0; i < supportedFullLanguages.length; i++) { if (presentURLLocaleHalfLanguage == supportedHalfLanguages[i]) { let redirectionURL = window.location.href.replace(presentCaseLocaleURL, supportedFullLanguages[i]); window.location.href = redirectionURL; return; } } } } }); $(document).ready(function(){ let waveObj=null; $(document).click(function(){ $(".edit-action-modal").addClass('hidden'); $("#commentModal").find('.edit-button').removeClass('editActionClick'); $(".share-feature").popover('hide'); }); $(".whatsnewImg").append(getWhatsNewSvg()); $(".feedbackImg").append(getfeedbackSvg()); waveObj = new Object(); waveObj.shortName = "2024wave2"; waveObj.FullName = "2024 release wave 2"; AppState.ActiveWave.push(waveObj); }); $(window).on("load",function(){ setTimeout(function(){ popoverTooltip("share-feature",UI_Strings.poverShareFeature); popoverTooltip("filterPopover",UI_Strings.poverInteractiveFilter); popoverTooltip("shareGroup",UI_Strings.poversharePersonalizedPlan); },500); }); function ToggelActionEdit(e){ e.stopPropagation(); } function sharedLinkPopover(){ $(".share-feature").each(function(i, obj) { $(this).popover({ html: true, sanitize: false, content: function() { return $('#popover-content-sharefeature').html(); } }).on('show.bs.popover',function(e){ $('.popover').css('width','225px'); $(".share-feature").attr("data-toggle","popover").attr("data-container","body").attr("data-placement","bottom").attr("data-html","true").removeAttr('data-original-title'); }).on('inserted.bs.popover',function(e){ $('.popover').css('width','225px'); $(".share-feature").attr("data-toggle","popover").attr("data-container","body").attr("data-placement","bottom").attr("data-html","true").removeAttr('data-original-title'); }).on('shown.bs.popover',function(e){ $('#popover-content-sharefeature').find('.featureCopy').focus(); }); }); $(".share-feature").popover({trigger:"manual"}).click(function(){ var pop = $(this); pop.on('shown.bs.popover',function(){ setTimeout(function(){ pop.popover("hide"); },2000); }); }); } function shareThisFeature(snapshotID,e,thisevent){ e.stopPropagation(); e.preventDefault(); sharedLinkPopover(); const url = new URL(window.location); url.searchParams.delete("planID"); url.searchParams.delete("wave"); url.searchParams.delete("availability"); url.searchParams.delete('q'); //url.searchParams.delete('status'); url.searchParams.append("planID",snapshotID); let newURL = url.origin+"/"+decodeURI(url.search); copyToClipboard(newURL); } var alerted=false; function focusFeature(){ if(!isMyReleasePlanSelected()){ const url = new URL(window.location); let urlContainsPlanID = url.searchParams.has("planID"); if(urlContainsPlanID){ var snapshotID = url.searchParams.get('planID'); $("#plan-"+snapshotID).parent().parent().parent().parent().addClass('in').attr('aria-expanded','true').css('height','auto'); $("#plan-"+snapshotID).addClass('in').css('height','auto').attr("aria-expanded","true"); setTimeout(function(){ let isExist = $("#plan-"+snapshotID).length; if(isExist === 0 && !alerted){ alerted = true; $('.top-panel .panel-collapse').first().addClass('in'); $('.top-panel .accordion-toggle.top-panel-toggle').first().removeClass('collapsed'); window.alert(UI_Strings.alertPersonalizedPlan); } else{ let pixelScroll = 0; let scrrenWidth = $(window).width(); if(scrrenWidth<1200) pixelScroll=300; //var scrollDiv = document.getElementById(snapshotID); var scrollDiv = $("#plan-"+snapshotID).parent('.list-group--data-items')[0]; if(scrollDiv !== null){ var scrollOffset =scrollDiv.offsetTop; //window.scrollTo({ top: scrollOffset+pixelScroll, behavior: 'smooth'}); $('html,body').animate({ scrollTop: $("#plan-"+snapshotID).parent('.list-group--data-items').offset().top-100}, 'slow'); loadPostExpand(snapshotID); } } },1500); } } } function popoverTooltip(className,title){ $("."+className).on({ mouseenter: function(e) { $("."+className).removeAttr("data-toggle").removeAttr("data-container").removeAttr("data-placement").removeAttr("data-html").attr('title',title); }, mouseleave: function(e) { $("."+className).attr("data-toggle","popover").attr("data-container","body").attr("data-placement","bottom").attr("data-html","true"); }, click: function(e) { $("."+className).attr("data-toggle","popover").attr("data-container","body").attr("data-placement","bottom").attr("data-html","true").removeAttr('data-original-title'); } }); } function expandSearch(thisEvent){ $(thisEvent).parent().parent().children('.searchbartop').children().children('.txtSearch').attr('style','transition:width 1s cubic-bezier(0.03, 1.41, 0.25, 1) 0s;visibility:visible;padding: 5px;width:230px;background: #E7F3FF;padding-left: 35px;padding-right: 30px;'); let windowWidth = $(window).width(); $(thisEvent).parent().attr('style','right:435px;position:absolute;transition:right 1s cubic-bezier(0.03, 1.41, 0.25, 1) 0s'); $(thisEvent).parent().parent().children('form').css("right","0px"); $(thisEvent).css("transform","rotate(90deg)").css("margin-top","10px"); $(thisEvent).children().children().css('fill','black'); $(thisEvent).parent().parent().children('.clearCrossButton ').css('opacity','100%').css('right',"240px").css('visibility','visible').css('transition','opacity 2s'); if(langCode.toLocaleLowerCase() === 'fi-fi'){ $(thisEvent).parent().css("right","465px"); $(thisEvent).parent().parent().children('.clearCrossButton ').css("right","275px"); } } function clearSearchText(thisEvent) { $(thisEvent).parent().children().children().children('.txtSearch').attr('style','transition:width 1s cubic-bezier(0.03, 1.41, 0.25, 1) 0s;width:0px;padding:0'); $(thisEvent).parent().find('.searchBtn').css("transform","rotate(0deg)").css("margin-top","6px"); $(thisEvent).parent().find('.searchBtn').children().children().css('fill','#F1F8FF'); $(thisEvent).parent('.searchBar').children().children('.searchBtn').parent().css('right','235px'); if(langCode.toLocaleLowerCase() === 'fi-fi'){ $(thisEvent).parent('.searchBar').children().children('.searchBtn').parent().css('right','265px'); } $(thisEvent).css("visibility","hidden").css('opacity','0%'); $(".txtSearch").val(''); } function lazyLoadJS(srcUrl,typeOf){ var s = document.createElement('script'); s.type = typeOf; s.async = true; s.src = srcUrl; var x = document.getElementsByTagName('head')[0]; x.appendChild(s); } function lazyLoadCSS(srcUrl){ var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = srcUrl; var h = document.getElementsByTagName('head')[0]; h.appendChild(l); } function checkLanguageLocale(){ var userLang = navigator.language || navigator.userLanguage; let lowerUserLang = userLang.toLowerCase(); if(lowerUserLang === 'fr-ca' || lowerUserLang === 'en-ca'){ window.location.href="https://learn.microsoft.com/"+lowerUserLang+"/dynamics365/release-plans/"; $(".sub-head").text('Release planner (PREVIEW)*'); $(".sub-sub-head").css("display",""); $(document).prop('title', 'Microsoft Release planner (PREVIEW)'); } } function onExpandOfFeature(){ $('#accordion-group').on('shown.bs.collapse', function (e) { const showMoreText = '... click Learn more for details.'; let snapID = $(e.target).attr('id'); let removeSubs = snapID.substring(0,5); snapID = snapID.replace(removeSubs,''); if(snapID.length>0 && removeSubs ==='plan-'){ let snapshotPromise = AppState.snapshotImagePromises.find(item=>item.snapshotId === snapID); if(!snapshotPromise){ $(`.carousel-container-${snapID}`).addClass('imageLoader'); snapshotPromise = {snapshotId: snapID, annotationPromise: getImagesFromAttachment(snapID, $(`.carousel-container-${snapID}`))}; AppState.snapshotImagePromises.push(snapshotPromise); } const annotationsPromise = snapshotPromise.annotationPromise; createMediaCarousel(annotationsPromise, snapID, function(hasImages, $imageContainer){ if(hasImages && $imageContainer){ let $parentDetailElement = $imageContainer.closest('.featuredata').find('.f-detail'); setBusinessValue($parentDetailElement, 700, showMoreText); } }); } }); $('#accordion-group').on('show.bs.collapse', function (e) { let snapID = $(e.target).attr('id'); let removeSubs = snapID.substring(0,5); snapID = snapID.replace(removeSubs,''); if(snapID.length>0 && removeSubs ==='plan-'){ var productResultObj =''; let selectedPlanGroup=false; let isMyplan= false; if(urlUserID !== "" && urlUserID !== null) selectedPlanGroup = isSharedReleasePlan(); else{ selectedPlanGroup = isMyReleasePlanSelected(); isMyplan=true;} if(selectedPlanGroup){ if(isMyplan && ($(e.target).closest(".secondary-top-panel").length != 0 || isGroupedByDate())) productResultObj = AppState.userProductResults.find(item => item.SnapshotId === snapID); else productResultObj = AppState.productResults.find(item => item.SnapshotId === snapID); } else productResultObj = AppState.productResults.find(item => item.SnapshotId === snapID); let waveID = productResultObj.ReleaseWaveID; if(productResultObj.ReleaseWaveID == '' || productResultObj.ReleaseWaveID == undefined){ waveID = productResultObj.GAReleaseWaveId; } downloadWaveSummary(waveID,productResultObj.ProductHierarchyPath,snapID,true); } }); } function setGroupFilterOnLoad(){ const url = new URL(window.location); let newParam = new URLSearchParams(url.search); let groupParam=''; if(newParam.has('group')){ groupParam=url.searchParams.get('group'); if(groupParam!=''){ if( groupParam === 'date') groupPlansByDate(); else if( groupParam === 'theme') groupPlansByL2(); } } } document.addEventListener("keydown", function(e) { if (e.code == "Space" || e.code == "Enter") { if(!document.activeElement.className.contains('notes-empty')) document.activeElement.click(); } if(e.code == "Escape"){ closePopover(); $(".closeSharePopover").popover('hide'); } }); </script> <script type="text/javascript"> function userProductClick(element){ AppState.userProductResults = []; $("#accordion-group").html(''); let val = $(element).children().children('a').attr('data-name'); updateProductState(val); $('li.active').removeClass('active'); $('div.active').removeClass('active'); $(element).addClass('active'); userSetTabSelection(); } function userSetTabSelection(){ let selectedTab = 1; if(AppState.urlParams.status.selectedValue === TabConst.commingSoon){ selectedTab = 2; } else if(AppState.urlParams.status.selectedValue === TabConst.tryNow){ selectedTab = 3; } $('#filterDropdown select').val(selectedTab); renderUserReleasePlanData(selectedTab); } function renderUserReleasePlanData(filterValue=1) { $('.active-filter.active').removeClass('active'); $(`.status--filters-${filterValue}`).find('.active-filter').addClass('active'); $(".tablist--features").find('[role="tab"]').attr('aria-selected','false'); $(`.status--filters-${filterValue}`).find('[role="tab"]').attr('aria-selected','true'); $('#accordion-group').html(''); if(AppState.userProductResults.length === 0){ showLoader(); let url= `${document.location.origin}`+"/releaseplanner-user-json/?productfamily=%"+AppState.urlParams.app.selectedValue+"%&userID="+UserId+"&langCode="+langCode; $.getJSON(url,function(data){ hideLoader(); if(data.results.length > 0){ data.results.forEach(element =>{ let featureObj = { EarlyAccessDate: element.EarlyAccessDate, PublicPreviewDate: element.PublicPreviewDate, GADate: element.GADate, FeatureName: element.FeatureName, BusinessValue: element.BusinessValue, GeographicAreasDetails:element.GeographicAreasDetails, ProductArea: element.ProductArea, EnabledFor: element.EnabledFor, ReleaseWaveName: element.ReleaseWaveName, ReleaseWaveID: element.ReleaseWaveId,GAReleaseWaveName: element.GAReleaseWaveName, GAReleaseWaveId: element.GAReleaseWaveId, GAIsActiveWave:element.GAIsActiveWave, GAIsSyncenable:element.GAIsSyncenable, ReleasePlanID: element.ReleasePlanID, Product: element.Product,ProductID:element.ProductId, ParentProductId: element.ParentProductId,ProductHierarchyPath:element.ProductHierarchyPath, ParentProductName: element.ParentProductName, LearnMoreLink: element.LearnMore,OverviewVideoLink: element.OverviewVideo,BlogLink: element.BlogURL, SegmentPath: element.SegmentPath,GASegmentPath:element.GASegmentPath, FolderName: element.FolderName,GAFolderName:element.GAFolderName, GitCommitDate: element.GitCommitDate, SnapshotId: element.SnapshotId, DocsUrl: element.DocsUrl, GADateValue: element.GADateValue, EADateValue: element.EADateValue, PPDateValue: element.PPDateValue, GAStatus: element.GAStatus, PPStatus: element.PPStatus, EAStatus: element.EAStatus, TargetReleaseDate: new Date(element.EarlyAccessDate || element.PublicPreviewDate || element.GADate), FirstGitHubPushDate: element.FirstGitHubPushDate, FeatureDetails: element.FeatureDetails, FeatureType: element.FeatureType,FeatureCategory: element.FeatureCategory, ProductAssociatedFolder: element.ProductAssociatedFolder, Milestone:{name:'', dateValue:'', date: null, groupValue:'',localeName:''}} AppState.userProductResults.push(featureObj); }); VerifyAndRenderUserSnapshots(AppState.userProductResults,filterValue); } else{ setNoResultMessage($('#accordion-group')); } }).fail(function(error) { hideLoader(); setNoResultMessage($('#accordion-group')); console.log(error); }); } else{ VerifyAndRenderUserSnapshots(AppState.userProductResults,filterValue); } } function VerifyAndRenderUserSnapshots(results, filterValue){ let filteredSnapshots = []; $('.searchMessageBar').addClass('hidden'); results.forEach(snapshot => { let snapshotRecord = AppState.userSnapshots.find(item=>item.ReleasePlanID === snapshot.ReleasePlanID); if(snapshotRecord){ filteredSnapshots = filterSnapshot(snapshot,filteredSnapshots,filterValue) } }); if(urlSearchParameter()){ $('.searchMessageBar').removeClass('hidden'); let filteredSearchedSnapshots = filteredSnapshots; filteredSnapshots = []; filteredSearchedSnapshots.forEach(snapshot => { let snapshotRecord = AppState.searchedSnapshots.find(item=>item.SnapshotId === snapshot.SnapshotId); if(snapshotRecord){ filteredSnapshots = filterSnapshot(snapshot,filteredSnapshots,filterValue) } }); } showSnapshotsOfGroupProduct(filteredSnapshots, filterValue); PlannedCount = countSnapshots(results, 1); ComingSoonCount = countSnapshots(results, 2); TryNowCount = countSnapshots(results, 3); setCount(); let valueOfDropdown= $(".filter--dropdown option:selected").val(); //dropdown value dropdownValueOnLoad(valueOfDropdown); dwlWavePopover(); } function groupUserSnapshots(snapshots, filterValue){ const groupedUserSnapshots = []; let groupedItems = []; groupedItems = [...new Set(snapshots.map(item => item.ProductArea))]; groupedItems.forEach(item =>{ groupedUserSnapshots.push({'key': item || 'Other', 'snapshots': snapshots.filter(s=>s.ProductArea === item) }); }); return groupedUserSnapshots; } function groupByUserProductSnapshots(snapshots, filterValue){ const groupedUserProductSnapshots = []; let groupedItems = []; if(isGroupedByDate()){ snapshots.forEach(s=>{ if(!groupedItems.find(x=>x.groupValue === s.Milestone.groupValue)){ groupedItems.push(s.Milestone); } }); if(filterBoxState.SortBy[0].order.OldNew) { groupedItems.sort(function(a, b){ return new Date(a.date) - new Date(b.date); }); } else if(filterBoxState.SortBy[0].order.NewOld) { groupedItems.sort(function(a, b){ return new Date(b.date) - new Date(a.date); }); } else{ if(filterValue === 3){ groupedItems.sort(function(a, b){ return new Date(b.date) - new Date(a.date); }); } else{ groupedItems.sort(function(a, b){ return new Date(a.date) - new Date(b.date); }); } } groupedItems.forEach(item =>{ groupedUserProductSnapshots.push({'key': item.groupValue, 'snapshots': snapshots.filter(s=>s.Milestone.groupValue === item.groupValue)}); }); } else{ groupedItems = [...new Set(snapshots.map(item => item.Product))]; groupedItems.forEach(item =>{ groupedUserProductSnapshots.push({'key': item || 'Other', 'snapshots': snapshots.filter(s=>s.Product === item) }); }); } return groupedUserProductSnapshots; } function groupUserProductSnapshotByDate(snapshots, filterValue) { const groupedUserProductSnapshots = []; let groupedItems = []; if(isGroupedByDate()){ snapshots.forEach(s=>{ if(!groupedItems.find(x=>x.groupValue === s.Milestone.groupValue)){ groupedItems.push(s.Milestone); } }); if(filterBoxState.SortBy[0].order.OldNew) { groupedItems.sort(function(a, b){ return new Date(a.date) - new Date(b.date); }); } else if(filterBoxState.SortBy[0].order.NewOld) { groupedItems.sort(function(a, b){ return new Date(b.date) - new Date(a.date); }); } else{ if(filterValue === 3){ groupedItems.sort(function(a, b){ return new Date(b.date) - new Date(a.date); }); } else{ groupedItems.sort(function(a, b){ return new Date(a.date) - new Date(b.date); }); } } groupedItems.forEach(item =>{ groupedUserProductSnapshots.push({'key': item.groupValue, 'snapshots': snapshots.filter(s=>s.Milestone.groupValue === item.groupValue)}); }); } return groupedUserProductSnapshots; } function setChangedHistoryAndBanner(snapshots) { for(var i=0;i<snapshots.length ;i++) { getChangeHistoryContent(snapshots[i].ProductID); } } function loadDetails(ExpandedSnapshotProdID,SelectedSnapshotID) { if(isMyReleasePlanSelected()){ $("#plan-"+SelectedSnapshotID+".f-main > .changeHistoryLoader").removeClass('hidden').addClass('imageLoader'); let url = `${document.location.origin}/snapshot-history-json/?productID=${ExpandedSnapshotProdID}`; $.ajax({ url: url, dataType: 'json', success: function(data) { let isCollapsed = $("[href='#plan-"+SelectedSnapshotID+"']").closest('.f-feature-head.panel-heading').siblings('.panel-collapse.collapse').hasClass('in'); let isCollapsing = $("[href='#plan-"+SelectedSnapshotID+"']").closest('.f-feature-head.panel-heading').siblings('.panel-collapse').hasClass('collapsing'); $("#plan-"+SelectedSnapshotID+" .f-changeHistory tbody td").parent().remove(); if(isCollapsed || isCollapsing) { let matched = data.results.filter(s=>s.snapshotID === SelectedSnapshotID) if(matched.length > 0) { let changedescription = matched.first().changeDescription.split('.'); let finalChangeDescription = ''; for(var j=0;j<changedescription.length;j++) { if(changedescription[j] !== '') finalChangeDescription += changedescription[j]+'<br>'; } let dateModified = matched.first().dateModified; if(changedescription.length > 0) { let row = $(`<tr><td><hr style='margin-top: 10px;margin-bottom: 10px;'></td><td><hr style='margin-top: 10px;margin-bottom: 10px;'></td></tr> <tr> <td>${finalChangeDescription}</td> <td style="text-align: right;">${dateModified}</td> </tr> `); $("#plan-"+SelectedSnapshotID+".f-main > .changeHistoryLoader").removeClass('imageLoader').addClass('hidden'); $('#plan-'+SelectedSnapshotID).children().children('.f-changeHistory').children().children('tbody').append(row); $('#plan-'+SelectedSnapshotID).children().children('.f-changeHistory').removeClass('hidden-item'); changedescription=''; dateModified=''; } } $("#plan-"+SelectedSnapshotID+".f-main > .changeHistoryLoader").removeClass('imageLoader').addClass('hidden'); } } }); } } </script> <script> //UI_Strings.alertPersonalizedPlan const UI_Strings = { d365: "Dynamics 365", d365Application: "Dynamics 365 Applications", pp: "Power Platform", noresult: "No Results", noprodmessage: "We didn't find any results.", noprodClick: "Click", noprodClose: "Close", noprodClose2: "to view release plans or try again using a different search criteria.", poverShareFeature: "Share with others.", sharedNoProdMessage: "We didn't find the shared release plan, click ", sharedNoProdCloseMessage: " to view release plans.", poverInteractiveFilter: "Filter & sort results.", poversharePersonalizedPlan: "Share personalized plan.", alertPersonalizedPlan: "This release plan does not exist. Please explore 'All release plans' to view the list of active release plans." }; </script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous" defer></script> <div class="spinner"> <div class="loader"></div> </div> <!-- Modal image start--> <div id="imageModal" class="modal fade modal-window" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h4 class="modal-title title" id="modalLabel"></h4> </div> <div class="modal-body" style="text-align: center;"> </div> <div class="modal-footer"> <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button> </div> </div> </div> </div> <div id="featureDetailsModal" class="modal fade" role="dialog" tabindex="-1" aria-labelledby="featureDetailLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h1 class="modal-title title" id="featureDetailLabel"></h1> <button type="button" class="close" data-dismiss="modal" aria-hidden="true" tabindex="1" aria-label="Close modal window">×</button> </div> <div class="modal-body"> <div class="row ImportantNote" style="display:none;margin-bottom: 10px;"> <div style='margin-left: 10px;display:flex;'> <div class="exclamationsvg"></div> <div class="importantText" style='margin-left: 6px;margin-top:-2px'>Important</div> </div> <div class="important-note col-lg-12" style="margin-top:12px"><b style="font-weight:600">Some of the functionality described in this release plan has not been released.</b> Delivery timelines may change and projected functionality may not be released (see <a href="https://www.microsoft.com/legal/intellectualproperty/online-disclaimer" target="_blank" style="color:#00748b; text-decoration: underline;" tabindex="1">Microsoft policy</a>).</div> </div> <div class="row bussiness-value"> <div class="feature-details col-lg-12"> </div> </div> <h2 class="feature-details-head">Feature Details</h2> <div class="row feature-details" role="paragraph"> <div class="col-lg-12"> </div> </div> <div class="images-content"></div> <div style="display:none"> <h2 class="geo-head">Geographic areas</h2> <div class="geo-details" role="paragraph"> <div class="col-lg-12"> </div> </div> </div> <div class="row notes-value" style="display:none"> <div style="margin-bottom: 2px;display:flex;align-items: center;"> <div class="warningIcon"></div> <div class="fetureNote">Note</div> </div> <div class="notes-details col-lg-12"></div> </div> <div class="row AIBanner" style="margin-bottom: 10px;"> <div style='margin-left: 10px;display:flex;'> <div class="exclamationsvg"></div> <div class="important-note col-lg-12" style="margin-top:-3px;margin-left:-10px;"><b style="font-weight:600">Note:</b> The author created this article with assistance from AI. <a href="https://learn.microsoft.com/en-us/principles-for-ai-generated-content" target="_blank" style="color:#00748b; text-decoration: underline;" tabindex="1">Learn more</a></div> </div> </div> </div> <div class="modal-footer"> <button class="btn" data-dismiss="modal" aria-hidden="true" aria-label="Close feature details window">Close</button> </div> </div> </div> </div> <!-- Modal Feature Details end --> <div id="popover-content-sharefeature" class="hide"> <div style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 14px;display: flex;"> <div>Share with others.</div> <div style="margin-left: 20px;color: #358717;" role="alert" class="featureCopy" aria-label="Link Copied!">Link Copied!</div> </div> </div> <div id="popover-content-dwlPDF" class="hide"> <div style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 14px;"> <div>This link downloads the wave summary for the entire release wave and is not limited to a particular feature or product.</div> </div> </div> <div class="jumbotron jumbotron-fluid" style="flex-wrap: wrap;display: flex;"> <div class="container" style="flex: 40%; max-width: 40%; display: flex; flex-direction: column; align-items: flex-start;"> <div class="head"><h1>Dynamics 365 and Microsoft Power Platform</h1></div> <div class="sub-head">Release planner</div> </div> <div class="rightHeader" style="padding-right: 20px;display: flex;flex:50%;justify-content: flex-end;flex-wrap: wrap;align-content: space-around;align-items: center"> <div class="searchBar" style="display:flex"> <div class='searchbartop' style="margin-top:0px;"> <form class="input-group search" style="display:flex;margin-right: 20px;" method="get"> <input type="search" class="txtSearch" role="search" name="q" value="" style="visibility: hidden;width: 0px;padding: 5px;width:230px;" aria-label="search"> <button class="btn btn-default globalSearchButton" type="submit" onClick='setQueryOnSearch(this)' aria-label='submit search' style='visibility:hidden;display:none;'/> </form> </div> <div style="right: 235px;position: absolute;" class="expandSearchIcon"><button class="searchBtn btn btn-default" onClick='expandSearch(this)' title="Search using the feature name." type="button"></button></div> <button class="btn btn-default clearCrossButton" title="clear search" style='position:absolute;opacity:0%;visibility: hidden'type="reset" onClick='clearSearchText(this)' aria-label="clear"/> </div> <div class="whatsNewBtn"><button class="headerButton" type="button" onclick="window.open('https://go.microsoft.com/fwlink/?linkid=2243593','_blank')" title="Learn about the new features of the Release planner."><div class="whatsnewImg" style="margin-top: -2px;"> </div><div class="whatsnewText" style="margin-left: 8px;color:#0742AB;font-weight:600;line-height: 16px;font-size: 10px;">What's new</div></button></div> <div class="feedbackBtn" style="margin-left: 16px;"><button type="button" class="headerButton" onclick="window.open('https://aka.ms/DTP/Readiness/Portal/Feedback','_blank')" title="Provide feedback to Microsoft."><div class="feedbackImg" style="margin-top: -1px;"> </div><div class="feedbackText" style="margin-left: 8px;color:#0742AB;font-weight:600;line-height: 16px;font-size: 10px;">Feedback</div></button></div> <a class="langaugeEarthIcon" style="display:none!important;margin-top: 5px;margin-left: 12px;" href="https://learn.microsoft.com/en-us/locale/?target=https%3A%2F%2Flearn.microsoft.com%2Fen-us%2Fdynamics365%2Frelease-plans%2F" target="_blank"></a> </div> </div> <div class="show-on-mobile"> <div class='mobileSearchBar'> <form class="input-group search" style="display:flex;" method="get"> <input type="search" placeholder="Search..." class="txtSearch" name="q" value="" style="transition:width 1s;height: 60px;background: #F8F9FA;text-indent: 10px;outline: 0;border-bottom: 1px solid #C4C4C4;width:100%;margin-top: 5px;margin-bottom: 5px;" aria-label="search"> <button class="btn btn-default clearCrossButton" style='margin-left: -60px;margin-right: -15px;visibility:hidden'type="reset" onClick='clearSearchText()' aria-label="clear"/> <button class="btn btn-default globalSearchButton" type="submit" onClick='setQueryOnSearch()' style='position: absolute;right: 10px;top: 13px;' aria-label="submit search" title="Search using the feature name."/> </form> </div> </div> <div class="main-section"> <div class="container-fluid"> <div style="display:flex;justify-content: center;"> <div class="row-switch"> <div id="myPlanSwitch" class="switch hidden-item"> <label class="switch-light"> <input id="togglePlans" type="checkbox" onclick="onToggleCheckbox()" tabindex="-1" aria-hidden="true" role="presentation"> <span role="tablist"> <span id="all-plans" tabindex="0" role="tab">All release plans</span> <span class="inactive" id="my-plans" tabindex="0" role="tab" aria-selected="true">My release plans</span> </span> <a></a> </label> </div> </div> </div> <hr class="plan-separator" style="display:none;margin-bottom: 0px"> <div class="row features_window"> <div class="product-family col-lg-3"> <nav class="navbar"> <div class="navbar-header"> <button type="button" id="hamburger" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-label="hamber icon" tabindex="0"> <span class="hamburger-menu-button-open"></span> </button> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <div class="panel-group" id="accordion"></div> <div class="otherPlansContainer" style="margin-top: 20px;"> <div style="font-family:'Segoe UI';font-weight: 600;font-size: 15px;line-height:35px;">Explore other plans:</div> <a class="cloudContainer" target="_blank" href="https://aka.ms/ReleasePlanner/Plans/Industry">Microsoft Cloud for Industry</a> </div> <div class="learnMoreContainer" style="margin-top:35px;display:flex;flex-direction:column;"> <!-- <div class="learnIcon"></div>--> <div style="font-family:'Segoe UI';font-weight: 600;font-size: 15px;line-height:35px;"> Quick links</div> <a class="learnText" target="_blank" href="/availability-reports">View product availability reports</a> <a class="learnText" target="_blank" href="https://aka.ms/ReleasePlanner/Plans/Learn">View plans in Microsoft Learn</a> </div> </div> </nav> <div class="show-on-mobile"> <div class="status-timeline-filter"> <div style = "display: flex;justify-content: space-between;"> <a role="button" class="filter-filled mobile-filter hidden-item close-popover filterPopover" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true" style="margin-left: -60%;" tabindex="0"></a> <a role="button" class="filter-empty mobile-filter close-popover filterPopover" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true" style="margin-left: -60%;" aria-label="Interactive filter" tabindex="0"> <a role="button" class="timeline-group-link timeline-group-l2" onclick="groupPlansByDate()" style="margin-top: 4px;" tabindex="0" title="Group by month."></a> <a role="button" class="timeline-group-link timeline-group-date hidden-item" onclick="groupPlansByL2()" tabindex="0" title="Group by theme."></a> <a role="button" class="shareGroup closeSharePopover share-mobile-filter" aria-label="Share Group" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true" tabindex="0"></a> <a role="button" class="shareGroupDisabled hidden-item share-mobile-filter" aria-label="Share Group Disabled" title="Switch to 'My release plans' to share personalized plans." tabindex="0"></a> </div> </div> </div> </div> <hr class="separator"> <hr class="separator hide-when-not-use" style="margin-top: 10px;"> <div class="f-details col-lg-9" style='margin-bottom: -110px;margin-top: 15px;' role="main"> <div class="show-on-mobile" id="filterDropdown"> <select class="filter--dropdown" aria-label="select area"> <option value="1">Planned</option> <option value="2">Coming soon </option> <option value="3">Try now</option> </select> </div> <div class="list-group list-group--features no-mobile-gutters hidden-item"> <div class="list-group-item list-group-item--title p-v-0 hide-on-mobile-view "> <div class="tablist tablist--features"> <div class="tablist tablist--features" role="tablist" aria-busy="true"> <!--start UL --> <div class="status--filters-1"> <a role="tab" id="tabPlanned" aria-selected="false" onclick="onTabClick(1)" aria-controls="tabPlanned" tabindex="0">Planned</a> <div class="status-filter--desc">All upcoming features included in release plans</div> <hr class="active-filter" aria-hidden="true"> </div> <div class="status--filters-2"> <a role="tab" id="tabComing" aria-selected="false" onclick="onTabClick(2)" aria-controls="tabComing" tabindex="0">Coming soon</a> <div class="status-filter--desc">All upcoming features available next month</div> <hr class="active-filter" aria-hidden="true"> </div> <div class="status--filters-3"> <a role="tab" id="tabNew" aria-selected="true" onclick="onTabClick(3)" aria-controls="tabNew" tabindex="0">Try now</a> <div class="status-filter--desc">All new features recently released to market</div> <hr class="active-filter active" aria-hidden="true"> </div> </div> <div class="status-timeline-filter"> <div class="status-separator" style="margin-left: auto;"> <div class="v-separator"> </div> </div> <div class="containers" id="filterContainer" style="margin-top: -2px;"> <a role="button" class="filter-empty close-popover filterPopover" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true" aria-label="Interactive filter" tabindex="0" aria-expanded="false"></a> <a role="button" class="filter-filled hidden-item close-popover filterPopover" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true" aria-label="Filled filter" tabindex="0"></a> <div id="popover-content-login" class="hide" aria-labelledby="Interactive filter" role="region" style="z-index:1"> <table style="width: 100%;"> <tr> <td> <div id="titleBlocl" style="font-weight: 600;font-size: 14px;">Filter by: <div style="float: right;width: 10px;margin-right: 20px;" aria-label="clear filter" class="clearFilter" role='button' onclick='clearFilterBy()' tabindex="0"></div> </div> </td> <td> <div id="titleBlocl" style="font-weight: 600;font-size: 14px;">Sort by: <div style="float: right;width: 10px;margin-right: 20px;" aria-label="clear sort" class="clearFilter" role='button' onclick='clearSortBy()' tabindex="0"></div> </div> </td> </tr> <tr> <td colspan="2"><hr style="margin-top: 1%;margin-bottom: 1%; width: 100%;"></td> </tr> <tr> <td><p>Status</p></td> <td><p>Availability dates</p></td> </tr> <tr id="bodyBlock1" name="bodyBlock1"> <td id="StatusBox" style="vertical-align: top;" aria-label="Status filter group." role="group"> <div> <input type="checkbox" name="New7" aria-labelledby="New_7" value="New7" id="New_7" role="checkbox"> <label for="New_7">New (Last 7 days) </label><br> <input type="checkbox" name="New30" aria-labelledby="New_30" value="New30" id="New_30" role="checkbox"> <label for="New_30">New (Last 30 days) </label><br> <input type="checkbox" name="Changed7" aria-labelledby="Changed_7" value="Changed7" id="Changed_7" role="checkbox"> <label for="Changed_7">Changed (Last 7 days) </label><br> <input type="checkbox" name="Changed30" aria-labelledby="Changed_30" value="Changed30" id="Changed_30" role="checkbox"> <label for="Changed_30">Changed (Last 30 days) </label> </div> </td> <td id="AvailDateBox" style="vertical-align: top;" aria-label="Availibility dates sort group." role="group"> <div> <input type="checkbox" name="EarlySort" aria-labelledby="Early_Desk" value="Early" class='check' id="Early_Desk" onchange='avalaibilityCheckboxSingle(this)'> <label for="Early_Desk">Early Access </label><br> <input type="checkbox" name="PublicSort" aria-labelledby="Public_Desk" value="Public" class='check' id="Public_Desk" onchange='avalaibilityCheckboxSingle(this)'> <label for="Public_Desk">Public Preview </label><br> <input type="checkbox" name="GASort" aria-labelledby="GA_Desk" value="GA" class='check' id="GA_Desk" onchange='avalaibilityCheckboxSingle(this)'> <label for="GA_Desk">General Availability </label> </div> </td> </tr> <tr> <td colspan="2"><hr style="margin-top: 1%;margin-bottom: 1%; width: 100%;"></td> </tr> <tr> <td colspan="2"><p>Enabled For</p></td> </tr> <tr id="bodyBlock2" name="bodyBlock2"> <td id="ForBox" style="vertical-align: top;" aria-label="Enabled for filter group." role="group"> <div> <input type="checkbox" name="Admins" aria-labelledby="Admins_lab" id="Admins_lab" value="Admins"> <label for="Admins_lab">Admins or makers, automatically </label><br> <input type="checkbox" name="Makers" aria-labelledby="Makers_lab" id="Makers_lab" value="Makers"> <label for="Makers_lab">Users, by admins or makers </label><br> <input type="checkbox" name="Users" aria-labelledby="Users_lab" id="Users_lab" value="Users"> <label for="Users_lab">Users, automatically </label> </div> </td> <td id="sortByBox" style="vertical-align: top;" aria-label="Sort by dates group." role="group"> <div> <input type="checkbox" name="NewOld" aria-labelledby="New_Old" id="New_Old" value="NewOld" class='check1' onchange="orderCheckboxSingle(this)"> <label for="New_Old">Newest to Oldest </label><br> <input type="checkbox" name="OldNew" aria-labelledby="Old_New" id="Old_New" value="OldNew" class='check1' onchange="orderCheckboxSingle(this)"> <label for="Old_New">Oldest to Newest </label><br> </div> </td> </tr> <tr> <td colspan="2"><hr style="margin-top: 1%;margin-bottom: 1%; width: 100%;"></td> </tr> <tr> <td colspan="2"><p>Availability</p></td> </tr> <tr id="bodyBlock3" name="bodyBlock3" aria-label="Availability filter group." role="group"> <td colspan="2"> <input type="checkbox" name="Early" aria-labelledby="Early_filt" id="Early_filt" value="EarlyAccess"> <label for="Early_filt">Early Access </label><br> <input type="checkbox" name="Public" aria-labelledby="Public_filt" id="Public_filt" value="PublicPreview"> <label for="Public_filt">Public Preview </label><br> <input type="checkbox" name="GA" aria-labelledby="GA_filt" id="GA_filt" value="GeneralAvailability"> <label for="GA_filt">General Availability </label> </td> </tr> <tr> <td colspan="2"><hr style="margin-top: 1%;margin-bottom: 1%; width: 100%;"></td> </tr> <tr> <td colspan="2"><p>Release wave</p></td> </tr> <tr id="bodyBlock4" name="bodyBlock4" aria-label="Release wave filter group." role="group"> <td colspan="2"> <input type="checkbox" name="firstWave" aria-labelledby="firstWave_1" id="firstWave_1" value="firstWave"> <label for="firstWave_1" id="firstWave"> firstWave</label><br> <input type="checkbox" name="secondWave" aria-labelledby="secondWave_2" id="secondWave_2" value="SecondWave"> <label for="secondWave_2" id="secondWave">SecondWave</label><br> <input type="checkbox" name="thirdWave" aria-labelledby="thirdWave_3" id="thirdWave_3" value="ThirdWave"> <label for="thirdWave_3" id="thirdWave">ThirdWave</label> </td> </tr> <tr> <td colspan="2"> <div style="float: right;"> <input type="button" class="applyButton" value="Apply" aria-label="Apply button" onclick="filterBoxStateObjectUpdate()"> <input type="button" class="closeButton" value="Close" aria-label="Close button" onclick="closePopover()"> </div> </td> </tr> </table> </div> </div> <div class="status-separator" style="padding-right: 0%;"></div> <div style="margin-top: 2px;"> <a role="button" class="timeline-group-link timeline-group-l2" onclick="groupPlansByDate()" tabindex="0" title="Group by month."></a> <a role="button" class="timeline-group-link timeline-group-date hidden-item" onclick="groupPlansByL2()" tabindex="0" title="Group by theme."></a> </div> <div class="status-separator" style="padding-right: 0%;"></div> <div> <a role="button" class="shareGroup closeSharePopover" aria-label="Share Group" data-toggle="popover" data-container="body" data-placement="bottom" data-html="true" tabindex="0"></a> <a role="button" class="shareGroupDisabled hidden-item" aria-label="Share Group Disabled" title="Switch to 'My release plans' to share personalized plans."></a> <div id="popover-content-sharePlanGroup" class="hide"> <div class="PopupShareMyPlanHead" style="display:flex;align-items: center;"> <div style="flex: auto;font-family: 'Segoe UI';font-style: normal;font-weight: 600;font-size: 14px;"> <p>Share my release plan</p> </div> <div style="flex: auto;margin-top: -5px;" tabindex="-1"> <div class="triggerMessageCop" role="alert" style="display:none; border: none;text-align: end;float: right;" aria-label="Link copied!">Link copied!</div> <div class="triggerMessageDel" role="alert" style="display:none; border: none;text-align: end;float: right;"aria-label="Link has been deleted!">Link has been deleted!</div> </div> </div> <hr style="margin-top: 0px; margin-bottom: 6px" tabindex="-1"> <div class="shareLinkSection" style="display:flex;"> <div style="flex: 90%;"> <p style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 15px;line-height: 20px;color: #0258AD;">Share link</p> <p style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 11px;line-height: 14px;color: #000000">People with the link can view your release plan</p> </div> <div style="flex: 10%;text-align: center;"> <a role="button" class="popupShareLink" aria-label="Share my plan link" onclick="updateisShare(true)" style="margin-left: 5px;" tabindex="0"></a> <p style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 10px;line-height: 10px;color: #0258AD">Share<p> </div> </div> <hr style="margin-top: 10px; margin-bottom: 6px"> <div class="manageLinkSection" style="display:flex;"> <div style="display: inline-block;flex: 90%;"> <p style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 15px;line-height: 20px;color: #0258AD;">Manage link</p> <p style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 11px;line-height: 14px;color: #000000">Click "Delete" to remove access to your release plan</p> </div> <div style="display: inline-block;float:right;flex: 10%;text-align: center;"> <a role="button" class="popupDelectAccessToLink notactive" aria-label="Delete access to my plan link" onclick="updateisShare(false)" style="margin-left: 5px;" tabindex="0"></a> <p style="font-family: 'Segoe UI';font-style: normal;font-weight: 400;font-size: 10px;line-height: 10px;color: #0258AD">Delete<p> </div> </div> <hr style="margin-top: 10px; margin-bottom: 11px"> <div> <input type="button" value="Close" class="sharePopupClose" aria-label="close share my plan" style="float:right;height: 31px;border: 1px solid #0258AD;" onclick="closeShareMyPlan()"/> </div> </div> </div> <div class="status-separator separator-visibility" style="display:none;"> <div class="v-separator"> </div> </div> </div> </div> <!--end of ul--> </div> </div> <div class="searchMessageBar hidden"> <div class='searchedMessage'> <p>Search result for "</p><p class="searchText" style="font-weight: bold;">Leverage</p><p>":</p> </div> <div class="search-close-button" style="margin-right: 27px;"> <input type="button" class="searchClose" value="Close" aria-label="search close"> </div> </div> <div class="plan-group" id="accordion-group"> </div> </div> </div> <!--end of row--> </div><!--end of container--> </div> </div> <script type="text/javascript"> $(document).ready(function(){ //$("#bapi-header").find("#meControl").closest(".bapi-menu").children('.is-menu-link').hide(); $("#bapi-header").find("#meControl").closest(".bapi-menu").append($("#langDrop").children()); //$("#langDrop").removeClass("hidden"); if(langCode.toLocaleLowerCase() === 'fi-fi'){ $(".expandSearchIcon").css("right","265px"); } $("#locale-picker-link").css("display","none"); //Add comment to below line to show the language dropdown //$("#TopList").parent().addClass("hidden"); }); let AppState = { productFamilies: {d365: 'Dynamics 365', d365Apps: 'Dynamics 365 Applications', powerPlatform: 'Power Platform', copilot:'Role-based Copilots'}, productsObj: [], productResults: [], userProductResults:[], featurecategory: [ { id:"CatA" , cat:"A. Enabled for end users automatically" ,value: "Users, automatically", Desc:"This feature includes changes to the user experience for users and is enabled automatically." }, { id:"CatB", cat:"B. Enabled for admins/makers/marketers automatically", value: "Admins, makers, marketers, or analysts, automatically", Desc:"This feature is meant to be used by administrators, makers, or business analysts and is enabled automatically." }, { id:"CatC" ,cat:"C. Enabled by admins/makers/marketers for end users", value: "Users by admins, makers, or analysts", Desc: "This feature must be enabled or configured by administrators, makers, or business analysts to be available for their users." } ], productList: [], snapshotImagePromises: [], selectedProduct: null, userProductList: [], userSnapshots: [], searchedSnapshots:[], searchedProductList:[], urlParams: { rp: {key:'rp', selectedValue:''}, app:{key: 'app', selectedValue:''}, status:{key: 'status', selectedValue:''}, wave:{key:'wave',selectedValue:[]}, availability:{key:'availability',selectedValue:[]}, group:{key:'group',selectedValue:''} }, changeHistory:[], productOverview:[], ActiveWave:[], SkipWave:[] } let filterBoxState = { "FilterBy": [ { "Status":{'New7':false,'New30':false,'Changed7':false,'Changed30':false}, "For":{'Admins':false,'Makers':false,'Users':false}, "Availability":{'Early':false,'Public':false,'GA':false}, "Wave":{} } ], "SortBy":[ { "AvailabilityDates":{'EarlySort':false,'PublicSort':false,'GASort':false}, "order":{'NewOld':false,'OldNew':false} } ] } const TabConst = {planned: 'planned', commingSoon: 'coming-soon', tryNow: 'new', all: 'all'} let ProductFamily = null; var searchFlag = 'true'; const UserId = ""; const sharedLink = ""; var showhideValue = 'false' ; var langCode = window.location.pathname.split('/')[1]; var isRequired = true; //for searchbar position var isRequiredOnBar = true; setSearchedSnapshot(); hideSearchWhenNotInUse(searchFlag.trim()); function clearFilterBy() { let status=['New7','New30','Changed7','Changed30']; let availability =['Early','Public','GA']; let fors = ['Admins','Makers','Users']; let waves=['firstWave','SecondWave','ThirdWave']; status.forEach((item,index)=>{ $("[name='"+item+"']").prop("checked",false); }); availability.forEach((item,index)=>{ $("[name='"+item+"']").prop("checked",false); }); fors.forEach((item,index)=>{ $("[name='"+item+"']").prop("checked",false); }); waves.forEach((item,index)=>{ $("[value='"+item+"']").prop("checked",false); }); } function clearSortBy() { let availabilitySort =['EarlySort','PublicSort','GASort']; let order = ['NewOld','OldNew']; availabilitySort.forEach((item,index)=>{ $("[name='"+item+"']").prop("checked",false); }); order.forEach((item,index)=>{ $("[name='"+item+"']").prop("checked",false); }); } function avalaibilityCheckboxSingle(e) { if ($(e).is(":checked")) $('.check').not(e).prop('checked', false); else $(e).prop("checked", false); } function orderCheckboxSingle(e){ if ($(e).is(":checked")) $('.check1').not(e).prop('checked', false); else $(e).prop("checked", false); } getIsShareValue(); $(document).ready(function () { if(UserId.length === 0){ $("#meControl").css("padding-top","4px"); } showLoader(); $(".filterPopover").each(function(i, obj) { $(this).popover({ html: true, sanitize: false, content: function() { return $('#popover-content-login').html(); } }).on('show.bs.popover',function(e){ getViewName(e); loadFilterObjBoxintoPopover(); }).on('shown.bs.popover', function(e){ var popoverID = $(e.target).attr("aria-describedby"); $("#"+popoverID).find(".clearFilter").first().focus(); if($("#closepopoverdiv").length === 0) $("#"+popoverID).prepend("<div id='closepopoverdiv' onclick='closePopover()' style='left: 0; right: 0; top: 0; bottom: 0; position: fixed;z-index:-1'></div>"); }).on('hidden.bs.popover', function(e){ $(e.target).focus(); }).on('inserted.bs.popover',function(e){ var popoverID = $(e.target).attr("aria-describedby"); $("#"+popoverID).css("position","relative"); }); }); jQuery('.filterPopover').on('inserted.bs.popover', function(e) { getViewName(e); let isMobile = $(e.target).hasClass('mobile-filter'); if(isMobile) $('.clearFilter').append(getClearSvg()); loadFilterObjBoxintoPopover(); }); $('#productOverviewModal').on('hide.bs.modal', () => { $('#productOverviewmodelVideo').attr('src', ''); }); $('#videoModal').on('hide.bs.modal', () => { $('#videoModalWindow').attr('src', ''); }); $(".shareGroup").each(function(i, obj) { $(this).popover({ html: true, sanitize: false, content: function() { return $('#popover-content-sharePlanGroup').html(); } }).on('inserted.bs.popover',function(e){ mobileRenderView(e); closePopover(); }).on('shown.bs.popover', function(e){ var popoverID = $(e.target).attr("aria-describedby"); $("#"+popoverID).find(".popupShareLink").first().focus(); }).on('hidden.bs.popover', function(e){ $(e.target).focus(); }); }); function mobileRenderView(e){ let isMobile = $(e.target).hasClass('share-mobile-filter'); if(isMobile){ $('.popover').css('max-width','95%'); loadMobileHTML(); } } function getViewName(e) { let isMobile = $(e.target).hasClass('mobile-filter'); if(isMobile){ $('.popover').css('max-width','100%'); loadMobileHTML(); } else{ $('.popover').css('max-width','max-content'); } } $(".searchClose").click(function(){ const url = new URL(window.location); url.searchParams.delete('q'); window.location.href = url.href; }); $('#myPlanSwitch').removeClass('hidden-item'); $('.timeline-group-l2').append(getL2TimelineStatusSvg()); $('.timeline-group-date').append(getDateTimelineStatusSvg()); $('.filter-empty').append(getEmptyFilterSvg()); $('.filter-filled').append(getFilledFilterSvg()); $('.clearFilter').append(getClearSvg()); $('.shareGroup').append(getShareSvg()); $('.shareGroupDisabled').append(getDisabledShareSvg()); $('.popupShareLink').append(getCopySvg()); $('.popupDelectAccessToLink').append(getDeleteSvg()); $('.clearCrossButton').append(getCrossSvg()); $('.searchBtn').append(newMagnifyingGlassSvg()); $('.globalSearchButton').append(getSearchIcon()); $('.warningIcon').append(getExclamationImpSvg()); $('.exclamationsvg').append(getExclamationSvg()); $(".langaugeEarthIcon").append(languageEarthLightSvg()); $(".learnIcon").append(learnMicrosoftBookSvg()); let minWidth = (($("#all-plans").text().length)+($("#all-plans").text().length))*8.5; let maxWidth = (($("#my-plans").text().length)+($("#my-plans").text().length))*9; if( langCode.toLocaleLowerCase() === 'ja-jp'){ minWidth = minWidth*2+20; maxWidth = maxWidth*2; } $("#myPlanSwitch").css("min-width",minWidth).css("max-width",maxWidth); // Handle Toggle sign-in dropdown conflict due to bootstrap.js $('#meControl').on("click", (event)=>{ if($(event.currentTarget).hasClass('open')){ $(event.currentTarget).removeClass('open'); } else{ $(event.currentTarget).addClass('open'); } }); $('#languageSelector').on("click", (event)=>{ $(event.currentTarget).children(".dropdown-menu").css("left","55px"); if($(event.currentTarget).hasClass('open')){ $(event.currentTarget).removeClass('open'); } else $(event.currentTarget).addClass('open'); }); $('#filterDropdown').on("change", function(){ var filterValue = parseInt($('#filterDropdown option:selected').val()); updateStatusState(filterValue === 1 ? TabConst.planned : filterValue === 2 ? TabConst.commingSoon : filterValue === 3 ? TabConst.tryNow : TabConst.all); let isgrpChildrenSelected = $(".panel-collapse").find('li').hasClass('active'); if(isMyReleasePlanSelected()){ if(isgrpChildrenSelected) renderReleasePlanData(filterValue,true); else renderUserReleasePlanData(filterValue); } else renderReleasePlanData(filterValue,true); }); ProductFamily = new Object(); ProductFamily.id ="bb2f17ac-715d-e911-a968-000d3a4e32b5"; ProductFamily.name = "Dynamics 365 Sales"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Sales"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Customer Experience Platform"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 5; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="17d1affa-8c85-ee11-8179-00224827e88b"; ProductFamily.name = "Microsoft 365 Copilot for Sales"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Microsoft 365 Copilot for Sales"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Customer Experience Platform"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 20; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="03283a34-cab7-e911-a963-000d3a4f3883"; ProductFamily.name = "Dynamics 365 Commerce"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Commerce"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Customer Experience Platform"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 25; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="1480bbd4-7256-ee11-be6f-000d3a574715"; ProductFamily.name = "Dynamics 365 Customer Insights - Data"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Customer Insights - Data"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Customer Experience Platform"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 40; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="940fa520-7756-ee11-be6f-000d3a574715"; ProductFamily.name = "Dynamics 365 Customer Insights - Journeys"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Customer Insights - Journeys"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Customer Experience Platform"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 45; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="bf2f17ac-715d-e911-a968-000d3a4e32b5"; ProductFamily.name = "Dynamics 365 Customer Service"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Customer Service"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Digital Contact Center"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 50; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="a2f88dff-d15b-ee11-be6f-000d3a5744ca"; ProductFamily.name = "Microsoft 365 Copilot for Service"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Microsoft 365 Copilot for Service"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Digital Contact Center"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 55; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="656ef9c3-c601-ef11-a1fd-6045bdfe3ffa"; ProductFamily.name = "Dynamics 365 Contact Center"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Contact Center"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Digital Contact Center"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 57; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="c12f17ac-715d-e911-a968-000d3a4e32b5"; ProductFamily.name = "Dynamics 365 Field Service"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Field Service"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Physical Operations Cloud"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 60; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="e30c6971-52c8-e911-a968-000d3a4f3883"; ProductFamily.name = "Finance and Operations cross-app capabilities"; ProductFamily.parentproductid ="Physical Operations Cloud"; ProductFamily.shortname = "Finance and Operations cross-app"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Physical Operations Cloud\\Operations"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 65; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="50a470c0-d3b7-e911-a992-000d3a4f3343"; ProductFamily.name = "Dynamics 365 Finance"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Finance"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Service-Centric ERP"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 80; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="56ba60c1-005c-ee11-be6f-000d3a4e5de0"; ProductFamily.name = "Microsoft 365 Copilot for Finance"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Microsoft 365 Copilot for Finance"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Service-Centric ERP"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 83; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="1304b79a-d3b7-e911-a992-000d3a4f3343"; ProductFamily.name = "Dynamics 365 Project Operations"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Project Operations"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Service-Centric ERP"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 85; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="92fdd980-d3b7-e911-a992-000d3a4f3343"; ProductFamily.name = "Dynamics 365 Human Resources"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Human Resources"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Service-Centric ERP"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 90; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="e1a941d5-d3b7-e911-a992-000d3a4f3343"; ProductFamily.name = "Dynamics 365 Supply Chain Management"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Supply Chain Management"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Supply Chain"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 95; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="c92f17ac-715d-e911-a968-000d3a4e32b5"; ProductFamily.name = "Dynamics 365 Business Central"; ProductFamily.parentproductid ="Dynamics 365"; ProductFamily.shortname = "Business Central"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Dynamics 365\\Small & Medium Businesses"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 109; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="e72f17ac-715d-e911-a968-000d3a4e32b5"; ProductFamily.name = "Power Apps"; ProductFamily.parentproductid ="Power Platform"; ProductFamily.shortname = "Power Apps"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Power Platform\\Power Apps"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 111; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="dbedfa94-1517-ea11-a811-000d3a8f010c"; ProductFamily.name = "Microsoft Power Platform governance and administration"; ProductFamily.parentproductid ="Power Platform"; ProductFamily.shortname = "Governance and administration"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Power Platform\\Power Apps"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 114; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="1197f7de-0a44-ec11-8c62-00224829b77f"; ProductFamily.name = "Power Pages"; ProductFamily.parentproductid ="Power Platform"; ProductFamily.shortname = "Power Pages"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Power Platform\\Power Pages"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 117; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="a0e02858-50a4-ea11-a812-000d3a8faea9"; ProductFamily.name = "Microsoft Dataverse"; ProductFamily.parentproductid ="Digital Transformation Platform"; ProductFamily.shortname = "Microsoft Dataverse"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Power Platform"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 119; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="e92f17ac-715d-e911-a968-000d3a4e32b5"; ProductFamily.name = "Power Automate"; ProductFamily.parentproductid ="Power Platform"; ProductFamily.shortname = "Power Automate"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Power Platform\\Power Automate"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 121; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="eb2f17ac-715d-e911-a968-000d3a4e32b5"; ProductFamily.name = "AI Builder"; ProductFamily.parentproductid ="Power Platform"; ProductFamily.shortname = "AI Builder"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Power Platform\\Power Automate"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 122; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="1019ec3d-1dc5-e911-a969-000d3a4f36ce"; ProductFamily.name = "Microsoft Copilot Studio"; ProductFamily.parentproductid ="Power Platform"; ProductFamily.shortname = "Microsoft Copilot Studio"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Power Platform\\Microsoft Copilot Studio"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 131; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="69a93e6d-a5da-ea11-a813-000d3a563be2"; ProductFamily.name = "Microsoft Cloud for Manufacturing"; ProductFamily.parentproductid ="Solutions"; ProductFamily.shortname = "Manufacturing"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Solutions\\Microsoft Cloud for <Industry>"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 303; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="1723e8fc-6cec-e911-a812-000d3a4f1ebb"; ProductFamily.name = "Microsoft Cloud for Retail"; ProductFamily.parentproductid ="Solutions"; ProductFamily.shortname = "Retail"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Solutions\\Microsoft Cloud for <Industry>"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 305; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="5cc1f506-78bd-eb11-8236-000d3a100d4b"; ProductFamily.name = "Microsoft Cloud for Sustainability"; ProductFamily.parentproductid ="Solutions"; ProductFamily.shortname = "Sustainability"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Solutions\\Microsoft Cloud for <Industry>"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 306; AppState.productList.push(ProductFamily); ProductFamily = new Object(); ProductFamily.id ="4cec6514-c13d-ed11-9db0-00224827e905"; ProductFamily.name = "Microsoft Cloud for Sovereignty"; ProductFamily.parentproductid ="Solutions"; ProductFamily.shortname = "Sovereignty"; ProductFamily.hierarchy = getProductFamilyName("Digital Transformation Platform\\Solutions\\Microsoft Cloud for <Industry>"); ProductFamily.isAddinProduct = "false"; ProductFamily.order = 307; AppState.productList.push(ProductFamily); resetSearchedProductList(); getUrlParams(); setToggleCheckboxOnLoad(); //checkLanguageLocale(); const successCallback = ()=>{ hideLoader(); renderProducts(isMyReleasePlanSelected()); } setUserSnapshots(successCallback, successCallback); function loadFilterObjBoxintoPopover() { let filterBox = filterBoxState.FilterBy[0]; let sortBox = filterBoxState.SortBy[0]; let FilterAvail = filterBoxState.FilterBy[0].Availability; let FilterFor = filterBoxState.FilterBy[0].For; let FilterStatus = filterBoxState.FilterBy[0].Status; let SortAvail = filterBoxState.SortBy[0].AvailabilityDates; let SortOrder = filterBoxState.SortBy[0].order; let FilterWave = filterBoxState.FilterBy[0].Wave; let waveCount=AppState.ActiveWave.length; if(waveCount==2){ $("#bodyBlock4").find("input[value='firstWave']").attr('name',AppState.ActiveWave[0].shortName); $("#bodyBlock4").find("input[value='SecondWave']").attr('name',AppState.ActiveWave[1].shortName); } else if(waveCount==1){ $("#bodyBlock4").find("input[value='firstWave']").attr('name',AppState.ActiveWave[0].shortName); } else{ $("#bodyBlock4").find("input[value='firstWave']").attr('name',AppState.ActiveWave[0].shortName); $("#bodyBlock4").find("input[value='SecondWave']").attr('name',AppState.ActiveWave[1].shortName); $("#bodyBlock4").find("input[value='ThirdWave']").attr('name',AppState.ActiveWave[2].shortName); } if(jQuery.isEmptyObject(filterBoxState.FilterBy[0].Wave)){ if(waveCount==2){ filterBoxState.FilterBy[0].Wave[AppState.ActiveWave[0].shortName]=false; filterBoxState.FilterBy[0].Wave[AppState.ActiveWave[1].shortName]=false; } else if(waveCount==1){ filterBoxState.FilterBy[0].Wave[AppState.ActiveWave[0].shortName]=false; } else{ filterBoxState.FilterBy[0].Wave[AppState.ActiveWave[0].shortName]=false; filterBoxState.FilterBy[0].Wave[AppState.ActiveWave[1].shortName]=false; filterBoxState.FilterBy[0].Wave[AppState.ActiveWave[2].shortName]=false; } } $.each(FilterAvail,function(key,value){ $("[name='"+key+"']").prop("checked",value); }); $.each(FilterFor,function(key,value){ $("[name='"+key+"']").prop("checked",value); }); $.each(FilterStatus,function(key,value){ $("[name='"+key+"']").prop("checked",value); }); $.each(SortAvail,function(key,value){ $("[name='"+key+"']").prop("checked",value); }); $.each(SortOrder,function(key,value){ $("[name='"+key+"']").prop("checked",value); }); $.each(FilterWave,function(key,value){ $("[name='"+key+"']").prop("checked",value); }); if(waveCount === 2){ $("#firstWave").text(AppState.ActiveWave[0].FullName); $("#secondWave").text(AppState.ActiveWave[1].FullName); $("#thirdWave").css("display","none"); $("#bodyBlock4").find("input[value='ThirdWave']").css("display","none"); } else if(waveCount === 1){ $("#firstWave").text(AppState.ActiveWave[0].FullName); $("#secondWave").css("display","none"); $("#bodyBlock4").find("input[value='SecondWave']").css("display","none"); $("#thirdWave").css("display","none"); $("#bodyBlock4").find("input[value='ThirdWave']").css("display","none"); } else{ $("#firstWave").text(AppState.ActiveWave[0].FullName); $("#secondWave").text(AppState.ActiveWave[1].FullName); $("#thirdWave").text(AppState.ActiveWave[2].FullName); } } var button = document.getElementById('hamburger'), span = button.getElementsByTagName('span')[0]; button.onclick = function() { span.classList.toggle('hamburger-menu-button-close'); if($("#hamburger").children().hasClass('hamburger-menu-button-close')){ //$(button).css("box-shadow","inset 0px 4px 4px rgba(0, 0, 0, 0.25)"); //comment to hide shadow $("#hamburger").children().css("display",""); } else{ $(button).css("box-shadow","initial"); } }; // close hamburger menu after click a $('.panel-body li a').on("click", function(){ if($("#hamburger.navbar-toggle").css("display")!='none'){ $('#hamburger').click(); } }); $('.filter--dropdown').on('change', function() { let val = this.value; //planned, Coming soon, Try Now dropdownValueOnLoad(val); }); }); showLoader(); if(urlSearchParameter()) { let url = new URL(window.location); $(".txtSearch").val(url.searchParams.get('q')); $(".searchText").text(url.searchParams.get('q')); if(localStorage.getItem('key') !== null){ let searchURL = $(location).attr('href')+'&'+localStorage.getItem('key'); localStorage.clear(); $(location).attr('href',searchURL); } } else{ let url = new URL(window.location); if(sessionStorage.getItem('key') !== null){ let searchURL = $(location).attr('href')+'&'+sessionStorage.getItem('key'); sessionStorage.clear(); $(location).attr('href',searchURL); } } hideLoader(); function closePopover(){ $(".close-popover").popover('hide'); jQuery('.filterPopover').on('hidden.bs.popover', function (e) { e.preventDefault(); $(e.target).data("bs.popover").inState.click = false; }); } function registerAccordionExpandCollapse(){ // Add down icon for collapse element which is open by default $(".panel-collapse.in").each(function () { if(!$(this).siblings(".panel-heading").find(".glyphicon").hasClass('glyphicon-trash')) $(this).siblings(".panel-heading").find(".glyphicon").addClass("glyphicon-chevron-up").removeClass("glyphicon-chevron-down"); }); // Toggle up down icon on show hide of collapse element $(".panel-collapse").on('show.bs.collapse', function () { if(!$(this).find('.glyphicon').hasClass('glyphicon-trash')) $(this).parent().find(".glyphicon").removeClass("glyphicon-chevron-down").addClass("glyphicon-chevron-up"); }).on('hide.bs.collapse', function () { if(!$(this).find('.glyphicon').hasClass('glyphicon-trash')) $(this).parent().find(".glyphicon").removeClass("glyphicon-chevron-up").addClass("glyphicon-chevron-down"); }); } function getUrlParams(){ const url = new URL(window.location); let val = url.hash.replace('#',''); var xa = url.hash.replace('#','') var ss = xa.concat('&'+url.search.replace('?','')); var newURL = url.origin + url.pathname + '?' + ss; const updatedUrl = new URL(newURL); updatedUrl.pathname = url.pathname; if(updatedUrl.searchParams.get('rp') === 'my-plans'){ AppState.urlParams.rp.selectedValue = updatedUrl.searchParams.get(AppState.urlParams.rp.key); AppState.urlParams.app.selectedValue = updatedUrl.searchParams.get(AppState.urlParams.app.key); AppState.urlParams.status.selectedValue = updatedUrl.searchParams.get(AppState.urlParams.status.key); } else{ AppState.urlParams.rp.selectedValue = url.searchParams.get(AppState.urlParams.rp.key); AppState.urlParams.app.selectedValue = url.searchParams.get(AppState.urlParams.app.key); AppState.urlParams.status.selectedValue = url.searchParams.get(AppState.urlParams.status.key); } } function expandProductAccordion(myPlan=false){ let targetProductElement=''; let selectedProduct=''; let targetElement = $('.panel-group .panel .collapse').eq(1); if(myPlan) { targetProductElement = $('.panel-group .panel .panel-title a').first(); selectedProduct = AppState.urlParams.app.selectedValue; } else { targetProductElement = $(targetElement.find('.panel-body ul li').eq(0).find('a')); selectedProduct = AppState.urlParams.app.selectedValue; if(selectedProduct && !myPlan){ let selecteProductItem = AppState.productList.find(x=>(x.shortname || x.name).toLowerCase() === selectedProduct.toLowerCase()); if(selecteProductItem){ // set product passed from url/state targetProductElement = $('.panel-group .panel .collapse').find(`a[data-name="${selecteProductItem.shortname || selecteProductItem.name}"]`); targetElement = targetProductElement.closest('.panel-group .panel .collapse'); } if(!targetProductElement || targetProductElement.length === 0){ // switch to default product targetElement = $('.panel-group .panel .collapse').first(); targetProductElement = $(targetElement.find('.panel-body ul li').eq(0).find('a')); } } } let productname = targetProductElement.attr('data-name'); if(selectedProduct != productname){ updateProductState(productname); } //if(myPlan) updateProductState(selectedProduct); targetElement.addClass('in'); targetElement.siblings(".panel-heading").find(".glyphicon").addClass("glyphicon-chevron-up").removeClass("glyphicon-chevron-down"); if(myPlan){ userSetTabSelection(); } else{ //RenderingData for the first product by default productClick(targetProductElement); } } function renderProduct(prod,index,products, isMyPlan, showhideCopilotAppsValue){ var row = ""; var ProductByCategory; if (prod == "Role-based Copilots" && isMyPlan && showhideCopilotAppsValue == "false") { prod = "Dynamics 365"; } if (showhideCopilotAppsValue == "true") { if (prod == "Dynamics 365" || prod == "Power Platform") { ProductByCategory = products.filter(x => (x.hierarchy == prod)); } else { ProductByCategory = products.filter(x => x.hierarchy == "Role-based Copilots"); } } else { if (prod == "Dynamics 365") { ProductByCategory = products.filter(x => (x.hierarchy == prod || x.hierarchy == "Role-based Copilots")); } else { ProductByCategory = products.filter(x => (x.hierarchy == prod)); } } var functionVariable=''; if(AppState.urlParams.rp.selectedValue === 'my-plans') functionVariable=true; var category = $(`<div class="panel panel-default"><div class="panel-heading" onclick="${functionVariable ===true?"userProductClick(this)":''}"><h4 class="panel-title"><a data-toggle="collapse" role="button" data-name="${prod}" data-parent="#accordion" href="#collapse${index + 1}">${prod}<span class="glyphicon glyphicon-chevron-down"></span></a></h4></div><div id="collapse${index + 1}" role="application" class="panel-collapse collapse"><div class="panel-body"><ul></ul></div></div></div>`); $('#accordion').append(category); for (var item = 0; item < ProductByCategory.length; item++){ let displayName = ProductByCategory[item].shortname || ProductByCategory[item].name; row = $(`<li><a id="${ProductByCategory[item].id}" data-name="${displayName}" class="${ProductByCategory[item].isAddinProduct === "true" ? 'addin' : ''}" onclick="onProductClick(this,event)" href="#">${displayName}</a></li>`) $(`#collapse${index+1} .panel-body ul`).append(row); } } function onProductClick(element,e){ e.preventDefault(); let parentProd = 'Microsoft '+$(element).closest(".panel-collapse").siblings().text()+' - Release Plans'; $("head").children('title').text(parentProd); const currentState = history.state || {}; $('#accordion-group').html(''); const url = new URL(window.location); url.searchParams.delete('planID'); history.replaceState(currentState, '', url); updateProductState($(element).attr('data-name')); productClick(element); } function onTabProductClick(element){ //updateProductState($(element).attr('data-name')); userProductClick(element); } function productClick(element){ let parentProd = 'Microsoft '+$(element).closest(".panel-collapse").siblings().text()+' - Release Plans'; $("head").children('title').text(parentProd); AppState.productResults = []; AppState.selectedProduct = $(element).attr('id'); $('li.active').removeClass('active'); if(!$(element).hasClass('navigationProduct')) $('div.active').removeClass('active'); $(element).parent().addClass('active'); getChangeHistoryContent(AppState.selectedProduct); //getProductOverview(AppState.selectedProduct); setCarouselImage(AppState.selectedProduct); hideLoader(); setTabSelection(element); } function setTabSelection(element=''){ let selectedTab = 4; if(showhideValue == "true"){ selectedTab = 4 } else{ selectedTab = 1; } if(AppState.urlParams.status.selectedValue === TabConst.commingSoon){ selectedTab = 2; } else if(AppState.urlParams.status.selectedValue === TabConst.tryNow){ selectedTab = 3; } else if(AppState.urlParams.status.selectedValue === TabConst.planned){ selectedTab = 1; } else if(AppState.urlParams.status.selectedValue === TabConst.all){ selectedTab = 4; } $('#filterDropdown select').val(selectedTab); renderReleasePlanData(selectedTab,element); } function onTabClick(filterValue){ const currentState = history.state || {}; const url = new URL(window.location); url.searchParams.delete('planID'); history.replaceState(currentState, '', url); $('#filterDropdown select').val(filterValue).change(); } function groupPlansByL2(){ $('.timeline-group-l2').removeClass('hidden-item'); $('.timeline-group-date').addClass('hidden-item'); AppState.urlParams.group.selectedValue='theme'; updateHistoryState(AppState.urlParams.group.key, AppState.urlParams.group.selectedValue); groupPlans(); } function groupPlansByDate(){ $('.timeline-group-l2').addClass('hidden-item'); $('.timeline-group-date').removeClass('hidden-item'); AppState.urlParams.group.selectedValue='date'; updateHistoryState(AppState.urlParams.group.key, AppState.urlParams.group.selectedValue); groupPlans(); } function groupPlans(){ var filterValue = parseInt($('#filterDropdown option:selected').val()); if(isMyReleasePlanSelected()) renderUserReleasePlanData(filterValue); else renderReleasePlanData(filterValue,true); AppState.urlParams.group.selectedValue='theme'; } function renderReleasePlanData(filterValue=1,element='') { // var langCode = window.location.pathname.split('/')[1]; $('.active-filter.active').removeClass('active'); $(`.status--filters-${filterValue}`).find('.active-filter').addClass('active'); $(".tablist--features").find('[role="tab"]').attr('aria-selected','false'); $(`.status--filters-${filterValue}`).find('[role="tab"]').attr('aria-selected','true'); if((element !== '' || element === true) && !$('a[name='+element.id+']').parent().hasClass('panel-title')) $('#accordion-group').html(''); if(!AppState.selectedProduct){ setNoResultMessage($('#accordion-group')); return; } if(AppState.productResults.length === 0){ showLoader(); let url = `${document.location.origin}/releaseplanner-json/?productId=${AppState.selectedProduct}&langCode=${langCode}`; $.getJSON(url, function (data) { hideLoader(); if (data.results.length > 0) { data.results.forEach(element => { let featureObj = { EarlyAccessDate: element.EarlyAccessDate, PublicPreviewDate: element.PublicPreviewDate, GADate: element.GADate, FeatureName: element.FeatureName, BusinessValue: element.BusinessValue, GeographicAreasDetails:element.GeographicAreasDetails, ProductArea: element.ProductArea, EnabledFor: element.EnabledFor, ReleaseWaveName: element.ReleaseWaveName, ReleaseWaveID: element.ReleaseWaveId, GAReleaseWaveName: element.GAReleaseWaveName, GAReleaseWaveId: element.GAReleaseWaveId, GAIsActiveWave:element.GAIsActiveWave, GAIsSyncenable:element.GAIsSyncenable, ReleasePlanID:element.ReleasePlanID,Product: element.Product, ParentProductId: element.ParentProductId,ProductHierarchyPath:element.ProductHierarchyPath,ArticlePath:element.ArticlePath, ParentProductName: element.ParentProductName, LearnMoreLink: element.LearnMore,OverviewVideoLink: element.OverviewVideo,BlogLink: element.BlogURL, SegmentPath: element.SegmentPath,GASegmentPath:element.GASegmentPath, FolderName: element.FolderName,GAFolderName:element.GAFolderName, GitCommitDate: element.GitCommitDate, SnapshotId: element.SnapshotId, DocsUrl: element.DocsUrl, GADateValue: element.GADateValue, EADateValue: element.EADateValue, PPDateValue: element.PPDateValue, GAStatus: element.GAStatus, PPStatus: element.PPStatus, EAStatus: element.EAStatus, TargetReleaseDate: new Date(element.EarlyAccessDate || element.PublicPreviewDate || element.GADate), FirstGitHubPushDate: element.FirstGitHubPushDate, FeatureDetails: element.FeatureDetails, FeatureType: element.FeatureType, AiContribution: element.AiContribution, overviewAicontribution: element.overviewAicontribution, l2Aicontribution: element.l2Aicontribution, FeatureCategory: element.FeatureCategory, ProductAssociatedFolder: element.ProductAssociatedFolder, Milestone:{name:'', dateValue:'', date: null, groupValue:'', localeName:''} } AppState.productResults.push(featureObj); }); verifyAndRenderSnapshots(AppState.productResults, filterValue, element); } else { setNoResultMessage($('#accordion-group')); } }) .fail(function(error) { PlannedCount = 0; ComingSoonCount = 0; TryNowCount = 0; AllCount = 0; setCount(); hideLoader(); setNoResultMessage($('#accordion-group')); console.log(error); }); } else{ verifyAndRenderSnapshots(AppState.productResults, filterValue, element); } } function verifyAndRenderSnapshots(results, filterValue, element){ let filteredSnapshots = []; let isMyReleasePlan = isMyReleasePlanSelected(); if(isMyReleasePlan){ $('.searchMessageBar').addClass('hidden'); results.forEach(snapshot => { let snapshotRecord = AppState.userSnapshots.find(item=>item.SnapshotId === snapshot.SnapshotId); if(snapshotRecord){ filteredSnapshots = filterSnapshot(snapshot,filteredSnapshots,filterValue); } }); if(filteredSnapshots.length !== 0){ if(urlSearchParameter()){ $('.searchMessageBar').removeClass('hidden'); let filteredSearchedSnapshots = filteredSnapshots; filteredSnapshots = []; filteredSearchedSnapshots.forEach(snapshot => { let snapshotRecord = AppState.searchedSnapshots.find(item=>item.SnapshotId === snapshot.SnapshotId); if(snapshotRecord){ filteredSnapshots = filterSnapshot(snapshot,filteredSnapshots,filterValue); } }); } if(filteredSnapshots.length === 0 && urlSearchParameter()) //search keyword is not present in My release plans { //setNoResultMessage($('#accordion-group')); $('.list-group--features').removeClass('hidden-item'); PlannedCount = 0; ComingSoonCount = 0; TryNowCount = 0; AllCount = 0; setCount(); $('#accordion-group').html(''); $('#accordion-group').append($(`<div class="no-result"></div>`)); $('#accordion-group').find('.no-result').append(getNoResultSvg()); $('#accordion-group').find('.no-result').append($('<div class="no-result-header"><p>UI_Strings.noresult</p></div>')); const noProductsMessage = UI_Strings.noprodmessage; $('#accordion-group').find('.no-result').append(`<div class="no-product-message"><p>${noProductsMessage}</p><div>`); let noSearchedResult = "<div class='no-product-message'>"+UI_Strings.noprodClick+"<b>"+UI_Strings.noprodClose+"</b>"+ UI_Strings.noprodClose2+"<div>"; $('#accordion-group').find('.no-product-message').append(noSearchedResult); let valueOfDropdown= $(".filter--dropdown option:selected").val(); //dropdown value dropdownValueOnLoad(valueOfDropdown); return; } else{ let isChildrenSelected = $(".panel-collapse").find('li').hasClass('active'); if((element.id === '' || element === true) && !isChildrenSelected) showSnapshotsOfGroupProduct(filteredSnapshots, filterValue); else{ if(!$(element).hasClass('navigationProduct')) showSnapshots(filteredSnapshots, filterValue); else showSnapshotsAsChildren(filteredSnapshots, filterValue); } } } else showSnapshots(filteredSnapshots, filterValue); } else{ if(urlSearchParameter()) { $('.searchMessageBar').removeClass('hidden'); results.forEach(snapshot => { let snapshotRecord = AppState.searchedSnapshots.find(item=>item.SnapshotId === snapshot.SnapshotId); if(snapshotRecord){ filteredSnapshots = filterSnapshot(snapshot,filteredSnapshots,filterValue); } }); } else{ $('.searchMessageBar').addClass('hidden'); results.forEach(item =>{ filteredSnapshots = filterSnapshot(item,filteredSnapshots,filterValue); }); } showSnapshots(filteredSnapshots, filterValue); } PlannedCount = countSnapshots(results, 1); ComingSoonCount = countSnapshots(results, 2); TryNowCount = countSnapshots(results, 3); AllCount = countSnapshots(results, 4); setCount(); let valueOfDropdown= $(".filter--dropdown option:selected").val(); //dropdown value dropdownValueOnLoad(valueOfDropdown); dwlWavePopover(); } function filterSnapshot(item,filteredSnapshots,filterValue) { if (filterValue === 3) { if (item.PPStatus === "Shipped" || item.GAStatus === "Shipped") { item.Milestone = getLastMilestoneDateValue(item); filteredSnapshots = filterCheck(item, filteredSnapshots, filterValue); } } else { item.Milestone = getNextMilestoneDateValue(item, filterValue); filteredSnapshots = filterCheck(item, filteredSnapshots, filterValue); } return filteredSnapshots; } function setCount() { $(".status--filters-1").children('div').replaceWith("<div class='status-filter--desc'><b style='font-weight: 600;'>"+PlannedCount+"</b> upcoming features included in release plans</div>"); $(".status--filters-2").children('div').replaceWith("<div class='status-filter--desc'><b style='font-weight: 600;'>"+ComingSoonCount+"</b> upcoming features available this month</div>"); $(".status--filters-3").children('div').replaceWith("<div class='status-filter--desc'><b style='font-weight: 600;'>"+TryNowCount+"</b> new features recently released to market</div>"); $(".status--filters-4").children('div').replaceWith("<div class='status-filter--desc'><b style='font-weight: 600;'>"+AllCount+"</b> features included in release plans</div>"); } function setToggleCheckboxOnLoad(){ let planCheckbox = $('#togglePlans'); if(AppState.urlParams.rp.selectedValue === 'my-plans'){ planCheckbox.prop("checked", true); $(".shareGroup").removeClass('hidden-item'); $(".shareGroupDisabled").addClass('hidden-item'); $('#my-plans').attr("aria-selected","true"); $('#all-plans').attr("aria-selected","false"); } else{ planCheckbox.prop("checked", false); $(".shareGroup").addClass('hidden-item'); $(".shareGroupDisabled").removeClass('hidden-item'); $('#all-plans').attr("aria-selected","true"); $('#my-plans').attr("aria-selected","false"); } } function onToggleCheckbox(){ closePopover(); closeShareMyPlan(); let planCheckbox = $('#togglePlans'); planCheckbox.attr("checked", planCheckbox.prop("checked")); let isMyPlan = isMyReleasePlanSelected(); updatePlanState(isMyPlan); if(isMyPlan) updateProductState(AppState.productsObj.first()); const userSnapshotCallback = ()=>{ if(isMyPlan){ $('#all-plans').addClass('inactive'); $('#my-plans').removeClass('inactive'); $(".shareGroup").removeClass('hidden-item'); $(".shareGroupDisabled").addClass('hidden-item'); AppState.userProductResults = []; AppState.selectedProduct=''; renderProducts(true); $('#my-plans').attr("aria-selected","true"); $('#all-plans').attr("aria-selected","false"); } else{ $('#my-plans').addClass('inactive'); $('#all-plans').attr("aria-selected","true"); $('#my-plans').attr("aria-selected","false"); $('#all-plans').removeClass('inactive'); $(".shareGroup").addClass('hidden-item'); $(".shareGroupDisabled").removeClass('hidden-item'); hideSearchWhenNotInUse(searchFlag.trim()); //always show searchbar renderProducts(false); } } showLoader(); setUserSnapshots(()=>{ hideLoader(); userSnapshotCallback(); }, ()=>{ hideLoader(); userSnapshotCallback(); }); } function renderProducts(renderMyPlans){ if(renderMyPlans){ if(urlSearchParameter()){ let filteredSearch=[]; AppState.searchedProductList.forEach(s=>{ if(AppState.userProductList.find(e=>e.id === s.id)) filteredSearch.push(AppState.userProductList.find(e=>e.id === s.id)); }); renderProductAccordion(filteredSearch,true); } else{ AppState.userProductList = AppState.userProductList.sort((x, y)=>{return (x.order - y.order)}); renderProductAccordion(AppState.userProductList,true); } } else { if(urlSearchParameter()) renderProductAccordion(AppState.searchedProductList); else renderProductAccordion(AppState.productList); } } function renderProductAccordion(products,isMyPlan=false){ AppState.productsObj = []; var showhideCopilotAppsValue = 'false'; $('#accordion').empty(); if(products && products.length > 0){ if (showhideCopilotAppsValue == "true") { products.forEach(item=>{ if(!AppState.productsObj.includes(item.hierarchy) && (item.hierarchy.indexOf(AppState.productFamilies.d365) !== -1 || item.hierarchy.indexOf(AppState.productFamilies.d365Apps) !== -1 || item.hierarchy.indexOf(AppState.productFamilies.copilot) !== -1 || item.hierarchy.indexOf(AppState.productFamilies.powerPlatform) !== -1 )) { AppState.productsObj.push(item.hierarchy); } }); } else { products.forEach(item=>{ if(!AppState.productsObj.includes(item.hierarchy) && (item.hierarchy.indexOf(AppState.productFamilies.d365) !== -1 || item.hierarchy.indexOf(AppState.productFamilies.d365Apps) !== -1 || item.hierarchy.indexOf(AppState.productFamilies.powerPlatform) !== -1 )) { AppState.productsObj.push(item.hierarchy); } }); if(isMyPlan){ products.forEach(item=>{ if(!AppState.productsObj.includes(item.hierarchy) && item.hierarchy.indexOf(AppState.productFamilies.copilot) !== -1) { AppState.productsObj.push(item.hierarchy); } }); } } } AppState.productsObj.sort(); if(isMyPlan){ $("#accordion-group").html(''); let selectedProductGroup = AppState.productsObj.find(x=>(x === AppState.urlParams.app.selectedValue)); for (var i = 0; i < AppState.productsObj.length; i++) { if(AppState.productsObj[i] == AppState.productFamilies.copilot && showhideCopilotAppsValue == "false") { i++; } renderProduct(AppState.productsObj[i], i, products, isMyPlan, showhideCopilotAppsValue); } $("#accordion div:first-child").children('.panel-heading').addClass('active'); expandProductAccordion(isMyPlan); } else{ for (var i = 0; i < AppState.productsObj.length; i++) { renderProduct(AppState.productsObj[i], i, products, isMyPlan, showhideCopilotAppsValue); } expandProductAccordion(); } registerAccordionExpandCollapse(); } function showSnapshots(snapshots, filterValue){ if (snapshots.length == 0) { setNoResultMessage($('#accordion-group')); } $('.list-group--features').removeClass('hidden-item'); $('.product-family').removeClass('hidden-item'); $('.f-details').removeClass('col-lg-12').addClass('col-lg-9'); $('.f-details').css('margin-top','-62px') $('.show-on-mobile').removeClass('hidden-item'); $('.separator').removeClass('hidden-item'); $('.f-details').css('top', ''); const groupedSnapshots = groupSnapshots(snapshots, filterValue); const groupAccordionHTML = `<div class="panel panel-default top-panel"> <div class="panel-heading top-panel-heading"> <h4 class="panel-title"> <a class="accordion-toggle collapsed top-panel-toggle" data-toggle="collapse" data-parent="#accordion-group" href="#panel-{id}"> {groupName} </a> </h4> </div> <div id="panel-{id}" role="application" class="panel-collapse collapse"> <div class="panel-body"> <div class="list-group--data" id="plan-accordion-{id}"> </div> </div> </div> </div>`; var i=0; groupedSnapshots.forEach(item=>{ let updatedAccordionHtml = groupAccordionHTML.replaceAll('{groupName}', item.key).replaceAll('{id}', i); $('#accordion-group').append(updatedAccordionHtml); let sortedSnapshots = sortSnapshots(item.snapshots, filterValue); renderDataSets(sortedSnapshots, sortedSnapshots.length, filterValue, $(updatedAccordionHtml).find(".list-group--data").attr('id')); i++; }); //inside planID page const url = new URL(window.location); let urlContainsPlanID = url.searchParams.has("planID"); if(urlContainsPlanID){ //dont expand anything } else{ //expand first group $('.top-panel .panel-collapse').first().addClass('in'); $('.top-panel .accordion-toggle.top-panel-toggle').first().removeClass('collapsed'); } if(isMyReleasePlanSelected()){ $('.notes-empty').append(NotesEmptySvg()); $('.notes-empty').attr('tabindex','0'); } else if(!isMyReleasePlanSelected()){ $('.share-feature').append(getSharableFeatureSvg()); } } function groupSnapshots(snapshots, filterValue){ const groupedSnapshots = []; let groupedItems = []; if(isGroupedByDate()){ snapshots.forEach(s=>{ if(!groupedItems.find(x=>x.groupValue === s.Milestone.groupValue)){ groupedItems.push(s.Milestone); } }); if(filterBoxState.SortBy[0].order.OldNew) { groupedItems.sort(function(a, b){ return new Date(a.date) - new Date(b.date); }); } else if(filterBoxState.SortBy[0].order.NewOld) { groupedItems.sort(function(a, b){ return new Date(b.date) - new Date(a.date); }); } else{ if(filterValue === 3){ groupedItems.sort(function(a, b){ return new Date(b.date) - new Date(a.date); }); } else{ groupedItems.sort(function(a, b){ return new Date(a.date) - new Date(b.date); }); } } groupedItems.forEach(item =>{ groupedSnapshots.push({'key': item.groupValue, 'snapshots': snapshots.filter(s=>s.Milestone.groupValue === item.groupValue)}); }); } else{ groupedItems = [...new Set(snapshots.map(item => item.ProductArea))]; groupedItems.forEach(item =>{ groupedSnapshots.push({'key': item || 'Other', 'snapshots': snapshots.filter(s=>s.ProductArea === item) }); }); } return groupedSnapshots; } function isGroupedByDate(){ return $('.timeline-group-l2').hasClass('hidden-item'); } function sortSnapshots(snapshots, filterValue){ if(!snapshots) return snapshots; if(filterBoxState.SortBy[0].AvailabilityDates.EarlySort) //from checkbox { snapshots = snapshots.sort((a, b)=>{ return interactiveFilterSortBy(a.EarlyAccessDate, b.EarlyAccessDate,filterValue); }); } else if(filterBoxState.SortBy[0].AvailabilityDates.GASort) { snapshots = snapshots.sort((a, b)=>{ return interactiveFilterSortBy(a.GADate, b.GADate,filterValue); }); } else if(filterBoxState.SortBy[0].AvailabilityDates.PublicSort) { snapshots = snapshots.sort((a, b)=>{ return interactiveFilterSortBy(a.PublicPreviewDate, b.PublicPreviewDate,filterValue); }); } else{ snapshots = snapshots.sort((a, b)=>{ return interactiveFilterSortBy(getTargetReleaseDate(filterValue,a),getTargetReleaseDate(filterValue,b),filterValue); }); } return snapshots; } function sortPlanned(plan1, plan2){ if(plan1.ProductArea === plan2.ProductArea){ return plan1.TargetReleaseDate.getTime() - plan2.TargetReleaseDate.getTime(); } else{ return sortByProductAreaAsc(plan1, plan2); } } function sortTryNow(plan1, plan2){ if(plan1.ProductArea === plan2.ProductArea){ return plan2.TargetReleaseDate.getTime() - plan1.TargetReleaseDate.getTime(); } else{ return sortByProductAreaAsc(plan1, plan2); } } function sortComingSoon(plan1, plan2){ if(plan1.ProductArea === plan2.ProductArea){ return plan1.FeatureName > plan2.FeatureName ? 1 : -1; } else { return sortByProductAreaAsc(plan1, plan2); } } function interactiveFilterSortBy(plan1,plan2,filterValue) { let plan1DateValue = plan1 ? new Date(plan1).getTime() : 0; let plan2DateValue = plan2 ? new Date(plan2).getTime() : 0; if(filterBoxState.SortBy[0].order.OldNew) //Asc return plan1DateValue-plan2DateValue; else if(filterBoxState.SortBy[0].order.NewOld) //Dsc return plan2DateValue-plan1DateValue; else if(filterValue === 1 || filterValue === 2) return plan1DateValue-plan2DateValue; else if(filterValue === 3) return plan2DateValue-plan1DateValue; } function sortByProductAreaAsc(plan1, plan2){ if(plan1.ProductArea === '' ){ return 1; } else if(plan2.ProductArea === '' ) return -1; else{ return (plan1.ProductArea > plan2.ProductArea) ? 1 : -1; } } function showErrorMessage($element){ $element.html(''); $element.append($(`<div class="plan-error"></div>`)); $element.find('.plan-error').append(getErrorSvg()); $element.find('.plan-error').append($("<div class='error-header'><p>Error</p></div>")); $element.find('.plan-error').append($("<div class='error-message'><p>Something went wrong</p></div>")); } function getSignInHtml(){ return `<a href="/SignIn?returnUrl=%2Fen-US%2F">Sign in</a>`; } function getRegisterHtml(){ return `<a href="/Account/Login/Register?returnUrl=%2Fen-US%2F"> register </a>`; } function identifyCategory(categoryDesc, prod, releaseWaveName, segmentPath, gaReleaseWaveName,gaSegmentPath, folderName) { let availableTo = ""; let cate_desc = ""; let prodfamily = AppState.productList.filter(x => x.name == prod); let productFamily = prodfamily[0].hierarchy; let overviewLink = getReleaseOverviewUrl(segmentPath, folderName, prod); let gaWaveOverviewLink = getReleaseOverviewUrl(gaSegmentPath, folderName, prod); if (productFamily.indexOf(AppState.productFamilies.d365) > -1){ let f_catetory = AppState.featurecategory.filter(x => x.cat == categoryDesc); for (let item = 0; item < f_catetory.length; item++) { if (f_catetory[item].id == "CatA" || f_catetory[item].id == "CatC") { availableTo = "Users"; cate_desc = f_catetory[item].Desc; } else { availableTo = "Admins"; cate_desc = f_catetory[item].Desc; } } } else if(productFamily === AppState.productFamilies.powerPlatform){ let f_catetory = AppState.featurecategory.filter(x => x.cat == categoryDesc); for (let item = 0; item < f_catetory.length; item++) { if (f_catetory[item].id == "CatA" || f_catetory[item].id == "CatC") { availableTo = "Users"; cate_desc = f_catetory[item].Desc; } else { availableTo = "Admins | Makers"; cate_desc = f_catetory[item].Desc; } } } return [availableTo, cate_desc, overviewLink, gaWaveOverviewLink]; } function getLastInnerElement($givenElement){ let hasInnerElements = true; while(hasInnerElements){ if($givenElement.children().last().length > 0){ $givenElement = $givenElement.children().last(); } else{ hasInnerElements = false; } } return $givenElement; } function renderAddRemovePlans($parentElement, planID){ if(UserId){ let snapshotRecord = AppState.userSnapshots.find(item=>item.ReleasePlanID === planID); if(!snapshotRecord){ appendAddToPlanButton(planID, $parentElement.attr('id')); } else{ appendRemoveFromPlanButton(planID, $parentElement.attr('id')); } } else appendAddToPersonalizedPlanButton(planID, $parentElement.attr('id')); } function appendAddToPersonalizedPlanButton(planID, parentId){ $(`#${parentId}`).append(` <button type="button" data-plan="${planID}" class="nobackButton add-btn" title='Sign in to create personalized list' aria-label='Sign in to create personalized list' disabled> </button>`); $(`#${parentId}`).children('button').append(addAnonymousBtnSvg()); } function appendAddToPlanButton(planID, parentId){ $(`#${parentId}`).append(`<button type="button" data-plan="${planID}" onclick="createAssociationHandler('${planID}','${parentId}',event)" data-toggle="modal" data-target=".bs-example-modal-sm" class="nobackButton add-btn" title='Add to my plan' aria-label='Add to my plan' ></button>`); $(`#${parentId}`).children('button').append(addPlanPlusSvg()); } function appendRemoveFromPlanButton(planID, parentId){ $(`#${parentId}`).append(` <button type="button" data-plan="${planID}" onclick="removeFromMyPlan('${planID}', '${parentId}',this,event)" class="nobackButton" title='Remove from my plan' aria-label='Remove from my plan'> </button>`); $(`#${parentId}`).children('button').append(removePlanBinSvg()); } function isMyReleasePlanSelected(){ return $('#togglePlans').prop("checked") === true; } function setUserSnapshots(successCallback, failureCallback){ AppState.userSnapshots = []; AppState.userProductList = []; if(!UserId){ if(failureCallback){ failureCallback(); } return; } let url = `${document.location.origin}/user-plans-json/?user=${UserId}&langCode=${langCode}`; return $.getJSON(url, function (data) { if (data.results.length > 0) { AppState.userSnapshots = data.results || []; resetUserProductList(); } if(successCallback){ successCallback(); } }) .fail(function(error) { console.log(error); if(failureCallback){ failureCallback(); } }) } function resetUserProductList(){ let results = AppState.userSnapshots.map(r => r.ProductId); results = [... new Set(results)]; AppState.userProductList = []; results.forEach(element => { let productItem = AppState.productList.find(item=> item.id === element); if(productItem){ AppState.userProductList.push(productItem); } }); } function getLearnMoreUrl(overview, segmentPath, folderName, product){ if(!overview || !segmentPath || !folderName){ return ''; } let releaseOverviewUrl = getReleaseOverviewUrl(segmentPath, folderName, product); if (releaseOverviewUrl && releaseOverviewUrl.length > 0){ overview = overview.replace('https://', '').replace('.md', ''); return `${releaseOverviewUrl}/${overview}`; } return ''; } function getReleaseOverviewUrl(segmentPath, folderName, product){ if(!segmentPath || !folderName){ return ''; } let prodfamily = AppState.productList.filter(x => x.name == product); let productFamilyName = prodfamily[0].hierarchy; let releasePlan = '' if (productFamilyName.indexOf(AppState.productFamilies.d365) > -1) { releasePlan = 'dynamics365/release-plan'; if(segmentPath.toLocaleLowerCase() === '2022wave2' || segmentPath.toLocaleLowerCase() === '2022wave1'){ releasePlan = 'dynamics365-release-plan'; } } else if (productFamilyName === AppState.productFamilies.powerPlatform) { releasePlan = 'power-platform/release-plan'; if(segmentPath.toLocaleLowerCase() === '2022wave2' || segmentPath.toLocaleLowerCase() === '2022wave1'){ releasePlan = 'power-platfor-release-plan'; } } else return ''; return `https://docs.microsoft.com/${releasePlan}/${segmentPath}/${folderName}`; } function getDateDifference(firstDate, secondDate){ if(firstDate && secondDate){ let firstMomentDate = moment(firstDate); let secondMomentDate = moment(secondDate); let dateDayDiff = firstMomentDate.diff(secondMomentDate, 'days'); return dateDayDiff; } return null; } function highlightTimelineDate($element, dateValue){ if (!dateValue || dateValue === ''){ return; } let selectedTab = $('#filterDropdown select').val(); if(shouldAddInCurrentFilter(selectedTab, dateValue)){ $element.addClass('font-weight-bold'); } } function getTargetReleaseDate(filterValue,plan) { if(shouldAddInCurrentFilter(`${filterValue}`,plan.EarlyAccessDate)) { return plan.EarlyAccessDate; //from featureobject } if(shouldAddInCurrentFilter(`${filterValue}`,plan.PublicPreviewDate)) { return plan.PublicPreviewDate; //from featureobject } if(shouldAddInCurrentFilter(`${filterValue}`,plan.GADate)) { return plan.GADate; //from featureobject } } function shouldAddInCurrentFilter(filterValue, dateValue){ if (!dateValue || dateValue === ''){ return false; } let includeInFilter = false; let givenDate = moment(dateValue, 'MM/DD/YYYY'); let givenMonth = Number(givenDate.format('M')); let givenYear = Number(givenDate.format('YYYY')); let currentDateOnly = $.datepicker.formatDate('mm/dd/yy', new Date()); let currentDate = moment(currentDateOnly, 'MM/DD/YYYY'); let currentMonth = Number(currentDate.format('M')); let currentYear = Number(currentDate.format('YYYY')); var dayDiff = givenDate.diff(currentDate, 'days'); if (filterValue === '3'){ // Try now if(dayDiff <0) includeInFilter=true; //if incoming plan date is less then current date } else if (filterValue === '2'){ // Coming Soon if(dayDiff >=0 && dayDiff<=30) includeInFilter = true; } else if (filterValue === '1'){ // Planned if(dayDiff >30)includeInFilter = true; } else if(filterValue === '4'){ if(dayDiff >30){ includeInFilter = true;} else if(dayDiff < 0 ){ includeInFilter = true;} } return includeInFilter; } function getProductFamilyName(productFullHierarchy){ let hierarchyFirstProduct = productFullHierarchy.substring(productFullHierarchy.indexOf("\\") + 1); let topProductFamilyNameLength = hierarchyFirstProduct.indexOf("\\") === -1 ? (hierarchyFirstProduct.length) : hierarchyFirstProduct.indexOf("\\"); let productFamilyName = hierarchyFirstProduct.substring(0, topProductFamilyNameLength); return productFamilyName; } function getSnapshotImages(snapshotId, $element){ let snapshotImageUrl = `${document.location.origin}/snaphsot-images-json/?snapshotid=${snapshotId}`; return $.getJSON(snapshotImageUrl, function (data) { return data; }) .fail(function(error) { console.log(error); }); } function showLoader(){ $("div.spinner").addClass("show"); } function hideLoader(){ $("div.spinner").removeClass("show"); } function openImageModal(imageSrc, imageTitle, event){ imageTitle = unescape(imageTitle); event.preventDefault(); let image = createImage(imageSrc); $('#imageModal').find('.modal-body').empty().append(image.outerHTML); $('#modalLabel').text(imageTitle); $('#imageModal').modal('show'); return false; } function createImage(imageSrc){ var image = new Image(); image.src = imageSrc; image.classList.add('img-scale-down'); return image; } function getImageBlobUrl(imageBase64, mimeType) { var byteCharacters = atob(imageBase64); var byteNumbers = new Array(byteCharacters.length); for (var i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } var byteArray = new Uint8Array(byteNumbers); var file = new Blob([byteArray], { type: mimeType + ';base64' }); var fileURL = URL.createObjectURL(file); return fileURL; } function updateStatusState(statusValue){ if(!statusValue){ return; } AppState.urlParams.status.selectedValue = statusValue; updateHistoryState(AppState.urlParams.status.key, AppState.urlParams.status.selectedValue); } function updatePlanState(isMyPlan){ AppState.urlParams.rp.selectedValue = isMyPlan ? 'my-plans' : 'all-plans'; updateHistoryState(AppState.urlParams.rp.key, AppState.urlParams.rp.selectedValue); } function updateProductState(updatedProductName){ if(!updatedProductName){ return; } AppState.urlParams.app.selectedValue = updatedProductName; updateHistoryState(AppState.urlParams.app.key, AppState.urlParams.app.selectedValue); } function updateHistoryState(stateKey, newValue){ const currentState = history.state || {}; if(currentState[stateKey] != newValue){ const url = new URL(window.location); //url.searchParams.delete('planID'); url.search = url.search.replaceAll("amp%3B",""); url.href = url.href.replaceAll("amp%3B",""); url.searchParams.set(stateKey, newValue); history.replaceState(currentState, '', url); } } </script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/pcf-loader.bundle-f4a0e619b8.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf-loader.bundle-f4a0e619b8.js" type="text/javascript"></script> <div id="pp-native-controls-react-root"></div> <script>window._nativeControlConfig = { "publicPath":"https://content.powerapps.com/resource/powerappsportal/controls", "versions": {"pcf_loader":"0.0.27","pcf_controls":"3.2.6","mf_shared":"0.2.7","host":"0.2.0","data_grid":"1.1.26","controls_fluent_v9":"0.0.30"} }</script> <script defer="defer" src="https://content.powerapps.com/resource/powerappsportal/controls/host/main.04a618205e.chunk.js"></script> <div class="mscom-footer"> <div id="footerArea" class="uhf" data-m='{"cN":"footerArea","cT":"Area_coreuiArea","id":"a2Body","sN":2,"aN":"Body"}'> <div id="footerRegion" data-region-key="footerregion" data-m='{"cN":"footerRegion","cT":"Region_coreui-region","id":"r1a2","sN":1,"aN":"a2"}' > <div id="footerUniversalFooter" data-m='{"cN":"footerUniversalFooter","cT":"Module_coreui-universalfooter","id":"m1r1a2","sN":1,"aN":"r1a2"}' data-module-id="Category|footerRegion|coreui-region|footerUniversalFooter|coreui-universalfooter"> <footer id="uhf-footer" class="c-uhff context-uhf" data-uhf-mscc-rq="false" data-footer-footprint="/Dynamics365/Dynamics365Footer, fromService: True" data-m='{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}'> <nav class="c-uhff-nav" aria-label="Footer Resource links" data-m='{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}'> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">What's new</div> <ul class="c-list f-bare"> <li> <a aria-label="Surface Pro 9 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/surface-pro-9/93VKD8NP4FVK" data-m='{"cN":"Footer_WhatsNew_NewSurfacePro8_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}'>Surface Pro 9</a> </li> <li> <a aria-label="Surface Laptop 5 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/surface-laptop-5/8XN49V61S1BN" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptop2_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}'>Surface Laptop 5</a> </li> <li> <a aria-label="Surface Studio 2+ What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/surface-studio-2plus/8VLFQC3597K4" data-m='{"cN":"Footer_WhatsNew_SurfaceStudio_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}'>Surface Studio 2+</a> </li> <li> <a aria-label="Surface Laptop Go 2 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/surface-laptop-go-2/8PGLPV76MJHN" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopGo_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Go 2</a> </li> <li> <a aria-label="Surface Laptop Studio What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/surface-laptop-studio/8SRDF62SWKPF" data-m='{"cN":"Footer_WhatsNew_SurfaceLaptopStudio_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}'>Surface Laptop Studio</a> </li> <li> <a aria-label="Surface Go 3 What's new" class="c-uhff-link" href="https://www.microsoft.com/en-us/d/surface-go-3/904H27D0CBWN" data-m='{"cN":"Footer_WhatsNew_SurfaceGo3_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}'>Surface Go 3</a> </li> <li> <a aria-label="Microsoft 365 What's new" class="c-uhff-link" href="https://www.microsoft.com/microsoft-365" data-m='{"cN":"Footer_WhatsNew_Microsoft365_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}'>Microsoft 365</a> </li> <li> <a aria-label="Windows 11 apps What's new" class="c-uhff-link" href="https://www.microsoft.com/windows/windows-11-apps" data-m='{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}'>Windows 11 apps</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Microsoft Store</div> <ul class="c-list f-bare"> <li> <a aria-label="Account profile Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/" data-m='{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}'>Account profile</a> </li> <li> <a aria-label="Download Center Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/download" data-m='{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}'>Download Center</a> </li> <li> <a aria-label="Microsoft Store support Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m='{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}'>Microsoft Store support</a> </li> <li> <a aria-label="Returns Microsoft Store" class="c-uhff-link" href="https://go.microsoft.com/fwlink/p/?LinkID=824764&clcid=0x409" data-m='{"cN":"Footer_StoreandSupport_Returns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}'>Returns</a> </li> <li> <a aria-label="Order tracking Microsoft Store" class="c-uhff-link" href="https://account.microsoft.com/orders" data-m='{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}'>Order tracking</a> </li> <li> <a aria-label="Trade-in for Cash Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/microsoft-trade-in" data-m='{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}'>Trade-in for Cash</a> </li> <li> <a aria-label="Microsoft Store Promise Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m='{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}'>Microsoft Store Promise</a> </li> <li> <a aria-label="Flexible Payments Microsoft Store" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m='{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}'>Flexible Payments</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Education</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft in education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education" data-m='{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}'>Microsoft in education</a> </li> <li> <a aria-label="Devices for education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/devices/overview" data-m='{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}'>Devices for education</a> </li> <li> <a aria-label="Microsoft Teams for Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/products/teams" data-m='{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}'>Microsoft Teams for Education</a> </li> <li> <a aria-label="Microsoft 365 Education Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/education/buy-license/microsoft365" data-m='{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}'>Microsoft 365 Education</a> </li> <li> <a aria-label="How to buy for your school Education" class="c-uhff-link" href="https://www.microsoft.com/education/how-to-buy" data-m='{"cN":"Footer_Howtobuyforyourschool_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}'>How to buy for your school</a> </li> <li> <a aria-label="Educator training and development Education" class="c-uhff-link" href="https://education.microsoft.com/" data-m='{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}'>Educator training and development</a> </li> <li> <a aria-label="Deals for students and parents Education" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/education" data-m='{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}'>Deals for students and parents</a> </li> <li> <a aria-label="Azure for students Education" class="c-uhff-link" href="https://azure.microsoft.com/en-us/free/students/" data-m='{"cN":"Footer_Education_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}'>Azure for students</a> </li> </ul> </div> </div> <div class="c-uhff-nav-row"> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Business</div> <ul class="c-list f-bare"> <li> <a aria-label="Microsoft Cloud Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m='{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}'>Microsoft Cloud</a> </li> <li> <a aria-label="Microsoft Security Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/security" data-m='{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}'>Microsoft Security</a> </li> <li> <a aria-label="Dynamics 365 Business" class="c-uhff-link" href="https://dynamics.microsoft.com/en-us/" data-m='{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}'>Dynamics 365</a> </li> <li> <a aria-label="Microsoft 365 Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-365/business/" data-m='{"cN":"Footer_Business_M365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}'>Microsoft 365</a> </li> <li> <a aria-label="Microsoft Power Platform Business" class="c-uhff-link" href="https://powerplatform.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}'>Microsoft Power Platform</a> </li> <li> <a aria-label="Microsoft Teams Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m='{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}'>Microsoft Teams</a> </li> <li> <a aria-label="Microsoft Industry Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/industry" data-m='{"cN":"Footer_Business_MicrosoftIndustry_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}'>Microsoft Industry</a> </li> <li> <a aria-label="Small Business Business" class="c-uhff-link" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m='{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}'>Small Business</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Developer & IT</div> <ul class="c-list f-bare"> <li> <a aria-label="Azure Developer & IT" class="c-uhff-link" href="https://azure.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}'>Azure</a> </li> <li> <a aria-label="Developer Center Developer & IT" class="c-uhff-link" href="https://developer.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_DeveloperCenter_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}'>Developer Center</a> </li> <li> <a aria-label="Documentation Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/docs/" data-m='{"cN":"Footer_DeveloperAndIT_Documentation_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}'>Documentation</a> </li> <li> <a aria-label="Microsoft Learn Developer & IT" class="c-uhff-link" href="https://learn.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}'>Microsoft Learn</a> </li> <li> <a aria-label="Microsoft Tech Community Developer & IT" class="c-uhff-link" href="https://techcommunity.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}'>Microsoft Tech Community</a> </li> <li> <a aria-label="Azure Marketplace Developer & IT" class="c-uhff-link" href="https://azuremarketplace.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AzureMarketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}'>Azure Marketplace</a> </li> <li> <a aria-label="AppSource Developer & IT" class="c-uhff-link" href="https://appsource.microsoft.com/en-us/" data-m='{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}'>AppSource</a> </li> <li> <a aria-label="Visual Studio Developer & IT" class="c-uhff-link" href="https://visualstudio.microsoft.com/" data-m='{"cN":"Footer_DeveloperAndIT_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}'>Visual Studio</a> </li> </ul> </div> <div class="c-uhff-nav-group" data-m='{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}'> <div class="c-heading-4" role="heading" aria-level="2">Company</div> <ul class="c-list f-bare"> <li> <a aria-label="Careers Company" class="c-uhff-link" href="https://careers.microsoft.com/" data-m='{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}'>Careers</a> </li> <li> <a aria-label="About Microsoft Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/about" data-m='{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}'>About Microsoft</a> </li> <li> <a aria-label="Company news Company" class="c-uhff-link" href="https://news.microsoft.com/" data-m='{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}'>Company news</a> </li> <li> <a aria-label="Privacy at Microsoft Company" class="c-uhff-link" href="https://privacy.microsoft.com/en-us" data-m='{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}'>Privacy at Microsoft</a> </li> <li> <a aria-label="Investors Company" class="c-uhff-link" href="https://www.microsoft.com/investor/default.aspx" data-m='{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}'>Investors</a> </li> <li> <a aria-label="Diversity and inclusion Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/diversity/" data-m='{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}'>Diversity and inclusion</a> </li> <li> <a aria-label="Accessibility Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/accessibility" data-m='{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}'>Accessibility</a> </li> <li> <a aria-label="Sustainability Company" class="c-uhff-link" href="https://www.microsoft.com/en-us/sustainability/" data-m='{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}'>Sustainability</a> </li> </ul> </div> </div> </nav> <div class="c-uhff-base"> <a id="locale-picker-link" aria-label="Content Language Selector. Currently set to English (United States)" class="c-uhff-link c-uhff-lang-selector c-glyph glyph-world" href="https://dynamics.microsoft.com/en-us/locale/" data-m='{"cN":"locale_picker(US)_nav","id":"n7c1c1m1r1a2","sN":7,"aN":"c1c1m1r1a2"}'>English (United States)</a> <a data-m='{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>California Consumer Privacy Act (CCPA) Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> <noscript> <a data-m='{"id":"n9c1c1m1r1a2","sN":9,"aN":"c1c1m1r1a2"}' href="https://aka.ms/yourcaliforniaprivacychoices" class='c-uhff-link c-uhff-ccpa'> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>California Consumer Privacy Act (CCPA) Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"/> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"/> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"/> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"/> </svg> <span>Your Privacy Choices</span> </a> </noscript> <nav aria-label="Microsoft corporate links"> <ul class="c-list f-bare" data-m='{"cN":"Corp links_cont","cT":"Container","id":"c10c1c1m1r1a2","sN":10,"aN":"c1c1m1r1a2"}'> <li id="c-uhff-footer_sitemap"> <a class="c-uhff-link" href="https://www.microsoft.com/en-us/sitemap1.aspx" data-mscc-ic="false" data-m='{"cN":"Footer_Sitemap_nav","id":"n1c10c1c1m1r1a2","sN":1,"aN":"c10c1c1m1r1a2"}'>Sitemap</a> </li> <li id="c-uhff-footer_contactus"> <a class="c-uhff-link" href="https://support.microsoft.com/contactus" data-mscc-ic="false" data-m='{"cN":"Footer_ContactUs_nav","id":"n2c10c1c1m1r1a2","sN":2,"aN":"c10c1c1m1r1a2"}'>Contact Microsoft</a> </li> <li id="c-uhff-footer_privacyandcookies"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m='{"cN":"Footer_PrivacyandCookies_nav","id":"n3c10c1c1m1r1a2","sN":3,"aN":"c10c1c1m1r1a2"}'>Privacy </a> </li> <li class=" x-hidden" id="c-uhff-footer_managecookies"> <a class="c-uhff-link" href="#" data-mscc-ic="false" data-m='{"cN":"Footer_ManageCookies_nav","id":"n4c10c1c1m1r1a2","sN":4,"aN":"c10c1c1m1r1a2"}'>Manage cookies</a> </li> <li id="c-uhff-footer_termsofuse"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?LinkID=206977" data-mscc-ic="false" data-m='{"cN":"Footer_TermsOfUse_nav","id":"n5c10c1c1m1r1a2","sN":5,"aN":"c10c1c1m1r1a2"}'>Terms of use</a> </li> <li id="c-uhff-footer_trademarks"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2196228" data-mscc-ic="false" data-m='{"cN":"Footer_Trademarks_nav","id":"n6c10c1c1m1r1a2","sN":6,"aN":"c10c1c1m1r1a2"}'>Trademarks</a> </li> <li id="c-uhff-footer_safetyandeco"> <a class="c-uhff-link" href="https://go.microsoft.com/fwlink/?linkid=2196227" data-mscc-ic="false" data-m='{"cN":"Footer_SafetyAndEco_nav","id":"n7c10c1c1m1r1a2","sN":7,"aN":"c10c1c1m1r1a2"}'>Safety & eco</a> </li> <li id="c-uhff-recycling"> <a class="c-uhff-link" href="https://www.microsoft.com/en-us/legal/compliance/recycling" data-mscc-ic="false" data-m='{"cN":"Recycling_nav","id":"n8c10c1c1m1r1a2","sN":8,"aN":"c10c1c1m1r1a2"}'>Recycling</a> </li> <li id="c-uhff-footer_aboutourads"> <a class="c-uhff-link" href="https://choice.microsoft.com" data-mscc-ic="false" data-m='{"cN":"Footer_AboutourAds_nav","id":"n9c10c1c1m1r1a2","sN":9,"aN":"c10c1c1m1r1a2"}'>About our ads</a> </li> <li>© Microsoft 2024</li> </ul> </nav> </div> </footer> <script id="uhf-footer-ccpa"> //Detect GPC const globalPrivacyControlEnabled = navigator.globalPrivacyControl; // Set data sharing opt-in to false when GPC/AMC controls detected const GPC_DataSharingOptIn = (globalPrivacyControlEnabled) ? false : checkThirdPartyAdsOptOutCookie(); // Detect AMC opt out choice function checkThirdPartyAdsOptOutCookie() { try { const ThirdPartyAdsOptOutCookieName = "3PAdsOptOut"; var cookieValue = getCookie(ThirdPartyAdsOptOutCookieName); //for unauthenticated users return cookieValue != 1; } catch { return true; } } function getCookie(cookieName) { var cookieValue = document.cookie.match('(^|;)\\s*' + cookieName + '\\s*=\\s*([^;]+)'); return (cookieValue && cookieValue.pop()) || ''; } </script> </div> </div> </div> </div> <script src="/navigation.js"></script> <link href="/bapistaticuhfltr.css" rel="stylesheet"> <link href="/footerltrStyles.css" rel="stylesheet"> <script> $('li>#meControl').replaceWith("<ul><li class='hide-in-mobile'>\ <div id='meControl'><div><div class='msame_Header msame_unauth' role='button' tabindex='0'\ aria-label='Sign in to your account' title='Sign in to your account'\ data-mc-m='{"id":"headerClick","aN":"\ Me Control Header","cT":"Button"}' '='' style='height: 48px;'>\ <span class='msame_screen_reader'>Sign in to your account</span>\ <div aria-hidden='true' role='presentation'><div class='msame_Header_name msame_TxtTrunc' style='line-height: 48px;'>\ Sign in</div><div class='msame_Header_chev'></div></div></div></div></div>\ </li></ul>"); </script> <script> var usernav = $("#user-links").html(); if (usernav) { setTimeout(function(){ $("#meControl").html(usernav); $("#meControl > a").attr("aria-label", "User profile links"); $("body").show(); },2500); } else{ setTimeout(function(){ $("body").show(); $($('#meControl>div>div>div>div')[0]).click(function(){ location.href = "/signin?returnUrl=%2Fen-US%2FAccount%2FLogin%2FRegister%3FreturnUrl%3D%25252525252525252525252Fja-JP%25252525252525252525252F%25252525252525252525253Fapp%25252525252525252525253DSales%26amp%253BmsCorrelationId%3Dcd0e770f-dfe7-443b-b499-c3a1ed00fc80%26amp%253BinstanceId%3D504dbda4a2fba22d55207d9088b5357985f1b7353e5b23c6e174b0cdcefdc67a%26amp%253BtenantId%3D72f988bf-86f1-41af-91ab-2d7cd011db47%26amp%253BportalId%3D8ac48c2d-5492-4e58-99a3-e62fc82cd68a%26amp%253BorgId%3D9a716ccb-b974-4324-8590-feff90a9a5bc%26amp%253BenvironmentId%3Df55e79bd-d8cb-4fbb-9be2-2cefd8cb3b83%26amp%253BportalApp%3Dsite-8ac48c2d-5492-4e58-99a3-e62fc82cd68a-USe2%26amp%253BportalType%3DCDSStarterPortal%26amp%253BportalProductionOrTrialType%3DProduction%26amp%253BlicenseType%3DPowerPortal%26amp%253BportalVersion%3D9.6.9.39%26amp%253BislandId%3D101%26amp%253BportalDomain%3Dhttps%25253A%25252F%25252Freleaseplans.microsoft.com"; });}, 1000); } </script> <!--<script src="/initializePortalMultiselectField.js"></script>--> <style> .msame_TxtTrunc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;word-break:break-all}.msame_Header{display:inline-block;cursor:pointer;font-size:14px;border-width:1px;border-style:solid;border-bottom-style:none;border-color:transparent;width:100%}.msame_Header .msame_screen_reader{overflow:hidden;display:inline-block;width:1px;height:1px;position:absolute}.msame_Header_name{padding-left:12px;max-width:160px;display:inline-block;line-height:64px;vertical-align:top;font-family:"Segoe UI","Segoe UI Web Regular","Segoe UI Symbol","Helvetica Neue","BBAlpha Sans","S60 Sans",Arial,sans-serif;font-size:86%;color:#505050}.msame_unauth .msame_Header_name{padding-right:12px}.msame_unauth .msame_Header_name:hover{color:#0078d7}.msame_Drop_AI_pic,.msame_Drop_active_pic,.msame_Header_pic{display:inline-block}.msame_Header_piccont{padding-top:14px;padding-bottom:14px;padding-right:12px;padding-left:8px}.msame_Mobile .msame_Header_piccont{padding-top:10px;padding-bottom:10px}.msame_Short .msame_Header_piccont{padding-left:12px}.msame_Header_picframe{width:36px;height:36px;border-radius:50%;overflow:hidden}.msame_Mobile .msame_Header_picframe{width:48px;height:48px}.msame_open .msame_Header_picframe{z-index:3000001;position:relative}.msame_Header_chev{display:none}.msame_Mobile .msame_Header_piccont{padding-right:8px;padding-left:10px}.msame_Mobile .msame_Header_name{line-height:3;font-size:114%;padding-left:10px;padding-right:10px;display:inline-block;vertical-align:top;padding-top:14px}.msame_Mobile.msame_3row .msame_Header_name{padding-top:6px}.msame_Mobile .msame_Header_chev{display:inline-block;line-height:64px;vertical-align:top;padding-right:16px;padding-left:8px;float:right}.msame_open .msame_Header_chev img{-moz-transform:scaleY(-1);-o-transform:scaleY(-1);-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:FlipV}.msame_Drop_root .msame_Drop_AI:focus,.msame_Drop_root .msame_Drop_AI_remove:focus,.msame_Drop_root a:focus,.msame_Header:focus{border-style:dashed;border-color:#000;border-width:1px}.msame_Header .msame_Header_piccont img{width:36px;height:36px;line-height:normal;vertical-align:baseline}.msame_Mobile .msame_Header_piccont img{width:48px;height:48px}.msame_Mobile .msame_Header_fullName{font-size:100%;color:#000;line-height:1.333}.msame_Drop_AI_email,.msame_Drop_AI_status,.msame_Mobile .msame_Header_email,.msame_Mobile .msame_Header_nickName{font-family:"Segoe UI","Segoe UI Web Regular","Segoe UI Symbol","Helvetica Neue","BBAlpha Sans","S60 Sans",Arial,sans-serif;font-size:86%;color:rgba(0,0,0,.54);line-height:1.333333}.msaie8 .msame_Drop_AI_pic,.msaie8 .msame_Drop_AI_right,.msaie8 .msame_Drop_active_pic,.msaie8 .msame_Drop_active_right,.msaie8 .msame_Header,.msaie8 .msame_Header_name,.msaie8 .msame_Header_pic{zoom:1} </style> <style> .msame_open .msame_Header{border-color:#e6e6e6;background-color:#fff}.msame_open .msame_Header.msame_Mobile{border-color:transparent;background-color:transparent}.msame_ClickStart.msame_Drop_root .msame_Drop_AI:focus,.msame_ClickStart.msame_Drop_root .msame_Drop_AI_remove:focus,.msame_ClickStart.msame_Drop_root a:focus{outline-style:none}.msame_Drop_root a,.msame_Drop_root a:active,.msame_Drop_root a:focus,.msame_Drop_root a:hover,.msame_Drop_root a:visited{text-decoration:none}.msame_Drop_topb{border-top-color:#e6e6e6;border-top-style:solid;border-top-width:1px}.msame_Mobile .msame_Drop_topb{width:100%!important}.msame_Drop_active{padding-bottom:8px}.msame_Drop_AI_picframe{width:44px;height:44px;border-radius:50%;overflow:hidden}.msame_Drop_AI_piccont img{width:44px;height:44px}.msame_Drop_root{border-width:1px;border-color:#e6e6e6;border-style:solid;border-top-style:none;position:absolute;width:360px;z-index:3000000;background-color:#fff;font-size:14px}.msame_Drop_sep{border-top-width:1px;border-top-color:#e6e6e6;border-top-style:solid;width:100%;height:0;display:block}.msame_Mobile.msame_Drop_root{left:0!important;right:0;bottom:0;width:100%;border-right-width:0;border-left-width:0}.msame_Mobile .msame_Drop_content{overflow-y:auto;position:absolute;left:0;right:0;bottom:0;top:0}.msame_Drop_root a{text-decoration:none}.msame_Drop_content{overflow:hidden}.msame_Mobile .msame_Drop_active{display:none}.msame_Drop_AI{cursor:pointer}.disabled .msame_Drop_AI_pic,.disabled .msame_Drop_AI_right{opacity:.4;cursor:default}.disabled .msame_Drop_AI_email,.disabled .msame_Drop_AI_name,.disabled .msame_Drop_AI_status{color:#000}.msame_Drop_active_piccont{padding:5px}.msame_Drop_AI_piccont{padding:10px}.msame_Drop_active_picframe{width:74px;height:74px;border-radius:50%;overflow:hidden}.msame_Drop_active_picborder,.msame_Drop_active_piccont a{display:block;padding:5px;border-radius:50%}.msame_Drop_active_piccont a:focus{padding:4px;border:1px dashed #000}.msame_Drop_active_piccont img{width:64px;height:64px;border-radius:50%}.msame_Drop_active_name{display:block;line-height:1.3;font-size:150%;color:#000;font-family:"Segoe UI Light","Segoe UI Web Light","Segoe UI Web Regular","Segoe UI","Segoe UI Symbol",HelveticaNeue-Light,"Helvetica Neue",Arial,sans-serif}.msame_Drop_active_email{display:block;line-height:1.42857;font-size:100%;color:rgba(0,0,0,.54);font-family:"Segoe UI","Segoe UI Web Regular","Segoe UI Symbol","Helvetica Neue","BBAlpha Sans","S60 Sans",Arial,sans-serif;padding:1px}.msame_Drop_active_right{display:inline-block;width:216px;vertical-align:top;padding-top:12px;padding-right:12px;padding-left:12px}.msame_Drop_active_right a{color:rgba(0,0,0,.54)}.msame_Drop_SI a{line-height:2;font-size:114%;font-family:"Segoe UI","Segoe UI Web Regular","Segoe UI Symbol","Helvetica Neue","BBAlpha Sans","S60 Sans",Arial,sans-serif;padding-left:12px;padding-right:12px;display:block;color:#000}.msame_Mobile .msame_Drop_SI a{line-height:2.75}.msame_Drop_AI.switch:hover,.msame_Drop_AI_remove:hover,.msame_Drop_SI a:hover{color:#000;background-color:rgba(0,0,0,.12)}.msame_Drop_AI.switch:active,.msame_Drop_AI.switch:active div,.msame_Drop_AI_remove:active,.msame_Drop_SI a:active{color:#fff!important;background-color:#000}.msame_Drop_SI a:link,.msame_Drop_SI a:visited{color:#000}.msame_Drop_active_link a,.msame_Drop_active_link a:active,.msame_Drop_active_link a:hover,.msame_Drop_active_link a:link,.msame_Drop_active_link a:visited{line-height:1.333333;font-size:86%;font-family:"Segoe UI","Segoe UI Web Regular","Segoe UI Symbol","Helvetica Neue","BBAlpha Sans","S60 Sans",Arial,sans-serif;color:#0078d7}.msame_Drop_AL{padding-bottom:24px}.msame_Drop_AI_right{display:inline-block;width:252px;vertical-align:top;padding-left:8px;padding-top:5px}.msame_Mobile .msame_Drop_AI_right{width:100px}.msame_Drop_AI_name{font-family:"Segoe UI","Segoe UI Web Regular","Segoe UI Symbol","Helvetica Neue","BBAlpha Sans","S60 Sans",Arial,sans-serif;font-size:114%;color:#000;line-height:1.25}.msame_Drop_AI_remove{float:right;margin-top:6px;padding-top:12px;padding-bottom:12px;padding-left:12px;padding-right:12px;text-align:center;cursor:pointer}.msame_Drop_AI_remove img{display:block}.msame_auto_frame{display:none;position:absolute;top:0;left:-4000px;width:0}.msame_Drop_sneakyBtn a{width:0;height:0;opacity:0}.msame_Drop_sneakyBtn a:focus{width:auto;height:auto;opacity:1} </style> <style> #bapi-header .bapi-top-bar--viewport-mooncat, #bapi-header-subnavigation .bapi-top-bar--viewport-mooncat{ font-size: 14px !important; } @media(max-width:300px){ .hide-in-mobile{ display:none; } } #meControl > a{ font-size: 12.9px; } #meControl > ul > li > a{ padding: 3px 20px !important; } </style> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/bootstrap.bundle-105a4995b8.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/bootstrap.bundle-105a4995b8.js" type="text/javascript"></script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/postpreform.bundle-184c77da50.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/postpreform.bundle-184c77da50.js" type="text/javascript"></script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/app.bundle-0d23a48b21.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/app.bundle-0d23a48b21.js" type="text/javascript"></script> <script onerror="javascript: var target = event.target; var script = document.createElement('script'); script.crossOrigin = target.crossOrigin; script.src = '/dist/default-1033.moment_2_29_4.bundle-eda4e638fd.js'; script.type = 'text/javascript'; target.insertAdjacentElement('afterend',script);" src="https://content.powerapps.com/resource/powerappsportal/dist/default-1033.moment_2_29_4.bundle-eda4e638fd.js" type="text/javascript"></script> <script type="text/javascript" src="https://js.monitor.azure.com/scripts/c/ms.analytics-web-3.min.js"></script> <script src="https://wcpstatic.microsoft.com/mscc/lib/v2/wcp-consent.js"></script> <script src="https://consentdeliveryfd.azurefd.net/mscc/lib/v2/wcp-consent.js"></script> <script> var siteConsent = null; window.addEventListener("consentGranted", () => window.clarity('consent')); window.WcpConsent && WcpConsent.init("en-us", "cookie-banner", function (err, _siteConsent) { if (!err) { siteConsent = _siteConsent; //siteConsent is used to get the current consent window.siteConsent = _siteConsent; if (window.siteConsent.isConsentRequired) { if ($("#c-uhff-footer_managecookies") && $("#c-uhff-footer_managecookies").length) { $("#c-uhff-footer_managecookies").removeClass("x-hidden"); } } } else { console.log("Error initializing WcpConsent: " + err); } }, onConsentChanged, WcpConsent.themes.light); function onConsentChanged(categoryPreferences) { // window.clarity('consent'); console.log("Consent Change detected"); } const analytics = new oneDS.ApplicationInsights(); var config = { instrumentationKey: "1d96c19302f24d638507474ff0af54d4-f0ebe2fb-cc1c-4078-990a-2ca0096ea700-7268", channelConfiguration: { // Post channel configuration eventsLimitInMem: 50 }, propertyConfiguration: { // Properties Plugin configuration gpcDataSharingOptIn: (typeof GPC_DataSharingOptIn !== 'undefined') ? GPC_DataSharingOptIn : true, // Include the CCPA "GPC_DataSharingOptIn" property as true env: "PROD",// Environment can be set to PPE or PROD as needed. callback: { userConsentDetails: siteConsent ? siteConsent.getConsent : null } }, webAnalyticsConfiguration: { // Web Analytics Plugin configuration //urlCollectQuery:true, autoCapture: { scroll: true, pageView: true, onLoad: true, onUnload: true, click: true, resize: true, jsError: true } } }; //Initialize SDK analytics.initialize(config, []); $(document).ready(function () { $("#c-uhff-footer_managecookies").click(function (ev) { ev.preventDefault(); if (window && window.siteConsent && window.siteConsent.manageConsent) { window.siteConsent.manageConsent(); } }); }); </script> <script type="text/javascript"> (function (c, l, a, r, i, t, y) { c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments) }; t = l.createElement(r); t.async = 1; t.src = "https://www.clarity.ms/tag/" + i; y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y); })(window, document, "clarity", "script", "hynl35ojtv"); </script> <script> //this event will update the title of the page based on active breadcrumb $('.breadcrumb').ready(function () { if ($('.breadcrumb').is(':visible')) { document.querySelector('title').innerHTML = ($('.breadcrumb > li.active').text() + " · Microsoft Release Planner"); } }); function GoToNewEditor() { var editCmsUrlSegment = "EditInCms"; var currentUrl = window.location.href; if (currentUrl.indexOf('?') > -1) { var urlSegments = currentUrl.split("?"); window.location.href = window.location.origin + '/' + editCmsUrlSegment + window.location.pathname + '?' + urlSegments[1]; } else { window.location.href = window.location.origin + '/' + editCmsUrlSegment + window.location.pathname; } } </script> <script> if ('serviceWorker' in navigator) { navigator.serviceWorker.getRegistrations().then(function(registrations) { for(let registration of registrations) { registration.unregister(); }}).catch(function(err) { console.log('Service Worker unregister action failed: ', err); }); } </script> <!--Start Show Session Expire Warning Popup here --> </body> </html> <!-- Generated at 12/4/2024 7:25:53 PM --> <!-- Page OK -->