Skip to content

Instantly share code, notes, and snippets.

@jorgehernandezSF
Last active September 25, 2020 04:23
Show Gist options
  • Save jorgehernandezSF/44e0b76faf47cb81b9e9c8dec6d78a06 to your computer and use it in GitHub Desktop.
Save jorgehernandezSF/44e0b76faf47cb81b9e9c8dec6d78a06 to your computer and use it in GitHub Desktop.
PageRenderHelper that removes header/footer on the BM Page Designer UI, but not on the storefront.
'use strict';
var RegionModelRegistry = require('*/cartridge/experience/utilities/RegionModelRegistry.js');
function parseRenderParameters(renderParametersJson) {
var renderParameters = {};
if (renderParametersJson) {
try {
renderParameters = JSON.parse(renderParametersJson);
} catch (e) {
require('dw/system/Logger').error('Unable to parse renderParameters: ' + renderParametersJson);
}
}
return renderParameters;
}
module.exports = {
/**
* Assembles the page meta data.
*
* @param context {Object} The context of the page
*
* @returns {string} ISML path to decorator template
*/
determineDecorator: function determineDecorator(context) {
var renderParameters = parseRenderParameters(context.renderParameters);
var decorator;
var cartridgeDecorator;
try {
cartridgeDecorator = require('*/cartridge/experience/defaultdecorator');
} catch (e) {
dw.system.Logger.warn('Unable to determine frontend decorator ' + e);
}
// if in edit mode, disable the default decorator
if (this.isInEditMode()) {
decorator = 'decoration/decorator';
} else if (renderParameters.decorator) {
// overridden on runtime
decorator = renderParameters.decorator;
} else if (cartridgeDecorator) {
// provided by frontend
decorator = cartridgeDecorator;
} else {
// provided by pagedesigner
decorator = 'decoration/decorator';
}
return decorator;
},
/**
* Assembles the page meta data.
*
* @param page {dw.experience.Page} The page object
*
* @returns {dw.web.PageMetaData} The page meta data
*/
getPageMetaData: function getPageMetaData(page) {
var pageMetaData = request.pageMetaData;
pageMetaData.title = page.pageTitle;
pageMetaData.description = page.pageDescription;
pageMetaData.keywords = page.pageKeywords;
return pageMetaData;
},
/**
* Returns the RegionModel registry for a given container (Page or Component).
*
* @param {dw.experience.Page|dw.experience.Component} container a component or page object
* @param {String} containerType components or pages
*
* @returns {experience.utilities.RegionModelRegistry} The container regions
*/
getRegionModelRegistry: function getRegionModelRegistry(container) {
var containerType;
if (container && container instanceof dw.experience.Page) {
containerType = 'pages';
} else if (container && container instanceof dw.experience.Component) {
containerType = 'components';
} else {
return null;
}
var metaDefinition = require('*/cartridge/experience/' + containerType + '/' + container.typeID.replace(/\./g, '/') + '.json');
return new RegionModelRegistry(container, metaDefinition);
},
/**
* Returns true if page is rendered via editor UI and false in the storefront
* @returns {boolean} The container regions
*/
isInEditMode: function isInEditMode() {
return request.httpPath.indexOf('__SYSTEM__Page-Show') > 0;
},
/**
* returns a css safe string of a given input string
*/
safeCSSClass: function (input) {
return encodeURIComponent(
input.toLowerCase()
).replace(/%[0-9A-F]{2}/gi, '');
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment