fix(embed): compatible ssr

This commit is contained in:
qingwei.li 2018-02-12 16:19:04 +08:00 committed by cinwell.li
commit dc0c3ced4e
3 changed files with 42 additions and 19 deletions

View file

@ -109,7 +109,7 @@ export class Compiler {
if (config.include) {
if (!isAbsolutePath(href)) {
href = getPath(this.contentBase, href)
href = getPath(process.env.SSR ? '' : this.contentBase, href)
}
let media
@ -182,6 +182,7 @@ export class Compiler {
}
// highlight code
origin.code = renderer.code = function (code, lang = '') {
code = code.replace(/@DOCSIFY_QM@/g, '`')
const hl = Prism.highlight(
code,
Prism.languages[lang] || Prism.languages.markup

View file

@ -3,33 +3,41 @@ import { merge } from '../util/core'
const cached = {}
function walkFetchEmbed ({ step = 0, embedTokens, compile }, cb) {
function walkFetchEmbed ({ step = 0, embedTokens, compile, fetch }, cb) {
const token = embedTokens[step]
if (!token) {
return cb({})
}
get(token.embed.url).then(text => {
const next = text => {
let embedToken
if (token.embed.type === 'markdown') {
embedToken = compile.lexer(text)
} else if (token.embed.type === 'code') {
embedToken = compile.lexer(
'```' +
token.embed.lang +
'\n' +
text.replace(/`/g, '@DOCSIFY_QM@') +
'\n```\n'
)
if (text) {
if (token.embed.type === 'markdown') {
embedToken = compile.lexer(text)
} else if (token.embed.type === 'code') {
embedToken = compile.lexer(
'```' +
token.embed.lang +
'\n' +
text.replace(/`/g, '@DOCSIFY_QM@') +
'\n```\n'
)
}
}
cb({ token, embedToken })
walkFetchEmbed({ step: ++step, compile, embedTokens }, cb)
})
walkFetchEmbed({ step: ++step, compile, embedTokens, fetch }, cb)
}
if (process.env.SSR) {
console.log(token.embed.url)
fetch(token.embed.url).then(next)
} else {
get(token.embed.url).then(next)
}
}
export function prerenderEmbed ({ compiler, raw }, done) {
export function prerenderEmbed ({ compiler, raw, fetch }, done) {
let hit
if ((hit = cached[raw])) {
return done(hit)
@ -65,7 +73,7 @@ export function prerenderEmbed ({ compiler, raw }, done) {
})
let moveIndex = 0
walkFetchEmbed({ compile, embedTokens }, ({ embedToken, token }) => {
walkFetchEmbed({ compile, embedTokens, fetch }, ({ embedToken, token }) => {
if (token) {
const index = token.index + moveIndex