From 46899a350c43b03a8c524d1e7ca8e33e6139beb9 Mon Sep 17 00:00:00 2001 From: james-owen Date: Mon, 7 Nov 2022 15:27:55 -0500 Subject: [PATCH 1/7] feat: handle font files --- lib/media.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/media.js b/lib/media.js index 7138adb..a68ba92 100644 --- a/lib/media.js +++ b/lib/media.js @@ -126,7 +126,11 @@ function getMediaMap({ _components: componentList, _layoutData, locals }) { {site} = locals || {}, assetDir = site && site.assetDir || MEDIA_DIRECTORY, assetPath = site && site.assetPath || '', - assetHost = site && site.assetHost || ''; + assetHost = site && site.assetHost || '', + siteStyleguide = site && site.styleguide, + defaultFontPath = path.join(assetDir, 'css', '_linked-fonts._default.css'), + siteFontPath = path.join(assetDir, 'css', `_linked-fonts.${siteStyleguide}.css`); + let componentStyles = flatMap(componentList, (componentName) => module.exports.getStyles(componentName, locals.site)); if (layoutName) { @@ -135,6 +139,10 @@ function getMediaMap({ _components: componentList, _layoutData, locals }) { componentStyles = _.concat(componentStyles, layoutStyles); } + // add any default and site font css + componentStyles.push(defaultFontPath); + componentStyles.push(siteFontPath); + return { styles: _.map(_.filter(componentStyles, util.fileExists), pathJoin(assetHost, assetPath, assetDir)) }; From 5536dcd1f5828f091b6270d3357f3f5e163582b6 Mon Sep 17 00:00:00 2001 From: james-owen Date: Mon, 7 Nov 2022 15:28:14 -0500 Subject: [PATCH 2/7] 2.0.2-dev.0 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5cea254..b84cb12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "amphora-amp", - "version": "2.0.1", + "version": "2.0.2-dev.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3aef42b..337e407 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amphora-amp", - "version": "2.0.1", + "version": "2.0.2-dev.0", "description": "An AMPHTML renderer for component data", "main": "index.js", "scripts": { From e90d7155be9c289c4adcc6567a53ff88ac7a8171 Mon Sep 17 00:00:00 2001 From: james-owen Date: Wed, 23 Nov 2022 16:34:46 -0500 Subject: [PATCH 3/7] feat: adds plugins setup --- index.js | 1 + lib/render.js | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- lib/setup.js | 18 ++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index e9c7860..c6a23a8 100644 --- a/index.js +++ b/index.js @@ -6,4 +6,5 @@ const setup = require('./lib/setup'), module.exports.render = render; module.exports.addResolveMedia = setup.addResolveMedia; module.exports.addHelpers = setup.addHelpers; +module.exports.addPlugins = setup.addPlugins; module.exports.configureRender = setup.configureRender; diff --git a/lib/render.js b/lib/render.js index ca1c5a9..e088012 100644 --- a/lib/render.js +++ b/lib/render.js @@ -2,7 +2,8 @@ const _ = require('lodash'), clayUtils = require('clayutils'), - mediaService = require('./media'); + mediaService = require('./media'), + setup = require('./setup'); let log = require('./log').setup({ file: __filename }), amphoraFs = require('amphora-fs'), @@ -79,6 +80,51 @@ function makeHtml(state) { }; } +/** + * Applies `render` hooks. + * Render hooks each return `data` or a Promise for `data`. + * + * @param {String} ref + * @param {Object} data + * @param {Object} locals + * @returns {Object} data + */ +function applyRenderHooks(ref, data, locals) { + // skip render hooks in edit mode + if (locals.edit) { + return bluebird.resolve(data); + } + + return bluebird + .filter(setup.plugins, (plugin) => plugin.render) + .reduce((val, plugin) => { + return plugin.render(ref, val, locals); + }, data); +} + +/** + * Applies `postRender` hooks. + * Post Render hooks each returns `html`. + * + * @param {String} ref + * @param {Object} locals + * @returns {Function} + */ +function applyPostRenderHooks(ref, locals) { + return (html) => { + // skip postRender hooks in edit mode + if (locals.edit) { + return html; + } + + return setup.plugins + .filter((plugin) => plugin.postRender) + .reduce((val, plugin) => { + return plugin.postRender(ref, html, locals); + }, html); + }; +} + function render(data, meta, res) { const hrStart = process.hrtime(), state = makeState(data, meta); @@ -86,6 +132,7 @@ function render(data, meta, res) { return Promise.resolve(data) .then(makeHtml(state)) .then(mediaService.injectStyles(state)) + .then(applyPostRenderHooks(state._layoutRef || state.self, state.locals)) .then(result => { res.type('text/html'); res.send(result); diff --git a/lib/setup.js b/lib/setup.js index 297b663..419aa95 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -120,6 +120,23 @@ function addHelpers(payload) { }); } +/** + * + * @param {Plugin[]} pluginsArr + */ +function addPlugins(pluginsArr) { + pluginsArr.forEach((plugin, index) => { + if (plugin.render || plugin.postRender) { + module.exports.plugins.push(plugin); + } else { + log( + "error", + `Error in amphora-html addPlugins: No \`render\` or \`postRender\` func found for plugin at index ${index}` + ); + } + }); +} + /** * Pass settings to the renderer * @@ -150,6 +167,7 @@ module.exports.plugins = []; // Setup functions module.exports.init = init; module.exports.addHelpers = addHelpers; +module.exports.addPlugins = addPlugins; module.exports.configureRender = configureRender; module.exports.addResolveMedia = addResolveMedia; From 9f1481482c505d17a3afad69e673cff9fad894b3 Mon Sep 17 00:00:00 2001 From: james-owen Date: Wed, 23 Nov 2022 16:35:29 -0500 Subject: [PATCH 4/7] 2.0.2-dev.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index b84cb12..6eb45a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "amphora-amp", - "version": "2.0.2-dev.0", + "version": "2.0.2-dev.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 337e407..d6b5093 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amphora-amp", - "version": "2.0.2-dev.0", + "version": "2.0.2-dev.1", "description": "An AMPHTML renderer for component data", "main": "index.js", "scripts": { From 01ec5bd8612aab70607b52bf46d3a78281d6bde0 Mon Sep 17 00:00:00 2001 From: Intellisys Date: Wed, 15 Mar 2023 11:05:02 -0400 Subject: [PATCH 5/7] Updated the version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6eb45a1..faa1be4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "amphora-amp", - "version": "2.0.2-dev.1", + "version": "2.0.2-beta.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d6b5093..c944d8a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amphora-amp", - "version": "2.0.2-dev.1", + "version": "2.0.2-beta.0", "description": "An AMPHTML renderer for component data", "main": "index.js", "scripts": { From c4588aa1cfc85d0e7cb43a4373c00fdfd3f9e5cd Mon Sep 17 00:00:00 2001 From: Intellisys Date: Mon, 17 Apr 2023 09:20:34 -0400 Subject: [PATCH 6/7] Rebased and fixed the errors --- lib/media.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/media.js b/lib/media.js index a68ba92..28e6a33 100644 --- a/lib/media.js +++ b/lib/media.js @@ -128,8 +128,10 @@ function getMediaMap({ _components: componentList, _layoutData, locals }) { assetPath = site && site.assetPath || '', assetHost = site && site.assetHost || '', siteStyleguide = site && site.styleguide, - defaultFontPath = path.join(assetDir, 'css', '_linked-fonts._default.css'), - siteFontPath = path.join(assetDir, 'css', `_linked-fonts.${siteStyleguide}.css`); + defaultLinkedFontPath = path.join(assetDir, 'css', '_linked-fonts._default.css'), + siteLinkedFontPath = path.join(assetDir, 'css', `_linked-fonts.${siteStyleguide}.css`), + defaultInlinedFontPath = path.join(assetDir, 'css', '_inlined-fonts._default.css'), + siteInlinedFontPath = path.join(assetDir, 'css', `_inlined-fonts.${siteStyleguide}.css`); let componentStyles = flatMap(componentList, (componentName) => module.exports.getStyles(componentName, locals.site)); @@ -140,8 +142,10 @@ function getMediaMap({ _components: componentList, _layoutData, locals }) { } // add any default and site font css - componentStyles.push(defaultFontPath); - componentStyles.push(siteFontPath); + componentStyles.push(defaultLinkedFontPath); + componentStyles.push(siteLinkedFontPath); + componentStyles.push(defaultInlinedFontPath); + componentStyles.push(siteInlinedFontPath); return { styles: _.map(_.filter(componentStyles, util.fileExists), pathJoin(assetHost, assetPath, assetDir)) From 1136b4e383cd4b394b42839529bf73f822393568 Mon Sep 17 00:00:00 2001 From: Intellisys Date: Mon, 17 Apr 2023 10:43:45 -0400 Subject: [PATCH 7/7] Updated the version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index faa1be4..09f9d76 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "amphora-amp", - "version": "2.0.2-beta.0", + "version": "2.0.2-beta.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c944d8a..ac71362 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amphora-amp", - "version": "2.0.2-beta.0", + "version": "2.0.2-beta.1", "description": "An AMPHTML renderer for component data", "main": "index.js", "scripts": {