no need for head changes in dev

pull/588/head
Georges Gomes 4 years ago
parent 57a51fa307
commit 987867d202

@ -3,69 +3,19 @@ import { HeadConfig, SiteData, processHead } from '../../shared'
import { Route } from '../router'
export function useUpdateHead(route: Route, siteDataByRouteRef: Ref<SiteData>) {
let managedHeadTags: HTMLElement[] = []
let isFirstUpdate = true
const updateHeadTags = (newTags: HeadConfig[]) => {
if (import.meta.env.PROD && isFirstUpdate) {
// in production, the initial meta tags are already pre-rendered so we
// skip the first update.
isFirstUpdate = false
return
}
const newEls: HTMLElement[] = []
const commonLength = Math.min(managedHeadTags.length, newTags.length)
for (let i = 0; i < commonLength; i++) {
let el = managedHeadTags[i]
const [tag, attrs, innerHTML = ''] = newTags[i]
if (el.tagName.toLocaleLowerCase() === tag) {
for (const key in attrs) {
if (el.getAttribute(key) !== attrs[key]) {
el.setAttribute(key, attrs[key])
}
}
for (let i = 0; i < el.attributes.length; i++) {
const name = el.attributes[i].name
if (!(name in attrs)) {
el.removeAttribute(name)
}
}
if (el.innerHTML !== innerHTML) {
el.innerHTML = innerHTML
}
} else {
document.head.removeChild(el)
el = createHeadElement(newTags[i])
document.head.append(el)
}
newEls.push(el)
}
managedHeadTags
.slice(commonLength)
.forEach((el) => document.head.removeChild(el))
newTags.slice(commonLength).forEach((headConfig) => {
const el = createHeadElement(headConfig)
document.head.appendChild(el)
newEls.push(el)
})
managedHeadTags = newEls
}
watchEffect(() => {
const pageData = route.data
const siteData = siteDataByRouteRef.value
const pageTitle = pageData && pageData.title
//const pageDescription = pageData && pageData.description
const pageDescription = pageData && pageData.description
// update title and description
document.title = (pageTitle ? pageTitle + ` | ` : ``) + siteData.title
document
.querySelector(`meta[name=description]`)!
.setAttribute('content', JSON.stringify(siteData.head))//pageDescription || siteData.description)
.setAttribute('content', pageDescription || siteData.description)
updateHeadTags(processHead(siteData.head, pageData))
})
}

@ -3,7 +3,6 @@ import { Route } from './router'
import serializedSiteData from '@siteData'
import { resolveSiteDataByRoute, PageData, SiteData } from '../shared'
import { withBase } from './utils'
import { HeadConfig } from 'dist/vitepress'
export const dataSymbol: InjectionKey<VitePressData> = Symbol()
@ -11,7 +10,6 @@ export interface VitePressData<T = any> {
site: Ref<SiteData<T>>
page: Ref<PageData>
theme: Ref<T>
head: Ref<HeadConfig[] | ((pageData: PageData) => HeadConfig[])>
frontmatter: Ref<PageData['frontmatter']>
title: Ref<string>
description: Ref<string>
@ -45,7 +43,6 @@ export function initData(route: Route): VitePressData {
return {
site,
theme: computed(() => site.value.themeConfig),
head: computed(() => site.value.head),
page: computed(() => route.data),
frontmatter: computed(() => route.data.frontmatter),
lang: computed(() => site.value.lang),

Loading…
Cancel
Save