From b70f70f284be51e94a663994a6611486bb9af1c2 Mon Sep 17 00:00:00 2001 From: Marco Otte-Witte Date: Tue, 30 Jul 2019 14:28:03 +0200 Subject: [PATCH] Add mechanism for arbitrary head tags (#659) * dedicated class for writing head tags * render head tags in SSR build * add static meta tags * add og:title meta tag * add canonical url tag * fix object iteration * add article published time meta tag * render meta date for blog posts * format * fix prerender build --- .prettierignore | 2 +- ember-cli-build.js | 2 +- lib/component-generation/prepare-templates.js | 7 ++- lib/generate-blog/lib/components-builder.js | 4 +- .../lib/templates/post/template.hbs | 1 + lib/head-data/index.js | 3 ++ scripts/prerender.js | 4 +- src/index.ts | 13 +++++ src/ui/components/HeadTag/component.ts | 17 +++++++ src/ui/components/HeadTag/stylesheet.css | 3 ++ src/ui/components/HeadTag/template.hbs | 0 src/ui/components/Simplabs/component.ts | 21 ++++++-- src/utils/head-tags.ts | 49 +++++++++++++++++++ src/utils/helpers/hash.ts | 3 ++ ssr/ssr-application.ts | 22 ++++++++- ssr/ssr-head-tags.ts | 34 +++++++++++++ tests/index.html | 1 - 17 files changed, 170 insertions(+), 16 deletions(-) create mode 100644 src/ui/components/HeadTag/component.ts create mode 100644 src/ui/components/HeadTag/stylesheet.css create mode 100644 src/ui/components/HeadTag/template.hbs create mode 100644 src/utils/head-tags.ts create mode 100644 src/utils/helpers/hash.ts create mode 100644 ssr/ssr-head-tags.ts diff --git a/.prettierignore b/.prettierignore index e02399ca54..14b44fd762 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,3 @@ -lib/generate-blog-components/lib/files/**/* +lib/generate-blog/lib/templates/**/* lib/global-css/css/vendor/normalize.css src/ui/components/Header/template.hbs diff --git a/ember-cli-build.js b/ember-cli-build.js index d61da83c68..80ba63ff3f 100644 --- a/ember-cli-build.js +++ b/ember-cli-build.js @@ -156,7 +156,7 @@ class SimplabsApp extends GlimmerApp { }); let ssrTree = this.ssrTree(); - let appTree = new MergeTrees([jsTree, ssrTree]); + let appTree = new MergeTrees([jsTree, ssrTree], { overwrite: true }); return new Rollup(appTree, { rollup: { input: 'ssr/index.js', diff --git a/lib/component-generation/prepare-templates.js b/lib/component-generation/prepare-templates.js index e07aa2eb06..79dcd5f41f 100644 --- a/lib/component-generation/prepare-templates.js +++ b/lib/component-generation/prepare-templates.js @@ -16,8 +16,11 @@ module.exports = function prepareTemplates(folder) { .reduce((acc, folder) => { let component = path.basename(folder); acc[component] = ['template', 'stylesheet'].reduce((acc, template) => { - let source = fs.readFileSync(path.join(folder, `${template}.hbs`)).toString(); - acc[template] = handlebars.compile(source); + let file = path.join(folder, `${template}.hbs`); + if (fs.existsSync(file)) { + let source = fs.readFileSync(file).toString(); + acc[template] = handlebars.compile(source); + } return acc; }, {}); return acc; diff --git a/lib/generate-blog/lib/components-builder.js b/lib/generate-blog/lib/components-builder.js index 77002426ea..aef2d50a74 100644 --- a/lib/generate-blog/lib/components-builder.js +++ b/lib/generate-blog/lib/components-builder.js @@ -73,14 +73,12 @@ module.exports = class ComponentsBuilder extends BaseComponentsBuilder { _writePostComponent(post, related) { let data = this._preparePostTemplateData(post); + data.componentName = post.componentName; if (related) { data.related = this._preparePostTemplateData(related); } let componentTemplate = this.templates.post.template(data); - data = { - componentName: post.componentName, - }; let componentCssBlock = this.templates.post.stylesheet(data); this.writeComponent(post.componentName, componentTemplate, componentCssBlock); diff --git a/lib/generate-blog/lib/templates/post/template.hbs b/lib/generate-blog/lib/templates/post/template.hbs index f4afbaf9b9..d9611a400f 100644 --- a/lib/generate-blog/lib/templates/post/template.hbs +++ b/lib/generate-blog/lib/templates/post/template.hbs @@ -1,4 +1,5 @@
+