From 704031ff2d1068803a3c125a479119470347255b Mon Sep 17 00:00:00 2001
From: ULIVZ <472590061@qq.com>
Date: Sat, 8 Sep 2018 01:33:58 +0800
Subject: [PATCH] fix($core): content slots doesn't work
---
packages/@vuepress/core/lib/app/app.js | 2 ++
.../core/lib/app/components/Content.js | 4 +++-
.../app/components/ContentSlotsDistributor.js | 19 +++++++++++++++++++
packages/@vuepress/markdown-loader/index.js | 3 ++-
4 files changed, 26 insertions(+), 2 deletions(-)
create mode 100644 packages/@vuepress/core/lib/app/components/ContentSlotsDistributor.js
diff --git a/packages/@vuepress/core/lib/app/app.js b/packages/@vuepress/core/lib/app/app.js
index 87300ebdc3..272ca04262 100644
--- a/packages/@vuepress/core/lib/app/app.js
+++ b/packages/@vuepress/core/lib/app/app.js
@@ -11,6 +11,7 @@ import Store from './Store'
// built-in components
import Content from './components/Content'
+import ContentSlotsDistributor from './components/ContentSlotsDistributor'
import OutboundLink from './components/OutboundLink.vue'
import ClientOnly from './components/ClientOnly'
@@ -36,6 +37,7 @@ Vue.use(Router)
Vue.mixin(dataMixin(ClientComputedMixin, siteData))
// component for rendering markdown content and setting title etc.
Vue.component('Content', Content)
+Vue.component('ContentSlotsDistributor', ContentSlotsDistributor)
Vue.component('OutboundLink', OutboundLink)
// component for client-only content
Vue.component('ClientOnly', ClientOnly)
diff --git a/packages/@vuepress/core/lib/app/components/Content.js b/packages/@vuepress/core/lib/app/components/Content.js
index 58c433cd05..5d548daf80 100644
--- a/packages/@vuepress/core/lib/app/components/Content.js
+++ b/packages/@vuepress/core/lib/app/components/Content.js
@@ -22,7 +22,9 @@ export default {
return h(pageKey, {
class: [data.class, data.staticClass],
style: data.style,
- slot: props.slot || 'default'
+ props: {
+ slotKey: props.slot || 'default'
+ }
})
}
return h('')
diff --git a/packages/@vuepress/core/lib/app/components/ContentSlotsDistributor.js b/packages/@vuepress/core/lib/app/components/ContentSlotsDistributor.js
new file mode 100644
index 0000000000..b9b0bca8ca
--- /dev/null
+++ b/packages/@vuepress/core/lib/app/components/ContentSlotsDistributor.js
@@ -0,0 +1,19 @@
+export default {
+ functional: true,
+ props: {
+ slotKey: String,
+ required: true
+ },
+ render (h, { props, slots }) {
+ console.log(props.slotKey)
+ return h('div',
+ {
+ class: [
+ 'content',
+ props.slotKey
+ ]
+ },
+ slots()[props.slotKey]
+ )
+ }
+}
diff --git a/packages/@vuepress/markdown-loader/index.js b/packages/@vuepress/markdown-loader/index.js
index a72c7005e9..1864d90558 100644
--- a/packages/@vuepress/markdown-loader/index.js
+++ b/packages/@vuepress/markdown-loader/index.js
@@ -100,8 +100,9 @@ module.exports = function (src) {
const res = (
`\n` +
- `${html}
\n` +
+ `${html}\n` +
`\n` +
+ `` +
(hoistedTags || []).join('\n') +
`\n${dataBlockString}\n`
)