From 79c65cb63546a847164bf6941b4e7af7cb857970 Mon Sep 17 00:00:00 2001 From: Matias Capeletto Date: Tue, 1 Dec 2020 10:49:46 +0100 Subject: [PATCH] fix: avoid meta description duplication for frontmatter --- src/client/app/composables/head.ts | 15 ++++++++++++++- src/node/build/render.ts | 16 ++++++++++++++-- src/node/markdownToVue.ts | 24 +----------------------- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/src/client/app/composables/head.ts b/src/client/app/composables/head.ts index 46c57b3f..b9f22b77 100644 --- a/src/client/app/composables/head.ts +++ b/src/client/app/composables/head.ts @@ -29,6 +29,7 @@ export function useUpdateHead(route: Route, siteDataByRouteRef: Ref) { const siteData = siteDataByRouteRef.value const pageTitle = pageData && pageData.title const pageDescription = pageData && pageData.description + const frontmatterHead = pageData && pageData.frontmatter.head document.title = (pageTitle ? pageTitle + ` | ` : ``) + siteData.title updateHeadTags([ ['meta', { charset: 'utf-8' }], @@ -47,7 +48,7 @@ export function useUpdateHead(route: Route, siteDataByRouteRef: Ref) { } ], ...siteData.head, - ...((pageData && pageData.frontmatter.head) || []) + ...((frontmatterHead && rejectHeadDescription(frontmatterHead)) || []) ]) }) } @@ -62,3 +63,15 @@ function createHeadElement([tag, attrs, innerHTML]: HeadConfig) { } return el } + +function isMetaDescription(headConfig: HeadConfig) { + return ( + headConfig[0] === 'meta' && + headConfig[1] && + headConfig[1].name === 'description' + ) +} + +function rejectHeadDescription(head: HeadConfig[]) { + return head.filter((h: HeadConfig) => !isMetaDescription(h)) +} diff --git a/src/node/build/render.ts b/src/node/build/render.ts index 6cf5414e..cddcbcd5 100644 --- a/src/node/build/render.ts +++ b/src/node/build/render.ts @@ -39,7 +39,7 @@ export async function renderPage( pageServerJsFileName )) const pageData = JSON.parse(__pageData) - + const frontmatterHead = pageData.frontmatter.head const assetPath = `${siteData.base}_assets/` const preloadLinks = [ // resolve imports for index.js + page.md.js and inject script tags for @@ -69,7 +69,7 @@ export async function renderPage( ${preloadLinks} ${renderHead(siteData.head)} - ${renderHead(pageData.frontmatter.head)} + ${renderHead(frontmatterHead && rejectHeadDescription(frontmatterHead))}
${content}
@@ -121,3 +121,15 @@ function renderAttrs(attrs: Record): string { }) .join('') } + +function isMetaDescription(headConfig: HeadConfig) { + return ( + headConfig[0] === 'meta' && + headConfig[1] && + headConfig[1].name === 'description' + ) +} + +function rejectHeadDescription(head: HeadConfig[]) { + return head.filter((h: HeadConfig) => !isMetaDescription(h)) +} diff --git a/src/node/markdownToVue.ts b/src/node/markdownToVue.ts index a774e417..96f8dc07 100644 --- a/src/node/markdownToVue.ts +++ b/src/node/markdownToVue.ts @@ -42,7 +42,7 @@ export function createMarkdownToVueRenderFn( const pageData: PageData = { title: inferTitle(frontmatter, content), description: inferDescription(frontmatter), - frontmatter: withHeadDescriptionRemoved(frontmatter), + frontmatter: frontmatter, headers: data.headers, relativePath: file.replace(/\\/g, '/'), lastUpdated @@ -130,25 +130,3 @@ const getHeadMetaContent = ( return meta && meta[1].content } - -function isMetaDescription(headConfig: HeadConfig) { - return ( - headConfig[0] === 'meta' && - headConfig[1] && - headConfig[1].name === 'description' - ) -} - -function rejectHeadDescription(head: HeadConfig[]) { - return head.filter((h: HeadConfig) => !isMetaDescription(h)) -} - -function withHeadDescriptionRemoved(frontmatter: Record) { - if (frontmatter.head) { - return { - ...frontmatter, - head: rejectHeadDescription(frontmatter.head) - } - } - return frontmatter -}