Skip to content

Commit

Permalink
fix: should render title correctly in index.html (#1621)
Browse files Browse the repository at this point in the history
  • Loading branch information
kermanx authored May 28, 2024
1 parent 4f470ac commit 4b7a611
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 24 deletions.
2 changes: 1 addition & 1 deletion packages/client/env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ export const themeVars = computed(() => {
return objectMap(configs.themeConfig || {}, (k, v) => [`--slidev-theme-${k}`, v])
})

export const slidesTitle = configs.titleTemplate.replace('%s', configs.title || 'Slidev')
export const slidesTitle = configs.slidesTitle
7 changes: 3 additions & 4 deletions packages/parser/src/fs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,9 @@ export async function load(userRoot: string, filepath: string, content?: string,

const entry = await loadMarkdown(slash(filepath))

const headmatter = {
title: slides[0]?.title,
...entry.slides[0]?.frontmatter,
}
const headmatter = { ...entry.slides[0]?.frontmatter }
if (slides[0]?.title)
headmatter.title = slides[0].title

return {
slides,
Expand Down
14 changes: 6 additions & 8 deletions packages/slidev/node/commands/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { join } from 'node:path'
import { loadConfigFromFile, mergeConfig, resolveConfig } from 'vite'
import type { ConfigEnv, InlineConfig } from 'vite'
import type { ResolvedSlidevOptions, SlidevData } from '@slidev/types'
import { isString } from 'unocss'
import MarkdownIt from 'markdown-it'
import { slash } from '@antfu/utils'
import markdownItLink from '../syntax/markdown-it/markdown-it-link'
Expand All @@ -14,12 +13,11 @@ import { version } from '../../package.json'
export const sharedMd = MarkdownIt({ html: true })
sharedMd.use(markdownItLink)

export function getTitle(data: SlidevData) {
if (isString(data.config.title)) {
const tokens = sharedMd.parseInline(data.config.title, {})
return stringifyMarkdownTokens(tokens)
}
return data.config.title
export function getSlideTitle(data: SlidevData) {
const tokens = sharedMd.parseInline(data.config.title, {})
const title = stringifyMarkdownTokens(tokens)
const slideTitle = data.config.titleTemplate.replace('%s', title)
return slideTitle === 'Slidev - Slidev' ? 'Slidev' : slideTitle
}

function escapeHtml(unsafe: unknown) {
Expand All @@ -43,7 +41,7 @@ export async function getIndexHtml({ entry, clientRoot, roots, data }: ResolvedS
`<meta name="slidev:version" content="${version}">`,
`<meta charset="slidev:entry" content="${slash(entry)}">`,
`<link rel="icon" href="${data.config.favicon}">`,
`<title>${getTitle(data)}</title>`,
`<title>${getSlideTitle(data)}</title>`,
info && `<meta name="description" content=${escapeHtml(info)}>`,
author && `<meta name="author" content=${escapeHtml(author)}>`,
keywords && `<meta name="keywords" content=${escapeHtml(Array.isArray(keywords) ? keywords.join(', ') : keywords)}>`,
Expand Down
12 changes: 2 additions & 10 deletions packages/slidev/node/virtual/configs.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,14 @@
import { isString } from '@antfu/utils'
import { stringifyMarkdownTokens } from '../utils'
import { getSlideTitle } from '../commands/shared'
import type { VirtualModuleTemplate } from './types'

export const templateConfigs: VirtualModuleTemplate = {
id: '/@slidev/configs',
getContent: async ({ data, remote }, { md }) => {
function getTitle() {
if (isString(data.config.title)) {
const tokens = md.parseInline(data.config.title, {})
return stringifyMarkdownTokens(tokens)
}
return data.config.title
}

const config = {
...data.config,
remote,
title: getTitle(),
slidesTitle: getSlideTitle(data),
}

if (isString(config.info))
Expand Down
2 changes: 1 addition & 1 deletion packages/types/client.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
declare module '#slidev/configs' {
import type { SlidevConfig } from '@slidev/types'

const configs: SlidevConfig
const configs: SlidevConfig & { slidesTitle: string }
export default configs
}

Expand Down

0 comments on commit 4b7a611

Please sign in to comment.