{"version":3,"file":"resource-center.js","sources":["../../node_modules/@progress-wad/resource-center/src/js/resource-center-strings.js","../../node_modules/@progress-wad/resource-center/src/js/resource-center-sanitize.js","../../node_modules/@progress-wad/resource-center/src/js/resource-center-page-url-service.js","../../node_modules/@progress-wad/resource-center/src/js/resource-center-api-service.js","../../node_modules/@progress-wad/resource-center/src/js/resource-center-filter-service.js","../../node_modules/@progress-wad/resource-center/src/js/resource-center-api-url-service.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-wug.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-ipswitch.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-chef-partners.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-chef-customers.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-chef-resources.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-chef-events.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-chef-webinars.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-progress-dci-overview.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-progress-dci-accordion.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-center-html-provider-progress-dci-connectors-list.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-center-html-provider-progress-user-awards-list.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-kemp-partners.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-flowmon-partners.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-kemp-videos.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-flowmon-resources.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-kemp-resources.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-flowmon-research-projects.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-chef-in-ipswitch-resources.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-progress.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-progress-webinars.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-progress-telerik-release-notes.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-progress-tutorials.js","../../node_modules/@progress-wad/resource-center/src/js/site-spicific-data/resource-item-html-provider-progress-sitefinity-integrations.js","../../node_modules/@progress-wad/resource-center/src/js/object-factory.js","../../node_modules/@progress-wad/resource-center/src/js/init.js"],"sourcesContent":["export class ResourceCenterStrings {\n static get contentTypesKeyName() {\n return \"content-types\";\n }\n\n static get languageKeyName() {\n return \"language\";\n }\n\n static get industriesKeyName() {\n return \"industries\";\n }\n\n static get solutionsKeyName() {\n return \"solutions\";\n }\n\n static get categoriesKeyName() {\n return \"categories\";\n }\n\n static get productsKeyName() {\n return \"products\";\n }\n\n static get searchtextKeyName() {\n return \"searchtext\";\n }\n\n static get pageKeyName() {\n return \"page\";\n }\n}\n","export const htmlEncode = (html = '') => html ? document.createElement('div').appendChild(document.createTextNode(html)).parentNode.innerHTML : html;\nexport const htmlDecode = (html = '') => html ? new DOMParser().parseFromString(html, 'text/html').documentElement.textContent : html;\n","import { ResourceCenterStrings } from \"./resource-center-strings.js\";\nimport { htmlEncode } from \"./resource-center-sanitize.js\";\n\nconst languageValues = {\n chinese: \"zh-TW\",\n japanese: \"ja\",\n swedish: \"sv\"\n}\n\nexport class ResourceCenterPageUrlService {\n constructor() {\n }\n\n getCurrentQueryParams() {\n const queryParams = new URLSearchParams(window.location.search);\n\n return queryParams;\n }\n\n getPageNumber() {\n const queryParams = this.getCurrentQueryParams();\n\n let pageNumber = 1;\n\n if (queryParams.has(ResourceCenterStrings.pageKeyName)) {\n pageNumber = Number(queryParams.get(ResourceCenterStrings.pageKeyName))\n }\n\n return pageNumber;\n\n }\n\n getResourcesLanguage() {\n const urlQueryString = this.getCurrentQueryParams();\n let resourceLanguage = urlQueryString.get(ResourceCenterStrings.languageKeyName);\n if (resourceLanguage == null) {\n resourceLanguage = this.getPageLanguage();\n }\n\n return resourceLanguage;\n }\n\n getPageLanguage() {\n let languageFromPath = window.location.pathname.split('/').filter(function (el) { return el != \"\"; })[0];\n if (languageFromPath == \"jp\") { languageFromPath = languageValues.japanese; }\n if (languageFromPath == \"tw\") { languageFromPath = languageValues.chinese; }\n if (languageFromPath == \"se\") { languageFromPath = languageValues.swedish; }\n\n let defaultLanguage = 'en';\n const languageInputField = document.getElementById(languageFromPath);\n\n if (languageInputField) {\n defaultLanguage = languageInputField.id;\n }\n\n return defaultLanguage;\n }\n\n transformSelectionsToQueryParams(page, shouldPushState, currentFilterSelection) {\n const queryParams = this.parseFilterSelectionToQueryParams(page, currentFilterSelection);\n let url = new URL(window.location);\n url.search = queryParams;\n\n if (shouldPushState) {\n ResourceCenterPageUrlService.push(url);\n }\n }\n\n parseFilterSelectionToQueryParams(page, currentFilterSelection) {\n let query = new URLSearchParams();\n if (Object.keys(currentFilterSelection.selectedTaxonomies).length > 0) {\n currentFilterSelection.selectedTaxonomies.forEach(taxonomies => {\n for (const taxon in taxonomies) {\n taxonomies[taxon].taxa.forEach(taxa => {\n const taxaDomElementById = document.querySelector(`[data-id*=\"${taxa}\"]`);\n if (taxaDomElementById) {\n const queryParamAlreadyExists = query.get(taxon) === taxaDomElementById.dataset.name\n if (!queryParamAlreadyExists) {\n query.append(taxon.toLowerCase(), taxaDomElementById.dataset.name);\n }\n }\n });\n }\n });\n }\n\n if(page > 0){\n query.append(ResourceCenterStrings.pageKeyName, page);\n }\n\n if (currentFilterSelection.searchTerm.length > 0) {\n query.append(ResourceCenterStrings.searchtextKeyName, htmlEncode(currentFilterSelection.searchTerm));\n }\n if (currentFilterSelection.language) {\n query.append(ResourceCenterStrings.languageKeyName, currentFilterSelection.language);\n }\n\n // Dispach event in order to be able to extend with custom filters query params\n let urlSearchParamsWrapper = {\n urlSearchParams: query\n };\n const onParseFilterToQueryParamsCompleted = new CustomEvent(\"onParseFilterToQueryParamsCompleted\", { detail: urlSearchParamsWrapper });\n document.dispatchEvent(onParseFilterToQueryParamsCompleted);\n\n return query.toString();\n }\n\n static push(url) {\n if (!ResourceCenterPageUrlService.validate(url)) {\n throw new Error('Please provide valid URL');\n }\n\n let newUrl = url.search;\n if(!newUrl){\n newUrl = (!url.hash) ? url.pathname : (url.pathname + url.hash);\n }\n\n window.history.pushState(null, null, newUrl);\n }\n\n static validate(url) {\n let result = false;\n\n try {\n new URL(url);\n result = true;\n }\n catch (error) {\n result = false;\n }\n\n return result;\n }\n}\n","\n\nconst styles = {\n block: \"-db\",\n none: \"-dn\"\n}\n\nexport class ResourceCenterApiService {\n constructor(apiUrlService, filterService, resourceCenterfactory, settings) {\n this.widgetSettings = settings;\n this.updateGrid = this.updateGrid.bind(this);\n this.apiUrlService = apiUrlService;\n this.filterService = filterService;\n this.pageSize = window.ResourceCenterSettings.ODataSettings.PageSize;\n this.cachedResponses = new Map();\n this.lastRequestURL;\n this.resourceCenterObjectFactory = resourceCenterfactory;\n }\n\n updateGrid(pageNumber) {\n //GET the API call based on DOM selection.\n const apiRequest = this.apiUrlService.generate(pageNumber, this.filterService.getSelection());\n const resourceItems = {};\n let html = \"\";\n const cachedReponse = this.cachedResponses.get(apiRequest);\n this.lastRequestURL = this.normalizeRequestUrl(apiRequest);\n\n if (cachedReponse) {\n cachedReponse.response.totalItemsCount > 0 ? this.showMissingResourcesMessage(false) : this.showMissingResourcesMessage(true);\n\n document.getElementById(this.widgetSettings.ItemsContainer).innerHTML = cachedReponse.html;\n return Promise.resolve(cachedReponse.response);\n }\n\n const result = fetch(apiRequest, {\n method: 'GET',\n })\n .then((response) => {\n const isLastUrlResponse = this.lastRequestURL === response.url;\n if (response.ok && (isLastUrlResponse || !response.url)) {\n return response.json();\n }\n else if (!isLastUrlResponse) {\n return Promise.reject(new Error(\"Awaiting last response.\"));\n }\n else {\n return Promise.reject(new Error(`There was a problem with your request - ${response.url}.`));\n }\n })\n .then(data => {\n resourceItems.resources = data.value;\n resourceItems.dataCount = data['@odata.count'];\n resourceItems.pagesCount = Math.ceil(resourceItems.dataCount / this.pageSize);\n\n if (resourceItems.dataCount == 0 || data.value.length == 0) {\n this.showMissingResourcesMessage(true);\n }\n else {\n this.showMissingResourcesMessage(false);\n let idsWithMissingRelatedMedia = [];\n data.value.forEach(item => {\n const imageFieldName = Object.keys(window.ResourceCenterSettings.ODataSettings.ExpandedFields.Image)[0];\n if (item[imageFieldName] && (item[imageFieldName].length == 0 || (item.File && item.File.length == 0))) {\n idsWithMissingRelatedMedia.push(item.Id);\n }\n });\n return this.getRelatedMedia_english(idsWithMissingRelatedMedia);\n }\n })\n .then(images => {\n resourceItems.images = images;\n return resourceItems;\n })\n .then(() => {\n if(this.widgetSettings.GroupingSettings){\n let groupedCollection = this.groupItems(resourceItems.resources, this.widgetSettings.GroupingSettings);\n groupedCollection.forEach(item => {\n html += this.itemHTML(item, resourceItems.images);\n });\n }\n else{\n resourceItems.resources.forEach(item => {\n html += this.itemHTML(item, resourceItems.images);\n });\n }\n document.getElementById(this.widgetSettings.ItemsContainer).innerHTML = html;\n const response = { totalItemsCount: resourceItems.dataCount, totalPagesCount: resourceItems.pagesCount, currentPage: pageNumber };\n this.cachedResponses.set(apiRequest, { response, html });\n\n return response;\n });\n\n return result;\n }\n\n normalizeRequestUrl(urlString) {\n const absoluteUrlString = window.location.origin + urlString;\n let encodedUrlString;\n try {\n encodedUrlString = new URL(absoluteUrlString).href;\n }\n catch {\n encodedUrlString = absoluteUrlString;\n }\n\n return encodedUrlString;\n }\n\n itemHTML(item, relatedMedia) {\n const itemHtml = this.resourceCenterObjectFactory.getResourceItemHtmlProvider(this.filterService).getItemHtml(item, relatedMedia);\n const result = itemHtml.trim().split('\\n').map(x => x.trim()).join('');\n\n return result;\n }\n\n getRelatedMedia_english(itemIds) {\n if (itemIds.length == 0) {\n return \"\";\n }\n\n const apiRequestUrl = this.apiUrlService.getImagesUrl_english(itemIds);\n const result = fetch(apiRequestUrl, {\n method: 'GET'\n }).then(response => {\n if (response.ok) {\n return response.json().then(data => {\n return data.value;\n });\n }\n });\n\n return result;\n }\n\n showMissingResourcesMessage(showMessage) {\n const missingResourcesMessageDiv = document.querySelector(`#${this.widgetSettings.MissingItemsContainer}`);\n if (missingResourcesMessageDiv) {\n let classToRemove = showMessage ? styles.none : styles.block;\n let classToAdd = classToRemove === styles.none ? styles.block : styles.none;\n\n missingResourcesMessageDiv.classList.remove(classToRemove);\n missingResourcesMessageDiv.classList.add(classToAdd);\n }\n }\n\n groupItems(initialCollection, groupingSettings){\n let itemsGroupingMap = new Map();\n let otherGroupData = {};\n otherGroupData.Title = 'Other';\n otherGroupData.Id = 'other';\n otherGroupData.UrlName = 'other';\n\n for(let item of initialCollection){\n let isInGroup = false;\n for(let taxon of item[groupingSettings.GroupingProperty]){\n if (groupingSettings.ParentTaxonToUseId && taxon.ParentId !== groupingSettings.ParentTaxonToUseId){\n continue;\n }\n\n this.addToGroupMap(item, taxon, itemsGroupingMap);\n\n isInGroup = true;\n }\n\n if(!isInGroup){\n this.addToGroupMap(item, otherGroupData, itemsGroupingMap);\n }\n }\n\n let itemsInColumns = [];\n\n for(let column of groupingSettings.GroupsData){\n let itemsInColumn = [];\n for(let taxonId of column){\n if(itemsGroupingMap.has(taxonId)){\n itemsInColumn.push(itemsGroupingMap.get(taxonId));\n itemsGroupingMap.delete(taxonId);\n }\n }\n itemsInColumns.push(itemsInColumn);\n }\n\n if (itemsGroupingMap.size > 0){\n let otherGroup = null;\n itemsGroupingMap.forEach((value, key) => {\n if(key !== 'other'){\n itemsInColumns[itemsInColumns.length - 1].push(value);\n }\n else{\n otherGroup = value;\n }\n });\n\n if(otherGroup){\n itemsInColumns[itemsInColumns.length - 1].push(otherGroup);\n }\n }\n\n return itemsInColumns;\n }\n\n addToGroupMap(item, data, map){\n if(map.has(data.Id)){\n map.get(data.Id).items.push(item);\n }\n else{\n let itemsGroup = {};\n itemsGroup.title = data.Title;\n itemsGroup.urlName = data.UrlName\n itemsGroup.items = [item]\n map.set(data.Id, itemsGroup);\n }\n }\n}\n","import { ResourceCenterStrings } from \"./resource-center-strings.js\";\nimport { htmlDecode } from \"./resource-center-sanitize.js\";\n\nexport class ResourceCenterFilterService {\n constructor(settings) {\n this.filterSettings = settings;\n }\n\n getSelection() {\n let selectedTaxonomies = [];\n if (this.filterSettings.TaxonomySelectors && this.filterSettings.TaxonomySelectors.length > 0) {\n this.filterSettings.TaxonomySelectors.forEach(selector => {\n const currentTaxon = this.getSelectedTaxonomies(selector);\n if (Object.keys(currentTaxon).length > 0) {\n selectedTaxonomies.push(currentTaxon)\n }\n });\n }\n\n const language = this.getSelectedLanguage();\n const searchTerm = this.getSearchParams();\n\n // WUG specific\n this.toggleClearFiltersButton(selectedTaxonomies);\n\n return { selectedTaxonomies, language, searchTerm };\n }\n\n markSelectedItemsBasedOnQueryParams(queryParams) {\n let querryParamsPertainingToFilterSelection = [\n ResourceCenterStrings.languageKeyName,\n ResourceCenterStrings.searchtextKeyName\n ]\n\n const customQueryParams = this.getQueryParamsFromDom();\n querryParamsPertainingToFilterSelection = querryParamsPertainingToFilterSelection.concat(customQueryParams);\n\n for (let currentKey of querryParamsPertainingToFilterSelection) {\n if (queryParams.has(currentKey)) {\n switch (currentKey) { \n case ResourceCenterStrings.languageKeyName:\n this.setSelectedLanguage(queryParams.get(currentKey));\n break;\n case ResourceCenterStrings.searchtextKeyName:\n this.populateSearchField(htmlDecode(queryParams.get(currentKey)));\n break;\n default:\n let keyValues = queryParams.getAll(currentKey);\n for (let currentValue of keyValues) {\n this.markElementAsSelected(\"data-name\", currentValue);\n }\n break;\n }\n }\n }\n }\n\n getSelectedTaxonomies(selector) {\n let taxonomies = {};\n let selectedTaxonomies = this.getTaxonomiesDomSelection(selector);\n\n if (selectedTaxonomies.length === 0) {\n return taxonomies;\n }\n\n selectedTaxonomies.forEach(taxon => {\n const taxonomyName = taxon.getAttribute(\"taxonomy\");\n if (taxonomyName) {\n const parent = taxon.closest(\"[taxaOperator][taxonomyOperator][taxonomy='\" + taxonomyName + \"']\");\n const taxonomyOperator = parent ? parent.getAttribute(\"taxonomyOperator\") : 'and';\n const taxaOperator = parent ? parent.getAttribute(\"taxaOperator\") : 'or';\n\n let taxaId = [];\n const taxonDataSet = taxon.dataset;\n if (taxonDataSet && taxon.dataset.id) {\n taxaId = taxon.dataset.id.split(\",\");\n }\n else {\n taxaId.push(taxon.getAttribute(\"id\"));\n }\n\n if (taxonomies.hasOwnProperty(taxonomyName)) {\n taxonomies[taxonomyName].taxa = taxonomies[taxonomyName].taxa.concat(taxaId);\n }\n else {\n taxonomies[taxonomyName] = { taxonomyOperator: taxonomyOperator, taxaOperator: taxaOperator, taxa: taxaId };\n }\n }\n });\n\n return taxonomies;\n }\n\n getSearchParams() {\n let searchParams = \"\";\n let searchInputValue = \"\";\n if (document.getElementById(this.filterSettings.SearchSelectors.input)) {\n searchInputValue = document.getElementById(this.filterSettings.SearchSelectors.input).value;\n }\n\n let activeSerchMessageElement = document.querySelector(`.${this.filterSettings.SearchSelectors.activeSerchMessageElement}`);\n let activeSearchMessageTermElement = document.querySelector(`.${this.filterSettings.SearchSelectors.activeSearchMessageTermElement}`);\n\n if (searchInputValue && searchInputValue.length > 0) {\n searchParams += searchInputValue;\n }\n\n if (activeSerchMessageElement && activeSearchMessageTermElement) {\n this.toggleActiveSearchMessage(searchParams, activeSerchMessageElement, activeSearchMessageTermElement, searchInputValue);\n }\n\n return searchParams;\n }\n\n getSelectedLanguage() {\n const selector = this.filterSettings.LanguageSelector;\n if (selector) {\n const selectedLanguage = document.querySelector(`input[class=${selector}]:checked, select[class=${selector}] option:checked`);\n if (!selectedLanguage) {\n return 'en';\n }\n return selectedLanguage.id;\n }\n return '';\n }\n\n setSelectedLanguage(language) {\n let languageField = document.getElementById(language) || document.getElementById('en');\n\n if (!languageField || !language) return;\n\n const domElementType = languageField.tagName.toLowerCase();\n switch (domElementType) {\n case 'option':\n languageField.selected = true;\n break;\n case 'input':\n languageField.checked = true;\n }\n }\n\n markElementAsSelected(propertyName, propertyValue, isSelected = true) {\n try {\n const domElement = document.querySelectorAll(`[${propertyName}='${propertyValue}']`);\n if (domElement) {\n const domElementType = domElement[0].tagName.toLowerCase();\n switch (domElementType) {\n case \"option\":\n domElement[0].selected = isSelected;\n this.triggerItemChangeEvent(domElement[0]);\n case \"input\":\n domElement[0].checked = isSelected;\n this.triggerItemChangeEvent(domElement[0]);\n }\n }\n }\n catch (ex) { }\n }\n\n clearSelection(pageUrlService, clearContentType = true) {\n const defaultLanguage = pageUrlService.getPageLanguage();\n let languageElement = document.querySelector(`#${defaultLanguage}`);\n if (languageElement) {\n languageElement.checked = true;\n }\n\n this.filterSettings.TaxonomySelectors.forEach(selector => {\n let selectedTaxonomies = this.getTaxonomiesDomSelection(selector);\n selectedTaxonomies.forEach(taxon => {\n //Ipswitch and WUG do not reset their content type selection when clearing filters.\n if (taxon.name !== ResourceCenterStrings.contentTypesKeyName) {\n var taxonType = taxon.tagName.toLowerCase();\n switch (taxonType) {\n case \"input\":\n taxon.checked = false;\n this.triggerItemChangeEvent(taxon);\n break;\n case \"option\":\n taxon.selected = false;\n this.triggerItemChangeEvent(taxon);\n break;\n }\n }\n })\n });\n\n if (clearContentType) {\n const defaultContentType = document.querySelector(\"input[title='all-resources']\");\n if (defaultContentType) {\n defaultContentType.checked = true;\n }\n }\n\n this.populateSearchField(\"\");\n }\n\n triggerItemChangeEvent(item) {\n item.dispatchEvent(new Event('change'));\n }\n\n populateSearchField(value) {\n let searchField = document.getElementById(this.filterSettings.SearchSelectors.input);\n if (searchField) {\n document.getElementById(this.filterSettings.SearchSelectors.input).value = value;\n }\n }\n\n toggleActiveSearchMessage(searchParams, activeSerchMessageElement, activeSearchMessageTermElement, searchInputValue) {\n if (searchParams) {\n activeSerchMessageElement.classList.remove(\"-dn\")\n\n activeSearchMessageTermElement.innerText = searchInputValue;\n }\n else {\n activeSerchMessageElement.classList.add(\"-dn\");\n\n activeSearchMessageTermElement.innerText = \"\";\n }\n }\n\n toggleClearFiltersButton(selectedTaxonomies) {\n if (this.filterSettings.ResourceFactorySettings && this.filterSettings.ResourceFactorySettings.ResourceItemHtmlProviderName === \"WUG\" && selectedTaxonomies) {\n const attributeName = 'data-resource-filter';\n const body = document.querySelector('body');\n selectedTaxonomies.length > 0 ? body.setAttribute(attributeName, 'true') : body.removeAttribute(attributeName);\n }\n }\n\n getTaxonomiesDomSelection(selector) {\n const selectedTaxonomiesInput = Array.from(document.querySelectorAll(`.${selector}:checked`));\n const selectedTaxonomiesOption = Array.from($(`.${selector}`).find(\":selected\"));\n const selectedTaxonomies = selectedTaxonomiesInput.concat(selectedTaxonomiesOption);\n\n return selectedTaxonomies;\n }\n getQueryParamsFromDom() {\n const attributeName = \"taxonomy\";\n const domItemsMarkedWithQueryParamsAttribute = Array.from(document.querySelectorAll(`[${attributeName}]`));\n let queryParams = [];\n\n domItemsMarkedWithQueryParamsAttribute.forEach(queryParam => {\n const queryParamKey = queryParam.getAttribute(attributeName);\n // The \"new Set()\" collection is not supported by IE 11;\n if (queryParams.indexOf(queryParamKey) === -1) {\n queryParams.push(queryParamKey);\n }\n });\n\n return queryParams;\n }\n}\n","import { ResourceCenterStrings } from \"./resource-center-strings.js\";\nimport { htmlEncode } from \"./resource-center-sanitize.js\";\n\nexport class ResourceCenterApiUrlService {\n constructor(settings) {\n this.widgetSettings = settings || {};\n this.oDataSettings = settings.ODataSettings || {};\n this.defaults = settings.UrlSettings || {\n filter: '$filter=',\n containsSegment: 'contains',\n expand: '$expand=',\n culture: 'sf_culture=',\n skip: '$skip=',\n take: '$top=',\n count: '$count=true',\n joinById: ' or id eq '\n }\n }\n\n generate(pageNumber, currentSelections) {\n let filterSegments = [];\n filterSegments = filterSegments.concat(this.oDataSettings.FilterSegments);\n const excludeTaxa = this.getTaxaUrls(this.oDataSettings.ExcludedTaxonomies, 'x ne');\n if (excludeTaxa) {\n filterSegments.push(`(${excludeTaxa})`);\n }\n\n let taxonomiesExpression = [];\n currentSelections.selectedTaxonomies.forEach(selectedTaxonomy => {\n const taxaUrl = this.getTaxaUrls(selectedTaxonomy, 'x eq');\n if (taxaUrl) {\n taxonomiesExpression.push(`(${taxaUrl})`);\n }\n });\n\n if (taxonomiesExpression.length > 0) {\n filterSegments.push(taxonomiesExpression.join(' and '));\n }\n const searchUrl = this.getApiSearchData(currentSelections.searchTerm);\n if (searchUrl) {\n filterSegments.push(searchUrl)\n }\n\n let queryParams = [];\n if (filterSegments.length > 0) {\n queryParams.push(`${this.defaults.filter}${filterSegments.join(' and ')}`);\n }\n const skipCount = this.widgetSettings.DisablePaging ? 0 : `${this.defaults.skip}${(pageNumber - 1) * this.oDataSettings.PageSize}`;\n const takeCount = this.widgetSettings.DisablePaging ? 0 : `${this.defaults.take}${this.oDataSettings.PageSize}`;\n const expands = this.getExpandedFieldsQuery();\n let culture = \"\";\n if (currentSelections.language) {\n culture = `${this.defaults.culture}${currentSelections.language}`;\n }\n\n queryParams.push(culture,\n expands,\n this.oDataSettings.SelectedFields,\n this.oDataSettings.OrderBy,\n skipCount,\n takeCount,\n this.defaults.count);\n\n const defaultUrl = this.oDataSettings.Endpoint + '?' + queryParams.filter(removeEmptyEntries => removeEmptyEntries).join('&');\n let apiRequestUrl = {\n url: defaultUrl\n };\n const onOdataUrlGenerated = new CustomEvent(\"onResourceCenterOdataUrlGenerationCompleted\", { detail: apiRequestUrl });\n document.dispatchEvent(onOdataUrlGenerated);\n\n return apiRequestUrl.url;\n }\n\n getExpandedFieldsQuery() {\n let query = [];\n\n const imageQuery = this.getImageQuery();\n if (imageQuery) {\n query.push(imageQuery);\n }\n\n if (this.oDataSettings.ExpandedFields.CommonFields.length > 0) {\n query.push(this.oDataSettings.ExpandedFields.CommonFields.join(','));\n }\n\n return query.length > 0 ? `${this.defaults.expand}${query.join(',')}` : \"\";\n }\n\n getTaxaUrls(taxonomies, taxaComparer) {\n let url = \"\";\n if (!taxonomies || Object.keys(taxonomies).length === 0) {\n return url;\n }\n let count = 0;\n for (let taxonomyName in taxonomies) {\n\n if (count > 0) { url += ' ' + taxonomies[taxonomyName].taxonomyOperator + ' ' }\n let opetator = taxonomies[taxonomyName].taxaOperator || 'or';\n url += taxonomyName + (opetator == 'or' ? '/any(x:' + taxaComparer + ' ' : '/all(x:' + taxaComparer + ' ');\n url += taxonomies[taxonomyName].taxa.join(' ' + opetator + ' ' + taxaComparer + ' ') + ')';\n\n count++;\n }\n url = url.replace(ResourceCenterStrings.categoriesKeyName, 'category');\n url = url.replace(ResourceCenterStrings.contentTypesKeyName, 'contenttypes');\n return url;\n }\n\n getApiSearchData(searchTerm) {\n let search = \"\";\n if (searchTerm.length > 0) {\n let segments = []\n const sanitizedTerm = this.sanitizeValueForUrl(searchTerm);\n\n this.oDataSettings.ContainsFields.forEach(field => {\n segments.push(`${this.defaults.containsSegment}(${field},'${sanitizedTerm}')`)\n });\n\n if (segments.length > 0) {\n search += `(${segments.join(' or ')})`;\n }\n }\n\n return search;\n }\n\n sanitizeValueForUrl(value) {\n let cleanValueFromSpecialCharacters = value.replace(\"'\", \"''\");\n return encodeURIComponent(htmlEncode(cleanValueFromSpecialCharacters));\n }\n\n getImagesUrl_english(resourceIds) {\n let url = '';\n const imageQuery = this.getImageQuery();\n if (imageQuery) {\n url = `${this.oDataSettings.Endpoint}?${this.defaults.filter}(id eq ${resourceIds.join(this.defaults.joinById)})&$select=id&${this.defaults.expand}${imageQuery}`\n }\n return url;\n }\n\n getImageQuery() {\n if (this.oDataSettings.ExpandedFields.Image) {\n return Object.values(this.oDataSettings.ExpandedFields.Image)[0];\n }\n return \"\";\n }\n}\n","export class ResourceItemHtmlProvider {\n constructor(filterService) {\n this.filterService = filterService;\n }\n\n getItemHtml(item, relatedMedia) {\n return \"\";\n }\n\n setRelatedMedia(item, relatedMedia) {\n const imageFieldName = Object.keys(window.ResourceCenterSettings.ODataSettings.ExpandedFields.Image)[0];\n let imageData;\n\n if (item[imageFieldName]) {\n if (Array.isArray(item[imageFieldName])){\n imageData = item[imageFieldName][0];\n }\n else {\n imageData = item[imageFieldName];\n }\n }\n\n let fileData;\n\n let englishVersion;\n if (relatedMedia && relatedMedia.length > 0) {\n englishVersion = relatedMedia.filter(media => { return media.Id === item.Id })[0]\n }\n\n // Fallback to english version.\n if (!imageData) {\n imageData = {};\n if (englishVersion && englishVersion[imageFieldName][0]) {\n imageData = englishVersion[imageFieldName][0];\n }\n }\n\n if (item.NotGated) {\n fileData = item.File[0];\n if (!fileData && (englishVersion && englishVersion.File)) {\n fileData = englishVersion.File[0];\n }\n }\n\n return { imageData, fileData };\n }\n\n getResourceUrl(contentTypeId) {\n let selectedLanguage = this.filterService.getSelectedLanguage();\n\n if (!selectedLanguage){\n selectedLanguage = \"en\";\n }\n\n const localizedUrl = window.localizedUrls[contentTypeId];\n let resourceUrl = \"\";\n\n if (localizedUrl) {\n resourceUrl = localizedUrl.filter(e => e.CultureName == selectedLanguage)[0].UrlName;\n }\n\n return resourceUrl;\n }\n\n encodeHtml(text){\n if(!text){\n return text;\n }\n \n var p = document.createElement(\"p\");\n p.textContent = text;\n var result = p.innerHTML;\n return result;\n }\n}\n","import { ResourceItemHtmlProvider } from \"./resource-item-html-provider.js\";\n\nexport class ResourceItemHtmlProviderWug extends ResourceItemHtmlProvider {\n constructor(filterService) {\n super(filterService);\n this.cssClasses = {\n col: 'col-4 -xl-half -mb3 -m-mb3',\n resource: 'Res-wrp',\n resorceImageRatio: 'Embed Embed--16by9 -bg-black',\n resorceImage: 'Section-bg',\n resourceContent: 'Res-content',\n resourceType: 'Res-label',\n webinarStartDate: 'Res-date',\n resourceSummary: 'Res-summary',\n resourceCTA: 'Res-cta',\n }\n\n this.monthNamesMap = new Map();\n this.monthNamesMap.set(\"en\", [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"Decembеr\"]);\n this.monthNamesMap.set(\"de\", [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"]);\n this.monthNamesMap.set(\"fr\", [\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"]);\n this.monthNamesMap.set(\"ja\", [\"1月\", \"2月\", \"三月\", \"4月\", \"五月\", \"六月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"]);\n this.monthNamesMap.set(\"pt\", [\"Janeiro\", \"Fevereiro\", \"Marcha\", \"Abril\", \"Maio\", \"Junho\", \"Julho\", \"Agosto\", \"Setembro\", \"Outubro\", \"Novembro\", \"Dezembro\"]);\n this.monthNamesMap.set(\"es\", [\"Enero\", \"Febrero\", \"Marzo\", \"Abril\", \"Mayo\", \"Junio\", \"Julio\", \"Agosto\", \"Septiembre\", \"Octubre\", \"Noviembre\", \"Diciembre\"]);\n this.monthNamesMap.set(\"zh-TW\", [\"一月\", \"二月\", \"遊行\", \"四月\", \"可能\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十月\"]);\n this.monthNamesMap.set(\"nl\", [\"Januari\", \"Februari\", \"Maart\", \"April\", \"Mei\", \"Juni\", \"Juli\", \"Augustus\", \"September\", \"Oktober\", \"November\", \"Decembre\"]);\n this.monthNamesMap.set(\"sv\", [\"Januari\", \"Februari\", \"Mars\", \"April\", \"Maj\", \"Juni\", \"Juli\", \"Augusti\", \"September\", \"Oktober\", \"November\", \"December\"]);\n }\n\n getItemHtml(item, relatedMedia) {\n const { col, resource, resorceImageRatio, resorceImage, resourceType, webinarStartDate, resourceSummary, resourceCTA, resourceContent } = this.cssClasses;\n const { imageData } = super.setRelatedMedia(item, relatedMedia);\n const { Title, CTAText, UrlName: resourcePath, Summary, StartDate, ExternalUrl, CTAUrl } = item;\n const imageFallback = 'https://d34smkdb128qfi.cloudfront.net/images/librariesprovider2/default-album/resources/resource-default-thumbnail.jpg';\n const contentType = item.resourceCategory[0];\n const pageUrl = super.getResourceUrl(item.contenttypes[0]);\n const featuredLabel = Boolean(Number(item.IsFeatured)) ? '
${item.Description ? this.encodeHtml(item.Description) : ''}
\n Visit Partner Site\n${this.encodeHtml(item.Summary)}
\n ${this.encodeHtml(item.CTAText)}\n${this.encodeHtml(item.Summary)}
`;\n const timeElement = item.IsUpcomming ? ``: '';\n const pageUrl = super.getResourceUrl(item.contenttype[0]);\n const resourceUrl = `${pageUrl}/${resourcePath}`;\n const target = fileData != null ? `target=\"_blank\"` : \"\";\n const html = `\n${item.resourceCategory[0].Title}
\n${this.encodeHtml(item.Summary)}
\r\n ${item.IsUpcomming ? \"Register\" : \"Watch Now\"}\r\n${labelText}
\n${Summary}…
\n${this.encodeHtml(item.Summary)}
`;\n const timeElement = item.IsUpcomming ? ``: '';\n const pageUrl = super.getResourceUrl(item.contenttypes[0]);\n let resourceUrl;\n\n if (CTAUrl) {\n resourceUrl = CTAUrl;\n }\n else {\n resourceUrl = `${pageUrl}/${resourcePath}`;\n }\n \n const target = fileData != null ? `target=\"_blank\"` : \"\";\n const html = `\n${item.resourceCategory[0].Title}
\n${webinarLabel}
\n