fix: avoid meta description duplication for frontmatter

pull/170/head
Matias Capeletto 5 years ago
parent bea857ba19
commit 79c65cb635

@ -29,6 +29,7 @@ export function useUpdateHead(route: Route, siteDataByRouteRef: Ref<SiteData>) {
const siteData = siteDataByRouteRef.value const siteData = siteDataByRouteRef.value
const pageTitle = pageData && pageData.title const pageTitle = pageData && pageData.title
const pageDescription = pageData && pageData.description const pageDescription = pageData && pageData.description
const frontmatterHead = pageData && pageData.frontmatter.head
document.title = (pageTitle ? pageTitle + ` | ` : ``) + siteData.title document.title = (pageTitle ? pageTitle + ` | ` : ``) + siteData.title
updateHeadTags([ updateHeadTags([
['meta', { charset: 'utf-8' }], ['meta', { charset: 'utf-8' }],
@ -47,7 +48,7 @@ export function useUpdateHead(route: Route, siteDataByRouteRef: Ref<SiteData>) {
} }
], ],
...siteData.head, ...siteData.head,
...((pageData && pageData.frontmatter.head) || []) ...((frontmatterHead && rejectHeadDescription(frontmatterHead)) || [])
]) ])
}) })
} }
@ -62,3 +63,15 @@ function createHeadElement([tag, attrs, innerHTML]: HeadConfig) {
} }
return el 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))
}

@ -39,7 +39,7 @@ export async function renderPage(
pageServerJsFileName pageServerJsFileName
)) ))
const pageData = JSON.parse(__pageData) const pageData = JSON.parse(__pageData)
const frontmatterHead = pageData.frontmatter.head
const assetPath = `${siteData.base}_assets/` const assetPath = `${siteData.base}_assets/`
const preloadLinks = [ const preloadLinks = [
// resolve imports for index.js + page.md.js and inject script tags for // resolve imports for index.js + page.md.js and inject script tags for
@ -69,7 +69,7 @@ export async function renderPage(
<link rel="stylesheet" href="${assetPath}${cssChunk.fileName}"> <link rel="stylesheet" href="${assetPath}${cssChunk.fileName}">
${preloadLinks} ${preloadLinks}
${renderHead(siteData.head)} ${renderHead(siteData.head)}
${renderHead(pageData.frontmatter.head)} ${renderHead(frontmatterHead && rejectHeadDescription(frontmatterHead))}
</head> </head>
<body> <body>
<div id="app">${content}</div> <div id="app">${content}</div>
@ -121,3 +121,15 @@ function renderAttrs(attrs: Record<string, string>): string {
}) })
.join('') .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))
}

@ -42,7 +42,7 @@ export function createMarkdownToVueRenderFn(
const pageData: PageData = { const pageData: PageData = {
title: inferTitle(frontmatter, content), title: inferTitle(frontmatter, content),
description: inferDescription(frontmatter), description: inferDescription(frontmatter),
frontmatter: withHeadDescriptionRemoved(frontmatter), frontmatter: frontmatter,
headers: data.headers, headers: data.headers,
relativePath: file.replace(/\\/g, '/'), relativePath: file.replace(/\\/g, '/'),
lastUpdated lastUpdated
@ -130,25 +130,3 @@ const getHeadMetaContent = (
return meta && meta[1].content 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<string, any>) {
if (frontmatter.head) {
return {
...frontmatter,
head: rejectHeadDescription(frontmatter.head)
}
}
return frontmatter
}

Loading…
Cancel
Save