diff --git a/packages/@vuepress/core/lib/app/app.js b/packages/@vuepress/core/lib/app/app.js index 9adb77c0b4..2789036f35 100644 --- a/packages/@vuepress/core/lib/app/app.js +++ b/packages/@vuepress/core/lib/app/app.js @@ -6,8 +6,10 @@ import { routes } from '@internal/routes' import { siteData } from '@internal/siteData' import appEnhancers from '@internal/app-enhancers' import globalUIComponents from '@internal/global-ui' +import rootMixins from '@internal/root-mixins' import ClientComputedMixin from '@transform/ClientComputedMixin' import VuePress from './plugins/VuePress' +import { injectComponentOption } from '@app/util' // built-in components import Content from './components/Content.js' @@ -97,6 +99,8 @@ export function createApp (isServer) { console.error(e) } + injectComponentOption(options, 'mixins', rootMixins) + const app = new Vue( Object.assign(options, { router, diff --git a/packages/@vuepress/core/lib/app/components/LayoutDistributor.js b/packages/@vuepress/core/lib/app/components/LayoutDistributor.js new file mode 100644 index 0000000000..fee8a9776a --- /dev/null +++ b/packages/@vuepress/core/lib/app/components/LayoutDistributor.js @@ -0,0 +1,19 @@ +import Vue from 'vue' +import { getLayoutAsyncComponent } from '../util' + +Vue.component('Layout', getLayoutAsyncComponent('Layout')) +Vue.component('NotFound', getLayoutAsyncComponent('NotFound')) + +export default { + functional: true, + + render (h, { parent }) { + if (parent.$page.path) { + if (getLayoutAsyncComponent(parent.$page.frontmatter.layout)) { + return h(parent.$page.frontmatter.layout) + } + return h('Layout') + } + return h('NotFound') + } +} diff --git a/packages/@vuepress/core/lib/app/components/LayoutDistributor.vue b/packages/@vuepress/core/lib/app/components/LayoutDistributor.vue deleted file mode 100644 index a2fa9645ba..0000000000 --- a/packages/@vuepress/core/lib/app/components/LayoutDistributor.vue +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/packages/@vuepress/core/lib/app/root-mixins/updateMeta.js b/packages/@vuepress/core/lib/app/root-mixins/updateMeta.js index bfa818be2d..ce0c8043ec 100644 --- a/packages/@vuepress/core/lib/app/root-mixins/updateMeta.js +++ b/packages/@vuepress/core/lib/app/root-mixins/updateMeta.js @@ -15,6 +15,7 @@ export default { methods: { updateMeta () { + if (typeof document === 'undefined') return document.title = this.$title document.documentElement.lang = this.$lang const userMeta = this.$page.frontmatter.meta || [] diff --git a/packages/@vuepress/core/lib/internal-plugins/routes.js b/packages/@vuepress/core/lib/internal-plugins/routes.js index c9e2154db2..8277ae4e1e 100644 --- a/packages/@vuepress/core/lib/internal-plugins/routes.js +++ b/packages/@vuepress/core/lib/internal-plugins/routes.js @@ -14,13 +14,10 @@ module.exports = (options, ctx) => ({ */ function importCode () { return ` -import { injectComponentOption, ensureAsyncComponentsLoaded } from '@app/util' -import rootMixins from '@internal/root-mixins' +import { ensureAsyncComponentsLoaded } from '@app/util' import layoutComponents from '@internal/layout-components' import pageComponents from '@internal/page-components' -import LayoutDistributor from '@app/components/LayoutDistributor.vue' - -injectComponentOption(LayoutDistributor, 'mixins', rootMixins) +import LayoutDistributor from '@app/components/LayoutDistributor' ` } diff --git a/packages/@vuepress/core/package.json b/packages/@vuepress/core/package.json index 340720ae9e..4c38c8934f 100644 --- a/packages/@vuepress/core/package.json +++ b/packages/@vuepress/core/package.json @@ -56,11 +56,11 @@ "postcss-loader": "^2.1.5", "toml": "^2.3.3", "url-loader": "^1.0.1", - "vue": "^2.5.16", - "vue-loader": "^15.2.4", + "vue": "^2.5.22", + "vue-loader": "^15.6.0", "vue-router": "^3.0.2", - "vue-server-renderer": "^2.5.16", - "vue-template-compiler": "^2.5.16", + "vue-server-renderer": "^2.5.22", + "vue-template-compiler": "^2.5.22", "vuepress-html-webpack-plugin": "^3.2.0", "webpack": "^4.8.1", "webpack-chain": "^4.6.0", diff --git a/packages/docs/docs/.vuepress/mixin.js b/packages/docs/docs/.vuepress/mixin.js index 285e1e22af..e42cf3eb1e 100644 --- a/packages/docs/docs/.vuepress/mixin.js +++ b/packages/docs/docs/.vuepress/mixin.js @@ -33,6 +33,7 @@ const gotIt = { export default { methods: { notice () { + if (!this.$toasted) return setTimeout(() => { this.$notification = this.$toasted.show(notification[this.$localePath], { containerClass: 'compatibility-notification', diff --git a/yarn.lock b/yarn.lock index bbe4964d31..72fd0fcd3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1288,18 +1288,18 @@ babel-plugin-transform-vue-jsx "^4.0.1" core-js "^2.5.7" -"@vue/component-compiler-utils@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.1.0.tgz#8331eadc8acdbc35aace5a61d2153e6f6434bfe2" +"@vue/component-compiler-utils@^2.4.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.5.0.tgz#411846d582d393f701f747517ddd29275ce64ca4" dependencies: consolidate "^0.15.1" hash-sum "^1.0.2" lru-cache "^4.1.2" merge-source-map "^1.1.0" - postcss "^6.0.20" - postcss-selector-parser "^3.1.1" - prettier "^1.13.7" - source-map "^0.5.6" + postcss "^7.0.7" + postcss-selector-parser "^5.0.0" + prettier "1.13.7" + source-map "^0.7.3" vue-template-es2015-compiler "^1.6.0" "@vue/test-utils@^1.0.0-beta.16": @@ -2494,6 +2494,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" @@ -3251,6 +3259,10 @@ cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + cssnano@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" @@ -3612,7 +3624,7 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" -dot-prop@^4.1.0, dot-prop@^4.1.1, dot-prop@^4.2.0: +dot-prop@^4.1.0, dot-prop@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" dependencies: @@ -7963,11 +7975,11 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: indexes-of "^1.0.1" uniq "^1.0.1" -postcss-selector-parser@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" +postcss-selector-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" dependencies: - dot-prop "^4.1.1" + cssesc "^2.0.0" indexes-of "^1.0.1" uniq "^1.0.1" @@ -8009,7 +8021,7 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.0, postcss@^6.0.17, postcss@^6.0.20: +postcss@^6.0.0, postcss@^6.0.17: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" dependencies: @@ -8025,6 +8037,14 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^5.4.0" +postcss@^7.0.7: + version "7.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.14.tgz#4527ed6b1ca0d82c53ce5ec1a2041c2346bbd6e5" + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -8037,7 +8057,7 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@^1.13.7: +prettier@1.13.7: version "1.13.7" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" @@ -9001,6 +9021,10 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + spdx-correct@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" @@ -9273,6 +9297,12 @@ supports-color@^5.3.0, supports-color@^5.4.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + dependencies: + has-flag "^3.0.0" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -9909,11 +9939,11 @@ vue-jest@^2.6.0: tsconfig "^7.0.0" vue-template-es2015-compiler "^1.6.0" -vue-loader@^15.2.4: - version "15.2.6" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.2.6.tgz#4ad4e56a0ca1fd89ebc4220f9e3bd4723097b397" +vue-loader@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.6.0.tgz#c78916dc4f994b1559056d4a1cb92fa0b00e42bf" dependencies: - "@vue/component-compiler-utils" "^2.0.0" + "@vue/component-compiler-utils" "^2.4.0" hash-sum "^1.0.2" loader-utils "^1.1.0" vue-hot-reload-api "^2.3.0" @@ -9923,9 +9953,9 @@ vue-router@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.2.tgz#dedc67afe6c4e2bc25682c8b1c2a8c0d7c7e56be" -vue-server-renderer@^2.5.16: - version "2.5.16" - resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.5.16.tgz#279ef8e37e502a0de3a9ae30758cc04a472eaac0" +vue-server-renderer@^2.5.22: + version "2.5.22" + resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.5.22.tgz#f119efef289c865adc22fda0ae7595299bedbdcf" dependencies: chalk "^1.1.3" hash-sum "^1.0.2" @@ -9943,9 +9973,9 @@ vue-style-loader@^4.1.0: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.5.16: - version "2.5.16" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.16.tgz#93b48570e56c720cdf3f051cc15287c26fbd04cb" +vue-template-compiler@^2.5.22: + version "2.5.22" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.22.tgz#c3d3c02c65f1908205c4fbd3b0ef579e51239955" dependencies: de-indent "^1.0.2" he "^1.1.0" @@ -9958,9 +9988,9 @@ vue-toasted@^1.1.25: version "1.1.25" resolved "https://registry.yarnpkg.com/vue-toasted/-/vue-toasted-1.1.25.tgz#27b1f40866d98f8bf817722869f3d97f7c0d4db1" -vue@^2.5.16: - version "2.5.16" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.16.tgz#07edb75e8412aaeed871ebafa99f4672584a0085" +vue@^2.5.22: + version "2.5.22" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.22.tgz#3bf88041af08b8539c37b268b70ca79245e9cc30" vuepress-html-webpack-plugin@^3.2.0: version "3.2.0"