UNPKG

@sitecore-jss/sitecore-jss

Version:

This module is provided as a part of Sitecore JavaScript Rendering SDK. It contains the core JSS APIs (layout service) and utilities.

74 lines (73 loc) 3.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.traverseComponent = exports.traverseField = exports.traversePlaceholder = exports.getContentStylesheetUrl = exports.getContentStylesheetLink = void 0; const constants_1 = require("../constants"); /** * Regular expression to check if the content styles are used in the field value */ const CLASS_REGEXP = /class=".*(\bck-content\b).*"/g; /** * Get the content styles link to be loaded from the Sitecore Edge Platform * @param {LayoutServiceData} layoutData Layout service data * @param {string} sitecoreEdgeContextId Sitecore Edge Context ID * @param {string} [sitecoreEdgeUrl] Sitecore Edge Platform URL. Default is https://edge-platform.sitecorecloud.io * @returns {HTMLLink | null} content styles link, null if no styles are used in layout */ const getContentStylesheetLink = (layoutData, sitecoreEdgeContextId, sitecoreEdgeUrl = constants_1.SITECORE_EDGE_URL_DEFAULT) => { if (!layoutData.sitecore.route) return null; const config = { loadStyles: false }; (0, exports.traverseComponent)(layoutData.sitecore.route, config); if (!config.loadStyles) return null; return { href: (0, exports.getContentStylesheetUrl)(sitecoreEdgeContextId, sitecoreEdgeUrl), rel: 'stylesheet', }; }; exports.getContentStylesheetLink = getContentStylesheetLink; const getContentStylesheetUrl = (sitecoreEdgeContextId, sitecoreEdgeUrl = constants_1.SITECORE_EDGE_URL_DEFAULT) => `${sitecoreEdgeUrl}/v1/files/pages/styles/content-styles.css?sitecoreContextId=${sitecoreEdgeContextId}`; exports.getContentStylesheetUrl = getContentStylesheetUrl; const traversePlaceholder = (components, config) => { if (config.loadStyles) return; components.forEach((component) => { (0, exports.traverseComponent)(component, config); }); }; exports.traversePlaceholder = traversePlaceholder; const traverseField = (field, config) => { if (!field || typeof field !== 'object' || config.loadStyles) return; if ('editable' in field && field.editable) { config.loadStyles = CLASS_REGEXP.test(field.editable); } else if ('value' in field && typeof field.value === 'string') { config.loadStyles = CLASS_REGEXP.test(field.value); } else if ('fields' in field) { Object.values(field.fields).forEach((field) => { (0, exports.traverseField)(field, config); }); } else if (Array.isArray(field)) { field.forEach((field) => { (0, exports.traverseField)(field, config); }); } }; exports.traverseField = traverseField; const traverseComponent = (component, config) => { if (config.loadStyles) return; if ('fields' in component && component.fields) { Object.values(component.fields).forEach((field) => { (0, exports.traverseField)(field, config); }); } const placeholders = component.placeholders || {}; Object.keys(placeholders).forEach((placeholder) => { (0, exports.traversePlaceholder)(placeholders[placeholder], config); }); }; exports.traverseComponent = traverseComponent;