feat: frontmatter description predefined variable

pull/170/head
Matias Capeletto 5 years ago
parent 7c83105e51
commit bea857ba19

@ -28,6 +28,7 @@ export function useUpdateHead(route: Route, siteDataByRouteRef: Ref<SiteData>) {
const pageData = route.data const pageData = route.data
const siteData = siteDataByRouteRef.value const siteData = siteDataByRouteRef.value
const pageTitle = pageData && pageData.title const pageTitle = pageData && pageData.title
const pageDescription = pageData && pageData.description
document.title = (pageTitle ? pageTitle + ` | ` : ``) + siteData.title document.title = (pageTitle ? pageTitle + ` | ` : ``) + siteData.title
updateHeadTags([ updateHeadTags([
['meta', { charset: 'utf-8' }], ['meta', { charset: 'utf-8' }],
@ -42,7 +43,7 @@ export function useUpdateHead(route: Route, siteDataByRouteRef: Ref<SiteData>) {
'meta', 'meta',
{ {
name: 'description', name: 'description',
content: siteData.description content: pageDescription || siteData.description
} }
], ],
...siteData.head, ...siteData.head,

@ -63,7 +63,9 @@ export async function renderPage(
<title> <title>
${pageData.title ? pageData.title + ` | ` : ``}${siteData.title} ${pageData.title ? pageData.title + ` | ` : ``}${siteData.title}
</title> </title>
<meta name="description" content="${siteData.description}"> <meta name="description" content="${
pageData.description || siteData.description
}">
<link rel="stylesheet" href="${assetPath}${cssChunk.fileName}"> <link rel="stylesheet" href="${assetPath}${cssChunk.fileName}">
${preloadLinks} ${preloadLinks}
${renderHead(siteData.head)} ${renderHead(siteData.head)}

@ -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, frontmatter: withHeadDescriptionRemoved(frontmatter),
headers: data.headers, headers: data.headers,
relativePath: file.replace(/\\/g, '/'), relativePath: file.replace(/\\/g, '/'),
lastUpdated lastUpdated
@ -109,11 +109,11 @@ const inferTitle = (frontmatter: any, content: string) => {
} }
const inferDescription = (frontmatter: Record<string, any>) => { const inferDescription = (frontmatter: Record<string, any>) => {
if (!frontmatter.head) { const { description, head } = frontmatter
return '' if (description !== undefined) {
return description
} }
return (head && getHeadMetaContent(head, 'description')) || ''
return getHeadMetaContent(frontmatter.head, 'description') || ''
} }
const getHeadMetaContent = ( const getHeadMetaContent = (
@ -130,3 +130,25 @@ 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