1
1
import Vue from 'vue'
2
- import { siteData } from './.temp/siteData'
3
2
import { findPageForPath } from './util'
4
3
4
+ export default function dataMixin ( siteData ) {
5
+ prepare ( siteData )
6
+ const store = new Vue ( {
7
+ data : { siteData }
8
+ } )
9
+
10
+ if ( module . hot ) {
11
+ module . hot . accept ( './.temp/siteData' , ( ) => {
12
+ prepare ( siteData )
13
+ store . siteData = siteData
14
+ } )
15
+ }
16
+
17
+ return {
18
+ computed : {
19
+ $site ( ) {
20
+ return store . siteData
21
+ } ,
22
+ $localeConfig ( ) {
23
+ const { locales = { } } = this . $site
24
+ let targetLang
25
+ let defaultLang
26
+ for ( const path in locales ) {
27
+ if ( path === '/' ) {
28
+ defaultLang = locales [ path ]
29
+ } else if ( this . $page . path . indexOf ( path ) === 0 ) {
30
+ targetLang = locales [ path ]
31
+ }
32
+ }
33
+ return targetLang || defaultLang || { }
34
+ } ,
35
+ $siteTitle ( ) {
36
+ return this . $localeConfig . title || this . $site . title || ''
37
+ } ,
38
+ $title ( ) {
39
+ const page = this . $page
40
+ const siteTitle = this . $siteTitle
41
+ const selfTitle = page . frontmatter . home ? null : (
42
+ page . frontmatter . title || // explicit title
43
+ page . title // inferred title
44
+ )
45
+ return siteTitle
46
+ ? selfTitle
47
+ ? ( siteTitle + ' | ' + selfTitle )
48
+ : siteTitle
49
+ : selfTitle || 'VuePress'
50
+ } ,
51
+ $description ( ) {
52
+ return this . $page . frontmatter . description || this . $localeConfig . description || this . $site . description || ''
53
+ } ,
54
+ $lang ( ) {
55
+ return this . $page . frontmatter . lang || this . $localeConfig . lang || 'en-US'
56
+ } ,
57
+ $localePath ( ) {
58
+ return this . $localeConfig . path || '/'
59
+ } ,
60
+ $themeLocaleConfig ( ) {
61
+ return ( this . $site . themeConfig . locales || { } ) [ this . $localePath ] || { }
62
+ } ,
63
+ $page ( ) {
64
+ return findPageForPath (
65
+ this . $site . pages ,
66
+ this . $route . path
67
+ )
68
+ }
69
+ }
70
+ }
71
+ }
72
+
5
73
function prepare ( siteData ) {
6
74
siteData . pages . forEach ( page => {
7
75
if ( ! page . frontmatter ) {
@@ -15,70 +83,3 @@ function prepare (siteData) {
15
83
}
16
84
Object . freeze ( siteData )
17
85
}
18
-
19
- prepare ( siteData )
20
- const store = new Vue ( {
21
- data : { siteData }
22
- } )
23
-
24
- if ( module . hot ) {
25
- module . hot . accept ( './.temp/siteData' , ( ) => {
26
- prepare ( siteData )
27
- store . siteData = siteData
28
- } )
29
- }
30
-
31
- export default {
32
- computed : {
33
- $site ( ) {
34
- return store . siteData
35
- } ,
36
- $localeConfig ( ) {
37
- const { locales = { } } = this . $site
38
- let targetLang
39
- let defaultLang
40
- for ( const path in locales ) {
41
- if ( path === '/' ) {
42
- defaultLang = locales [ path ]
43
- } else if ( this . $page . path . indexOf ( path ) === 0 ) {
44
- targetLang = locales [ path ]
45
- }
46
- }
47
- return targetLang || defaultLang || { }
48
- } ,
49
- $siteTitle ( ) {
50
- return this . $localeConfig . title || this . $site . title || ''
51
- } ,
52
- $title ( ) {
53
- const page = this . $page
54
- const siteTitle = this . $siteTitle
55
- const selfTitle = page . frontmatter . home ? null : (
56
- page . frontmatter . title || // explicit title
57
- page . title // inferred title
58
- )
59
- return siteTitle
60
- ? selfTitle
61
- ? ( siteTitle + ' | ' + selfTitle )
62
- : siteTitle
63
- : selfTitle || 'VuePress'
64
- } ,
65
- $description ( ) {
66
- return this . $page . frontmatter . description || this . $localeConfig . description || this . $site . description || ''
67
- } ,
68
- $lang ( ) {
69
- return this . $page . frontmatter . lang || this . $localeConfig . lang || 'en-US'
70
- } ,
71
- $localePath ( ) {
72
- return this . $localeConfig . path || '/'
73
- } ,
74
- $themeLocaleConfig ( ) {
75
- return ( this . $site . themeConfig . locales || { } ) [ this . $localePath ] || { }
76
- } ,
77
- $page ( ) {
78
- return findPageForPath (
79
- this . $site . pages ,
80
- this . $route . path
81
- )
82
- }
83
- }
84
- }
0 commit comments