/* global SCS, SCSRenderAPI, process */ import { getHeaderData } from './menu.mjs'; export default class { constructor(contentClient, noPermissionToView, SCSCompileAPI, utils, modules) { this.contentClient = contentClient; this.noPermissionToView = noPermissionToView || 'You do not have permission to view this asset'; this.libs = this.contentClient.getLibs() || {}; this.marked = this.libs.marked || window.marked; this.isCompilation = !!SCSCompileAPI; this.SCSCompileAPI = SCSCompileAPI; this.utils = utils; this.initializeModules(modules); } initializeModules(modules) { if (this.isCompilation) { this.localizationPath = '../../../themes/IR-Standard-Master-Theme/assets/js/localization/localization.mjs'; if (modules && modules.localizationModule) { this.localization = modules.localizationModule; } this.ImageRenditionFormats = modules.ImageRenditionFormats; this.ImageRenditionTypes = modules.ImageRenditionTypes; } else { this.localizationPath = SCSRenderAPI.getThemeUrlPrefix() + '/assets/js/localization/localization.mjs'; import(this.localizationPath) .then((moduleLocalization) => { this.localization = new moduleLocalization.default({ SCSCompileAPI: this.SCSCompileAPI, SiteUtils: this.localUtils, }); }) .catch((err) => { console.log('HEADER:LOCALIZATION:MODULE:NOT:INITIALIZED:', err); }); } } getRefItems(ids) { if (ids.length === 0) { return Promise.resolve({}); } else { return this.contentClient.getItems({ ids: ids, }); } } findReferenceFieldIds(referencedItems, fields) { const referencedIds = []; referencedItems.forEach((referencedItem) => { if (fields[referencedItem]) { (Array.isArray(fields[referencedItem]) ? fields[referencedItem] : [fields[referencedItem]]).forEach( (entry) => { if (entry) { if (!entry.reference || entry.reference.isAccessible) { referencedIds.push(entry.id); } else { entry.referenceInaccessible = this.noPermissionToView; } } } ); } }); return referencedIds; } updateDigitalAssetURLs(digitalAssetFields, fields) { digitalAssetFields.forEach((digitalAssetField) => { if (fields[digitalAssetField]) { (Array.isArray(fields[digitalAssetField]) ? fields[digitalAssetField] : [fields[digitalAssetField]] ).forEach((entry) => { if (entry) { if (!entry.reference || entry.reference.isAccessible) { if (entry.type === 'Video' || entry.type === 'File') { entry.showName = true; } else { entry.url = this.contentClient.getRenditionURL({ id: entry.id, }); } } else { entry.referenceInaccessible = this.noPermissionToView; } } }); } }); } updateMarkdownFields(markdownFields, fields) { const parseMarkdown = (mdText) => { if (mdText && /^\n\r/i.test(mdText)) { mdText = mdText.replace('\n\r', ''); mdText = this.marked(mdText); } return mdText; }; markdownFields.forEach((markdownField) => { if (fields[markdownField]) { if (Array.isArray(fields[markdownField])) { fields[markdownField] = fields[markdownField].map((entry) => { return parseMarkdown(this.contentClient.expandMacros(entry)); }); } else { fields[markdownField] = parseMarkdown(this.contentClient.expandMacros(fields[markdownField])); } } }); } updateRichTextFields(richTextFields, fields) { richTextFields.forEach((richTextField) => { if (fields[richTextField]) { if (Array.isArray(fields[richTextField])) { fields[richTextField] = fields[richTextField].map((entry) => { return this.contentClient.expandMacros(entry); }); } else { fields[richTextField] = this.contentClient.expandMacros(fields[richTextField]); } } }); } updateDateTimeFields(dateTimeFields, fields) { const dateToMDY = (date) => { if (!date) { return ''; } const dateObj = new Date(date); const options = { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', }; const formattedDate = dateObj.toLocaleDateString('en-US', options); return formattedDate; }; dateTimeFields.forEach((dateTimeField) => { if (fields[dateTimeField]) { if (Array.isArray(fields[dateTimeField])) { fields[dateTimeField] = fields[dateTimeField].map((entry) => { return (entry.formatted = dateToMDY(entry.value)); }); } else { fields[dateTimeField].formatted = dateToMDY(fields[dateTimeField].value); } } }); } addReferencedItems(referencedItems, results, fields) { ((results && results.items) || []).forEach((item) => { referencedItems.forEach((referencedItem) => { (Array.isArray(fields[referencedItem]) ? fields[referencedItem] : [fields[referencedItem]]).forEach( (entry) => { if (entry && entry.id === item.id) { entry.contentItem = item; const digitalAssetFields = Object.keys(item.fields).filter((key) => { const field = item.fields[key]; return field && typeof field === 'object' && field.typeCategory === 'DigitalAssetType'; }); this.updateDigitalAssetURLs(digitalAssetFields, item.fields); } } ); }); }); } async getLocalizationModule() { if (this.localization) { return this.localization; } else { const moduleLocalization = await import(this.localizationPath).then((moduleLocalization) => { return moduleLocalization; }); this.localization = new moduleLocalization.default({ SCSCompileAPI: this.SCSCompileAPI, SiteUtils: this.localUtils, }); return this.localization; } } async getLanguageAsset(contentItemData) { console.log('HEADER:GET:LANGUAGE:'); if (contentItemData === undefined || contentItemData == null || contentItemData.length <= 0) { console.log('HEADER:CHECKFALLBACKS:EMPTY:OBJECT'); return contentItemData; } const localization = await this.getLocalizationModule(); return localization.getLanguageAsset(contentItemData); } /** * Returns the content item header data for the given content id. Returns cache data if available. * * @param {string} contentId * @param {string} cacheName * @returns */ async queryContent(contentId, cacheName) { if (!this.isCompilation && window.parent.contentCache[cacheName]) { return window.parent.contentCache[cacheName]; } return await getHeaderData({ channelToken: this.contentClient.getInfo().channelToken, headerItemId: contentId, graphql: this.contentClient.graphql, }); } transformUpperHeaderLinks(item) { const itemTransformed = item; this.updateMarkdownFields(['link'], item.fields); if (item.fields) { item.fields.link_url = item.fields.fieldLink; } if (this.isCompilation) { item = this.utils.formatCtaLinks(this.SCSCompileAPI, item, 'header'); } else { item = this.utils.formatCtaLinks(item, 'header'); } itemTransformed.fields['fieldLink'] = item.fields.full_link; itemTransformed.fields['linkTitle'] = item.fields.link_title; itemTransformed.fields['linktype'] = item.fields.linktype || ''; itemTransformed.fields['siteid'] = item.fields.siteid || ''; itemTransformed.fields['target'] = item.fields.target || ''; //class to make the link like a button itemTransformed.fields.link_format_class = 'GDHeaderTop__CTA__a brandbackground'; const linkFormat = itemTransformed.fields.linkFormat || itemTransformed.fields.link_format; if (linkFormat && linkFormat.toLowerCase().indexOf('link') > -1) { //this class will make it look like link instead of button itemTransformed.fields.link_format_class = 'GDHeaderTop__Home__a'; } return itemTransformed; } getSiteId() { if (this.isCompilation) { return this.SCSCompileAPI.siteInfo.properties.customProperties.SITE_ID || this.SCSCompileAPI.getSiteId(); } else { return SCS.siteInfo.properties.customProperties.SITE_ID || SCS.siteId; } } /** * @param {IR | RAW | ISO} mode * @returns IR: lg-rg, RAW: lg-x-RG|lg-RG, ISO: lg-RG */ getPageLanguageCode(mode = 'ND') { let localCode = 'en'; if (this.isCompilation) { localCode = this.SCSCompileAPI.pageLocale || localCode; } else { localCode = (SCSRenderAPI && SCSRenderAPI.getPageLocaleAlias()) || SCS.localeAlias || SCS.pageLanguageCode || localCode; } mode = mode.toUpperCase(); if (mode == 'IR') { localCode = localCode.toLowerCase(); } if (mode == 'RAW') { if (this.isCompilation) { localCode = this.SCSCompileAPI.siteInfo.properties.localeAliases[localCode] || localCode; } else { localCode = SCS.siteInfo.properties.localeAliases[localCode] || localCode; } } if (mode == 'ISO') { if (this.isCompilation) { localCode = this.SCSCompileAPI.siteInfo.properties.localeAliases[localCode] || localCode; } else { localCode = SCS.siteInfo.properties.localeAliases[localCode] || localCode; } if (localCode.indexOf('-x-') > -1) { const ls = localCode.split('-x-'); if (ls.length > 0) { localCode = ls[0] + '-' + ls[ls.length - 1].toUpperCase(); } } } console.log('HEADER2:MODE:PAGELANG', mode, localCode); return localCode; } getLanguageCodeNormalized(locale) { let languageCode = locale ? locale : ''; const languageCodeSplit = languageCode.split('-'); languageCode = languageCodeSplit[0]; if (languageCodeSplit[languageCodeSplit.length - 1] && languageCodeSplit[1]) { languageCode = languageCode + '-' + languageCodeSplit[languageCodeSplit.length - 1]; } return languageCode; } getLanguageFromLocale(locale) { let languageCode = locale ? locale : ''; const languageCodeSplit = languageCode.split('-'); languageCode = languageCodeSplit[0]; return languageCode; } getCountryCodeFromLocale(locale) { let countryCode = ''; const localeSplit = locale.split('-'); if (localeSplit.length > 1) { countryCode = localeSplit[localeSplit.length - 1].toLowerCase(); } else { countryCode = ''; } return countryCode; } getRedirectRules(model) { if (model.redirectRules) { return model.redirectRules; } else { model.redirectRules = []; const redirectJson = model.fields.domain_redirect_rules_json || model.fields.domainRedirectRulesJson || {}; if (redirectJson && redirectJson.list && redirectJson.list.length > 0) { model.redirectRules = redirectJson.list.reduce((acc, cur, i) => { let locale = ''; if (cur.locale.indexOf('-go') > -1) { locale = cur.locale; } else { locale = this.getLanguageCodeNormalized(cur.locale); } acc[locale.toLowerCase()] = cur.domain; return acc; }, {}); } return model.redirectRules; } } setCookies(url, siteId, lang, userRegLang) { document.cookie = 'url=' + url + '; path=/'; document.cookie = siteId + '#lang=' + lang.toLowerCase() + '; path=/'; document.cookie = 'userRegLang' + '#lang=' + userRegLang.toLowerCase() + '; path=/'; this.cookieLang = { cookieLanguageCode: lang.toLowerCase(), userRegLang: userRegLang.toLowerCase() }; } getCookies() { if (this.cookieLang) { return this.cookieLang; } else { const siteId = SCS.siteId; let cookieLanguageCode = 'ND'; let userRegLang = 'ND'; const cookieArr = document.cookie.split(';').map((ck) => { return { [ck.split('=')[0].trim()]: ck.split('=')[1] }; }); cookieArr.forEach((item) => { if (item[siteId + '#lang']) { cookieLanguageCode = item[siteId + '#lang']; } if (item['userRegLang#lang']) { userRegLang = item['userRegLang#lang']; } }); this.cookieLang = { cookieLanguageCode: cookieLanguageCode, userRegLang: userRegLang }; return this.cookieLang; } } setEventCountrySelector(countryCollection) { for (let i = 0; i < countryCollection.length; i++) { const country = countryCollection[i]; country.addEventListener('click', (event) => { const url = country.getAttribute('href'); const lang = country.dataset['cx-lang'] || country.dataset.cxLang; const countryCode = country.dataset['cx-flag'] || country.dataset.cxFlag; const siteId = country.dataset['cx-site'] || SCS.siteId; this.setCookies(url, siteId, lang, lang + '-' + countryCode); }); } } /** * Creates the header menu with all the child elements. * * @param {content} model */ callMenu(model) { const self = this; var id1 = 1; var menu = []; var styleLevelGlobal; const repetedItems = []; for (let i = 0; i < model.fields?.level1Items?.length; i++) { const navNode = model.fields.level1Items[i]; let repeted = false; repetedItems.forEach((item) => { if (item == navNode?.name) { repeted = true; } }); !repeted ? repetedItems.push(navNode?.name) : (navNode.fields.headerChildItems = []); } for (let i = 0; i < model.fields?.level1Items?.length; i++) { const navNode = model.fields.level1Items[i]; addNavMenu(navNode); } model['menu'] = menu; function addNavMenu(navNode) { const name = navNode?.type.indexOf('-LinkItem') > -1 ? navNode?.fields?.linkTitle : getCurrentNodeName(navNode); let image = navNode?.type.indexOf('-LinkItem') > -1 ? '' : getCurrentNodeImage(navNode); if (navNode?.fields?.mediaFile?.fields?.renditions) { if (navNode.fields.mediaFile.fields.renditions[1]) { image = navNode.fields.mediaFile.fields.renditions[1].file.url; } else { image = navNode.fields.mediaFile.fields.renditions[0].file.url; } } navNode = manageCTALink(navNode); const link_url = navNode.fields.full_link; const linktype = navNode.fields.linktype || ''; const siteid = navNode.fields.siteid || ''; const target = navNode.fields.target || '_self'; const currentNode = { id: id1, name: name, image: image, dd_after: '', afterTriangle: '', link: link_url, style: '', children: [], showSubMenu: '', linktype: linktype, siteid: siteid, target: target, }; if (navNode?.fields?.headerChildItems?.length > 0) { addSubMenu(navNode, currentNode, 2); menu.push(currentNode); } else { menu.push(currentNode); } id1++; } function addSubMenu(navNode, currentNode, levelNumber) { let style = '', scroller = ''; const dynamicID = []; const mobiledynamicID = []; let childNode; for (let k = 0; k < navNode?.fields?.headerChildItems?.length; k++) { dynamicID.push('S' + id1 + k); mobiledynamicID.push('MS' + id1 + k); } styleLevelGlobal = 0; currentNode.style = 'width: 250px; left: -100px;'; for (let j = 0; j < navNode?.fields?.headerChildItems?.length; j++) { childNode = navNode?.fields?.headerChildItems[j] ? navNode?.fields?.headerChildItems[j] : ''; currentNode.dd_after = 'dd_after'; currentNode.afterTriangle = 'afterTriangle'; currentNode.showSubMenu = true; const name = childNode?.type?.indexOf('-LinkItem') > -1 ? childNode?.fields?.linkTitle : getCurrentNodeName(childNode); const header_description = childNode?.fields?.headerDescription; let image = childNode?.type?.indexOf('-LinkItem') > -1 ? '' : getCurrentNodeImage(childNode); if (childNode?.fields?.mediaFile?.fields?.renditions) { if (childNode.fields.mediaFile.fields.renditions[1]) { image = childNode.fields.mediaFile.fields.renditions[1].file.url; } else { image = childNode.fields.mediaFile.fields.renditions[0].file.url; } } style = image ? 'width: 500px; left: -200px;' : style; currentNode.style = style; let dd_after2 = image ? ' dd_after2' : ''; if (childNode?.fields?.headerChildItems?.length > 0) { dd_after2 = ' dd_after2'; } childNode = manageCTALink(childNode); const link_url = childNode.fields.full_link; const linktype = childNode.fields.linktype || ''; const siteid = childNode.fields.siteid || ''; const target = childNode.fields.target || '_self'; if (navNode?.fields?.headerChildItems) { scroller = navNode?.fields?.headerChildItems?.length > 6 ? '
  • ' : ''; } const currentChildNode = { id_D: dynamicID[j], id_M: mobiledynamicID[j], name: name, header_description: header_description, image: image, dd_after2: dd_after2, link: link_url, scroller: scroller, style: style, children: [], showSubMenu: '', isLastItem: '', allChildrenHide: '', linktype: linktype, siteid: siteid, target: target, }; currentNode.children.push(currentChildNode); let repeted = false; repetedItems.forEach((item) => { if (item == childNode.name) { repeted = true; } }); !repeted ? repetedItems.push(childNode.name) : (childNode.fields.headerChildItems = []); if (childNode?.fields?.headerChildItems) { if (childNode?.fields?.headerChildItems?.length > 0) { addSubMenuColumns( childNode, levelNumber + 1, dynamicID[j], mobiledynamicID[j], 1, currentChildNode ); } else { currentChildNode.isLastItem = true; } } else { currentChildNode.isLastItem = true; } } if (styleLevelGlobal >= 3) { currentNode.style = 'width: 1000px; left: -400px;'; } else if (styleLevelGlobal == 2) { currentNode.style = 'width: 770px; left: -400px;'; } else if (styleLevelGlobal == 1) { currentNode.style = 'width: 500px; left: -200px;'; } } function addSubMenuColumns( currentNode, levelNumber, currentDynamicID, mobilecurrentDynamicID, styleLevel, currentChildNode ) { styleLevelGlobal = styleLevel > styleLevelGlobal ? styleLevel : styleLevelGlobal; let addedLevel = true; for (let k = 0; k < currentNode?.fields?.headerChildItems?.length; k++) { const childNode = currentNode.fields.headerChildItems[k] ? currentNode.fields.headerChildItems[k] : ''; currentChildNode.showSubMenu = true; currentChildNode.dd_after2 = 'dd_after2'; const name = childNode?.type?.indexOf('-LinkItem') > -1 ? childNode?.fields?.linkTitle : getCurrentNodeName(childNode); const header_description = childNode?.fields?.headerDescription; let image = childNode?.type?.indexOf('-LinkItem') > -1 ? '' : getCurrentNodeImage(childNode); if (childNode?.fields?.mediaFile?.fields?.renditions) { if (childNode.fields.mediaFile.fields.renditions[1]) { image = childNode.fields.mediaFile.fields.renditions[1].file.url; } else { image = childNode.fields.mediaFile.fields.renditions[0].file.url; } } const isLastItem = childNode?.fields?.headerChildItems ? childNode?.fields?.headerChildItems?.length > 0 ? false : true : true; manageCTALink(childNode); const link_url = childNode.fields.full_link; const linktype = childNode.fields.linktype || ''; const siteid = childNode.fields.siteid || ''; const target = childNode.fields.target || '_self'; currentChildNode.style = currentChildNode.style === 'width: 500px; left: -200px;' && image ? 'width: 770px; left: -400px;' : currentChildNode.style; const currentChildNodeInternal = { id_D: currentDynamicID + k, id_M: mobilecurrentDynamicID + k, name: name, header_description: header_description, image: image, link: link_url, dd_after2: '', style: '', children: [], showSubMenu: '', isLastItem: isLastItem, linktype: linktype, siteid: siteid, target: target, }; currentChildNode.children.push(currentChildNodeInternal); let repeted = false; repetedItems.forEach((item) => { if (item == childNode.name) { repeted = true; } }); !repeted ? repetedItems.push(childNode.name) : (childNode.fields.headerChildItems = []); if (childNode?.fields?.headerChildItems) { if (childNode?.fields?.headerChildItems?.length > 0) { addSubMenuColumns( childNode, levelNumber + 1, currentDynamicID + k, mobilecurrentDynamicID + k, styleLevel + 1, currentChildNodeInternal ); currentChildNodeInternal.dd_after2 = currentChildNodeInternal.image ? 'dd_after2' : currentChildNodeInternal.dd_after2; currentChildNodeInternal.style = currentChildNode.style === 'width: 770px; left: -400px;' && image ? 'width: 1000px; left: -400px;' : currentChildNodeInternal.style; } else { currentChildNodeInternal.dd_after2 = currentChildNodeInternal.image ? 'dd_after2' : currentChildNodeInternal.dd_after2; } } else { currentChildNodeInternal.dd_after2 = currentChildNodeInternal.image ? 'dd_after2' : currentChildNodeInternal.dd_after2; styleLevelGlobal = currentChildNodeInternal.image && addedLevel ? styleLevelGlobal + 1 : styleLevelGlobal; addedLevel = currentChildNodeInternal.image ? false : addedLevel; } } } function manageCTALink(currentNode) { if (currentNode?.fields?.mediaFile) { self.updateDigitalAssetURLs(['media', 'mediaFile'], currentNode.fields.mediaFile.fields); currentNode.fields.full_link = currentNode?.fields?.mediaFile?.fields?.file ? currentNode?.fields?.mediaFile?.fields?.file?.url : ''; } else { self.updateMarkdownFields(['link'], currentNode.fields); if (self.isCompilation) { currentNode = self.utils.formatCtaLinks(self.SCSCompileAPI, currentNode, 'header'); } else { currentNode = self.utils.formatCtaLinks(currentNode, 'header'); } } return currentNode; } function getCurrentNodeName(currentNode) { let name = ''; if (currentNode?.fields?.headerTitle) { name = currentNode.fields.headerTitle; } else if (currentNode?.fields?.fieldListpagetitle) { name = currentNode.fields.fieldListpagetitle; } else { name = currentNode.name; } return name; } function getCurrentNodeImage(currentNode) { let image = ''; const fields = currentNode && currentNode.fields; if (fields) { if (fields.headerMedia?.id) { if (self.isCompilation && self.ImageRenditionFormats && self.ImageRenditionTypes) { image = self.utils.getRenditionURL( { id: currentNode.fields.headerMedia.id, type: self.ImageRenditionTypes.small, format: self.ImageRenditionFormats.webp, nativeFormat: currentNode.fields.headerMedia?.fileExtension, }, self.contentClient ); } else { image = self.contentClient.getRenditionURL({ id: currentNode.fields.headerMedia.id }); } } else if (fields.fieldListPageMedia?.id) { if (self.isCompilation && self.ImageRenditionFormats && self.ImageRenditionTypes) { image = self.utils.getRenditionURL( { id: currentNode.fields.fieldListPageMedia.id, type: self.ImageRenditionTypes.small, format: self.ImageRenditionFormats.webp, nativeFormat: currentNode.fields.fieldListPageMedia?.fileExtension, }, self.contentClient ); } else { image = self.contentClient.getRenditionURL({ id: currentNode.fields.fieldListPageMedia.id }); } } } return image; } return model; } setRedBanner(model) { model.redBanner = { choose: '', continue: '' }; const languageSelector = model && model.fields ? model.fields.languageSelector : {}; if (languageSelector?.fields) { model.redBanner.choose = languageSelector.fields.choose; model.redBanner.continue = languageSelector.fields.continue; } return model; } setLanguageSelector(model) { const languageSelector = model && model.fields ? model.fields.languageSelector : {}; if (languageSelector?.fields) { languageSelector.blank_gif = this.utils.getSiteCSSImage('blank.gif'); const lang = this.getPageLanguageCode('ir'); let pageLinkStructure; if (this.isCompilation) { const currentPage = this.SCSCompileAPI.structureMap[this.SCSCompileAPI.navigationCurr]; pageLinkStructure = this.utils .getPageUrl(this.SCSCompileAPI.structureMap, currentPage.name) .split('/' + lang); } else { pageLinkStructure = window.location.href.split('/' + lang); } let count = 0; let found = false; let pageLt; if (this.isCompilation) { pageLt = this.SCSCompileAPI.pageModel.properties.pageLayout; } else { pageLt = SCSRenderAPI.pageModel.properties.pageLayout; } let sp = pageLinkStructure[1] ? pageLinkStructure[1] : ''; if (pageLt && pageLt.indexOf('404') > -1) { sp = ''; } const redirectRules = this.getRedirectRules(model); const continents = languageSelector.fields && languageSelector.fields.continents; (continents?.list || []).forEach((continent) => { continent['ContinentId'] = continent?.ContinentName.replace(/\s+/g, ''); continents.list[count]['id'] = count; count++; const newCountries = []; (continent.countries?.list || []).forEach((country) => { country.CountryCode = country?.CountryCode.toLowerCase(); const locales = this.utils.getLocaleForCountry(country.CountryCode); if (locales.length == 0) { locales.push('en'); } (locales || []).forEach((locale) => { const newCountry = Object.assign({}, country); if ( model.CurrentCountryCode.toLowerCase() === country?.CountryCode.toLowerCase() && locale.split('-')[0].toLowerCase() == lang.split('-')[0].toLowerCase() ) { model['labelLanguageSelector'] = country?.CountryName + ' (' + locale.split('-')[0].toUpperCase() + ')'; found = true; } newCountry.CountryCode = newCountry.CountryCode.toLowerCase(); newCountry.languageCode = locale.split('-')[0].toUpperCase(); if (redirectRules[locale]) { newCountry.full_link = redirectRules[locale]; newCountry.hrefLink = "href='" + newCountry.full_link + "'"; } else if (redirectRules[locale + '-go']) { const globalLanguage = locale + '-go'; newCountry.full_link = redirectRules[globalLanguage]; newCountry.hrefLink = "href='" + newCountry.full_link + "'"; } else { newCountry.full_link = locale + '/home'; //SiteUtils.getPageUrlForLanguage(locale, currentPage.pageUrl); } newCountry['CountryFlag'] = newCountry?.CountryCode.toLowerCase(); newCountries.push(newCountry); }); country.CountryCode = country.CountryCode.toLowerCase(); }); continent.countries['listModal'] = newCountries; }); if (!found) { const globalLabel = 'Global (' + lang.split('-')[0].toUpperCase() + ')'; model['labelLanguageSelector'] = globalLabel; } } return model; } getHydrateContent(model) { const hydrateData = { content: { fields: {} } }; hydrateData.content.blank_gif = model.blank_gif; hydrateData.content.siteId = model.siteId; hydrateData.content.languageModel = model.languageModel; hydrateData.content.CurrentCountryCode = model.CurrentCountryCode; hydrateData.content.redirectRules = model.redirectRules; const fields = model?.fields; if (fields) { hydrateData.content.fields.modal_subtitle = fields.modal_subtitle; hydrateData.content.fields.add_search = fields.add_search; hydrateData.content.fields.yext_ansswers = fields.yext_ansswers; hydrateData.content.fields.showStockFeed = fields.showStockFeed; } const hydrateDataContent = JSON.stringify(hydrateData.content); return hydrateDataContent; } /** * Filter the array based on the regionalized items in regionalized array * * @param {[items]} array * @param {[items]} regionalizedArray */ filterRegionalizedItems(array, regionalizedArray) { if (regionalizedArray && regionalizedArray.length > 0) { const raMap = {}; regionalizedArray.forEach((el) => { raMap[el.id] = el; }); return array.filter((el) => { if (!el.sub) return false; return !!raMap[el.id]; }); } else { return array; } } /** * Receives the list of items to regionalize. actual regionalization is done by the siteutils fn. * * @param {[items]} items * @returns */ async doRegionalizationItems(items) { if (items && items.length > 0) { items = await this.utils.regionalizeItems(items); if (items && items.length > 0) { for (const item of items) { const itemsFields = item.fields; if (itemsFields?.headerChildItems) { itemsFields.headerChildItems = await this.doRegionalizationItems(itemsFields.headerChildItems); } } } } return items; } /** * Receives the header content model. * * @param {content} model * @returns */ async doRegionalizationHeader(model) { const fields = model?.fields; if (fields) { const regionalizedLevel1Items = await this.doRegionalizationItems(fields.level1Items); fields.level1Items = regionalizedLevel1Items; } return model; } async doRedirect(model) { let outcomeRedirect = false; console.log('HEADER:REDIRECT:MODEL:FLAG:POLICY', model?.redirect?.flag, model?.redirect?.policy); //validate model if (model?.redirect?.flag && model?.redirect?.policy) { const localization = await this.getLocalizationModule(); if (localization) { model.redirect.policy = localization.getPolicy(model.redirect.policy); outcomeRedirect = localization.redirect(model) != 0; } } console.log('HEADER:REDIRECT:OUTCOME:', outcomeRedirect); return outcomeRedirect; } /** * (browser always true, compile based on input param to cec compile template -i|--ignoreErrors) * * @returns True or false based on the environment */ ignoreError() { if (this.isCompilation) { return !!process.argv.find((arg) => arg === '--ignoreErrors' || arg === '-i'); } else { return true; } } /** * (browser always false, compile based on input param to cec compile template -v|--verbose) * * @returns True or false based on the environment */ verbose() { if (this.isCompilation) { const verbose = !!process.argv.find((arg) => arg === '--verbose,' || arg === '-v'); return verbose; } else { return false; } } /** Centralized logging for both render and compile modules */ logErrors(msg, err) { if (this.verbose()) { console.log(msg, err); } else { console.log(msg); } return 0; } }