{"version":3,"file":"render.mjs","sources":["src/common.mjs","src/render.mjs"],"sourcesContent":["// Common Utilities Class\r\nexport default class {\r\n\tconstructor(objArgs) {\r\n\t\tthis.contentClient = objArgs.contentClient\r\n\t\tthis.Mustache = objArgs.Mustache\r\n\t\tthis.api = objArgs.api\r\n\t\tthis.compiled = objArgs.compiled\r\n\t}\r\n\r\n\t// Helper method to make an additional Content REST API call to retrieve all items referenced in the data by their ID.\r\n\tgetRefItems(ids) {\r\n\t\t// Calling getItems() with no ‘ids’ returns all items.\r\n\t\t// If no items are requested, just return a resolved Promise.\r\n\t\tif (ids.length === 0) {\r\n\t\t\treturn Promise.resolve({})\r\n\t\t} else {\r\n\t\t\treturn this.contentClient.getItems({\r\n\t\t\t\tids: ids,\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t//\r\n\t// Helper Methods to handle specific field types\r\n\t//\r\n\r\n\tfindReferenceFieldIds(arReferencedItems, fields) {\r\n\t\tconst arReferencedIds = []\r\n\t\tarReferencedItems.forEach((referencedItem) => {\r\n\t\t\tif (fields[referencedItem]) {\r\n\t\t\t\t// handle multiple or single value content fields\r\n\t\t\t\t(Array.isArray(fields[referencedItem])\r\n\t\t\t\t\t\t? fields[referencedItem]\r\n\t\t\t\t\t\t: [fields[referencedItem]]\r\n\t\t\t\t).forEach((entry) => {\r\n\t\t\t\t\tif (entry) {\r\n\t\t\t\t\t\t// if asset is accessible, add it\r\n\t\t\t\t\t\tif (!entry.reference || entry.reference.isAccessible) {\r\n\t\t\t\t\t\t\tarReferencedIds.push(entry.id)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// asset is not accessible, store the message against the entry\r\n\t\t\t\t\t\t\tentry.referenceInaccessible = this.noPermissionToView\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn arReferencedIds\r\n\t}\r\n\r\n\tupdateDigitalAssetURLs(arDigitalAssetFields, fields) {\r\n\t\tarDigitalAssetFields.forEach((digitalAssetField) => {\r\n\t\t\tif (fields[digitalAssetField]) {\r\n\t\t\t\t// handle multiple or single value content fields\r\n\t\t\t\t(Array.isArray(fields[digitalAssetField])\r\n\t\t\t\t\t\t? fields[digitalAssetField]\r\n\t\t\t\t\t\t: [fields[digitalAssetField]]\r\n\t\t\t\t).forEach((entry) => {\r\n\t\t\t\t\tif (entry) {\r\n\t\t\t\t\t\tif (!entry.reference || entry.reference.isAccessible) {\r\n\t\t\t\t\t\t\tif (entry.type === 'Video' || entry.type === 'File') {\r\n\t\t\t\t\t\t\t\tentry.showName = true\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tentry.url = this.contentClient.getRenditionURL({\r\n\t\t\t\t\t\t\t\t\tid: entry.id,\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// asset is not accessible, store the message against the entry\r\n\t\t\t\t\t\t\tentry.referenceInaccessible = this.noPermissionToView\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\taddReferencedItems(referencedItems, results, fields) {\r\n\t\t((results && results.items) || []).forEach((item) => {\r\n\t\t\treferencedItems.forEach((referencedItem) => {\r\n\t\t\t\t(Array.isArray(fields[referencedItem])\r\n\t\t\t\t\t\t? fields[referencedItem]\r\n\t\t\t\t\t\t: [fields[referencedItem]]\r\n\t\t\t\t).forEach((entry) => {\r\n\t\t\t\t\t// Retrieve the reference item from the query result.\r\n\t\t\t\t\tif (entry && entry.id === item.id) {\r\n\t\t\t\t\t\tentry.contentItem = item\r\n\t\t\t\t\t\t// add in assetURLs for any digital asset references in the referenced item\r\n\t\t\t\t\t\tconst digitalAssetFields = Object.keys(item.fields).filter((key) => {\r\n\t\t\t\t\t\t\tconst field = item.fields[key]\r\n\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\tfield &&\r\n\t\t\t\t\t\t\t\ttypeof field === 'object' &&\r\n\t\t\t\t\t\t\t\tfield.typeCategory === 'DigitalAssetType'\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tif (entry.type === 'File') {\r\n\t\t\t\t\t\t\t// if entry.name exists, use entry otherwise use entry.contentItem\r\n\t\t\t\t\t\t\tlet contentItem = entry.name ? entry : entry.contentItem\r\n\t\t\t\t\t\t\tconst fileExtension = contentItem.name && contentItem.name.split('.').pop()\r\n\t\t\t\t\t\t\tentry.fileExtension = fileExtension && fileExtension.toUpperCase()\r\n\t\t\t\t\t\t\t// Potentially not the most accurate way to do this, however it is the most reliable.\r\n\t\t\t\t\t\t\tentry.fileName = contentItem.name && contentItem.name.split('.')[0]\r\n\t\t\t\t\t\t\tentry.fileLink = item.fields.native.links[0].href\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.updateDigitalAssetURLs(digitalAssetFields, item.fields)\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Expand custom macros in the returned HTML\r\n\t * @param {string} strInput\r\n\t * @returns {string} HTML string with macros expanded\r\n\t */\r\n\texpandMacros(strInput) {\r\n\t\t// replace \"[[page-221]]\" with \"[!--$SCS_PAGE--]221[/!--$SCS_PAGE--]\"\r\n\t\tlet strOutput = strInput.replace(\r\n\t\t\t/\\[\\[page-(\\d+)\\]\\]/g,\r\n\t\t\t'[!--$SCS_PAGE--]$1[/!--$SCS_PAGE--]',\r\n\t\t)\r\n\r\n\t\t// replace \"[[asset-221]]\" with \"[!--$CEC_DIGITAL_ASSET--]221[/--$CEC_DIGITAL_ASSET--]\"\r\n\t\tstrOutput = strOutput.replace(\r\n\t\t\t/\\[\\[asset-(\\d+)\\]\\]/g,\r\n\t\t\t'[!--$CEC_DIGITAL_ASSET--]$1[/!--$CEC_DIGITAL_ASSET--]',\r\n\t\t)\r\n\r\n\t\tstrOutput = this.contentClient.expandMacros(strOutput)\r\n\t\treturn strOutput\r\n\t}\r\n\r\n\tasync createHTML(template, objModel) {\r\n\t\t// Render the contents\r\n\t\t// First render marries asset data with the template\r\n\t\t// Second render marries mustache tokens from within the asset data\r\n\t\t// to the model, example {{ThisYear}}\r\n\t\tlet strRenderedHTML = this.Mustache.render(template, objModel)\r\n\t\tstrRenderedHTML = this.Mustache.render(strRenderedHTML, objModel)\r\n\t\tstrRenderedHTML = this.expandMacros(strRenderedHTML)\r\n\r\n\t\treturn strRenderedHTML\r\n\t}\r\n}\r\n","/* globals Mustache */\r\nimport CommonUtils from './common.mjs';\r\n\r\nexport default class {\r\n\t// class variables\r\n\tcontentVersion = '>=1.0.0 <2.0.0';\r\n\r\n\t// Content Layout constructor\r\n\tconstructor(params) {\r\n\t\t// store passed in value\r\n\t\tthis.contentItemData = params.contentItemData || {};\r\n\t\tthis.scsData = params.scsData;\r\n\t\tthis.sitesSDK = this.scsData.SitesSDK;\r\n\t\tthis.contentClient = params.contentClient;\r\n\t\tthis.libs = this.contentClient.getLibs() || {};\r\n\r\n\t\t// store path to the \"assets\" folder\r\n\t\tthis.assetsFolder = import.meta.url.replace('/render.mjs', '');\r\n\r\n\t\t// access resources\r\n\t\tthis.Mustache = params.Mustache || this.libs.Mustache || window.Mustache;\r\n\t}\r\n\r\n\taddEventListeners() {\r\n\t\t// listen for settings update\r\n\t\tthis.sitesSDK.subscribe(this.sitesSDK.MESSAGE_TYPES.SETTINGS_UPDATED, (props) => {\r\n\t\t\tif (props.property === 'customSettingsData') {\r\n\t\t\t\tthis.renderComponent({\r\n\t\t\t\t\tcustomSettingsData: props.value,\r\n\t\t\t\t});\r\n\t\t\t} else if (props.property === 'componentLayout') {\r\n\t\t\t\tthis.renderComponent({\r\n\t\t\t\t\tcomponentLayout: props.value,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tupdateBreadcrumbs() {\r\n\t\tdocument.arrive(\r\n\t\t\t'#layout-breadcrumbs [aria-current=\"page\"]',\r\n\t\t\t{ existing: true, onceOnly: true },\r\n\t\t\t(el) => {\r\n\t\t\t\tconst strArticleTitle = this.contentItemData.fields.title;\r\n\t\t\t\tif (strArticleTitle.length > 0 && el) {\r\n\t\t\t\t\tel.innerHTML = strArticleTitle;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\t// Main rendering function:\r\n\t// - Updates the data to handle any required additional requests and support granular permissions\r\n\t// - Expand the Mustache template with the updated data\r\n\t// - Appends the expanded template HTML to the parentObj DOM element\r\n\trender(parentObj) {\r\n\t\tconst contentClient = this.contentClient;\r\n\t\tconst commonUtils = new CommonUtils({\r\n\t\t\tcontentClient: this.contentClient,\r\n\t\t\tMustache: this.Mustache,\r\n\t\t\tapi: SCSRenderAPI,\r\n\t\t\tcompiled: false,\r\n\t\t});\r\n\r\n\t\tlet strContentType;\r\n\t\tlet objCustomSettings;\r\n\r\n\t\t// extract the content that will be used as the model\r\n\t\tthis.content = Object.assign({}, this.contentItemData);\r\n\t\t// If used with CECS Sites, Sites will pass in context information via the scsData property.\r\n\t\tif (this.scsData) {\r\n\t\t\tthis.content = Object.assign(this.content, {\r\n\t\t\t\t'scsData': this.scsData,\r\n\t\t\t});\r\n\t\t\tstrContentType =\r\n\t\t\t\tthis.content.scsData.showPublishedContent === true ? 'published' : 'draft';\r\n\t\t\tobjCustomSettings = this.content.scsData.customSettingsData || {};\r\n\t\t}\r\n\r\n\t\t//\r\n\t\t// Handle fields specific to this content type.\r\n\t\t//\r\n\r\n\t\t// If displaying detail items, get the IDs of any referenced assets\r\n\t\t// we will do an additional query to retrieve these so we can render them as well.\r\n\t\tconst arReferredFields = ['links', 'related_documents', 'gallery', 'media_contact'];\r\n\t\tconst iReferredIds = commonUtils.findReferenceFieldIds(\r\n\t\t\tarReferredFields,\r\n\t\t\tthis.content.fields\r\n\t\t);\r\n\r\n\t\t// Handle expansion of URLs and check permissions for access to referenced digital asset\r\n\t\tconst arDigitalAssetFields = ['media'];\r\n\t\tcommonUtils.updateDigitalAssetURLs(arDigitalAssetFields, this.content.fields);\r\n\r\n\t\t//\r\n\t\t// Fetch any referenced items and resources used to render the content layout\r\n\t\t//\r\n\t\tPromise.all([\r\n\t\t\tcommonUtils.getRefItems(iReferredIds),\r\n\t\t\tcontentClient.importText(this.assetsFolder + '/layout.html'),\r\n\t\t\tcontentClient.importCSS(this.assetsFolder + '/styles/design.css'),\r\n\t\t]).then(async (resources) => {\r\n\t\t\tconst results = resources[0];\r\n\t\t\tconst templateHtml = resources[1];\r\n\t\t\t// Store the retrieved referenced items in the model used by the template.\r\n\t\t\tcommonUtils.addReferencedItems(arReferredFields, results, this.content.fields);\r\n\r\n\t\t\t// apply the model to the template\r\n\t\t\ttry {\r\n\t\t\t\tlet mediaContact = this.content.fields.media_contact;\r\n\t\t\t\tmediaContact\r\n\t\t\t\t\t? (mediaContact.contentItem.fields.contact_summary =\r\n\t\t\t\t\t\t\tmediaContact.contentItem.fields.summary)\r\n\t\t\t\t\t: null;\r\n\r\n\t\t\t\tthis.content.fields.page_layout = this.content.fields.page_layout;\r\n\t\t\t\tif (!this.content.fields.page_layout) {\r\n\t\t\t\t\tif (this.content.fields.type === 'blog') {\r\n\t\t\t\t\t\tthis.content.fields.page_layout = 'full-width';\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.content.fields.page_layout = 'two-column';\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst releaseDate = new Date(this.content.fields.publish.value);\r\n\t\t\t\tthis.content.fields.release_date = releaseDate.toLocaleDateString('en-US', {\r\n\t\t\t\t\tyear: 'numeric',\r\n\t\t\t\t\tmonth: 'long',\r\n\t\t\t\t\tday: 'numeric',\r\n\t\t\t\t});\r\n\t\t\t\t// Use Mustache to expand the HTML template with the data.\r\n\t\t\t\tthis.content.fields.hasDocuments =\r\n\t\t\t\t\tthis.content.fields?.related_documents?.length > 0;\r\n\t\t\t\tthis.content.fields.hasLinks = this.content.fields?.links?.length > 0;\r\n\t\t\t\tthis.content.fields.documents_header_text =\r\n\t\t\t\t\tthis.content.fields.documents_header_text || 'Related Documents';\r\n\t\t\t\tthis.content.fields.link_header_text =\r\n\t\t\t\t\tthis.content.fields.link_header_text || 'Useful Links';\r\n\t\t\t\tconst template = await commonUtils.createHTML(templateHtml, this.content);\r\n\t\t\t\t// Insert the expanded template into the passed in container.\r\n\t\t\t\tif (template) {\r\n\t\t\t\t\tparentObj.insertAdjacentHTML('beforeend', template);\r\n\t\t\t\t}\r\n\t\t\t\tawait this.renderGallery();\r\n\t\t\t\tthis.addEventListeners();\r\n\t\t\t\tthis.updateBreadcrumbs();\r\n\t\t\t} catch (e) {\r\n\t\t\t\tconsole.error(e.stack);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\thydrate(parentObj) {\r\n\t\tthis.updateBreadcrumbs();\r\n\t}\r\n\r\n\tasync renderGallery() {\r\n\t\tlet hasGallery = this.content.fields.gallery !== null;\r\n\t\tlet media = hasGallery && this.content.fields.gallery;\r\n\r\n\t\tif (!media) {\r\n\t\t\tlet mediaArray = [];\r\n\t\t\tmediaArray.push(JSON.stringify(this.content.fields.media));\r\n\t\t\tmedia = {\r\n\t\t\t\tfields: {\r\n\t\t\t\t\tmedia: `[{ \"id\": \"${this.content.fields.media.id}\",\"type\": \"${\r\n\t\t\t\t\t\tthis.content.fields.media.type\r\n\t\t\t\t\t}\",\"caption\": \"${this.content.fields.media_caption || ''}\",\"typeCategory\": \"${\r\n\t\t\t\t\t\tthis.content.fields.media.typeCategory\r\n\t\t\t\t\t}\",\"fileExtension\": \"${this.content.fields.media.fileExtension}\",\"name\": \"${\r\n\t\t\t\t\t\tthis.content.fields.media.name\r\n\t\t\t\t\t}\"}]`,\r\n\t\t\t\t},\r\n\t\t\t\tlanguage: this.content.language,\r\n\t\t\t\ttranslatable: true,\r\n\t\t\t\ttype: 'MNH_Gallery',\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tlet renderObj = {\r\n\t\t\tdata: {\r\n\t\t\t\tcontentItemData: media,\r\n\t\t\t\tscsData: {\r\n\t\t\t\t\tcontentClient: this.contentClient,\r\n\t\t\t\t\tSitesSDK: this.sitesSDK,\r\n\t\t\t\t},\r\n\t\t\t\tfullWidth: this.content.fields.page_layout,\r\n\t\t\t},\r\n\t\t\tlayout: 'MNH_Gallery',\r\n\t\t\tcontainer: document.querySelector('.article-gallery'),\r\n\t\t};\r\n\r\n\t\tawait this.contentClient.renderItem(renderObj);\r\n\t}\r\n}\r\n"],"names":["constructor","objArgs","this","contentClient","Mustache","api","compiled","getRefItems","ids","length","Promise","resolve","getItems","findReferenceFieldIds","arReferencedItems","fields","arReferencedIds","forEach","referencedItem","Array","isArray","entry","reference","isAccessible","push","id","referenceInaccessible","noPermissionToView","updateDigitalAssetURLs","arDigitalAssetFields","digitalAssetField","type","showName","url","getRenditionURL","addReferencedItems","referencedItems","results","items","item","contentItem","digitalAssetFields","Object","keys","filter","key","field","typeCategory","name","fileExtension","split","pop","toUpperCase","fileName","fileLink","native","links","href","expandMacros","strInput","strOutput","replace","createHTML","template","objModel","strRenderedHTML","render","contentVersion","params","contentItemData","scsData","sitesSDK","SitesSDK","libs","getLibs","assetsFolder","window","addEventListeners","subscribe","MESSAGE_TYPES","SETTINGS_UPDATED","props","property","renderComponent","customSettingsData","value","componentLayout","updateBreadcrumbs","document","arrive","existing","onceOnly","el","strArticleTitle","title","innerHTML","parentObj","commonUtils","CommonUtils","SCSRenderAPI","content","assign","showPublishedContent","arReferredFields","iReferredIds","all","importText","importCSS","then","async","resources","templateHtml","mediaContact","media_contact","contact_summary","summary","page_layout","releaseDate","Date","publish","release_date","toLocaleDateString","year","month","day","hasDocuments","related_documents","hasLinks","documents_header_text","link_header_text","insertAdjacentHTML","renderGallery","e","console","error","stack","hydrate","media","gallery","JSON","stringify","media_caption","language","translatable","renderObj","data","fullWidth","layout","container","querySelector","renderItem"],"mappings":"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"}