@sugarat/theme 0.1.49 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node.d.ts +41 -1
- package/node.js +24 -20
- package/package.json +24 -24
- package/src/components/BlogAlert.vue +17 -17
- package/src/components/BlogApp.vue +91 -50
- package/src/components/BlogArticleAnalyze.vue +56 -57
- package/src/components/BlogAuthor.vue +55 -0
- package/src/components/BlogComment.vue +53 -50
- package/src/components/BlogDocCover.vue +4 -4
- package/src/components/BlogFooter.vue +131 -0
- package/src/components/BlogFriendLink.vue +40 -31
- package/src/components/BlogHomeBanner.vue +22 -16
- package/src/components/BlogHomeInfo.vue +4 -0
- package/src/components/BlogHomeOverview.vue +20 -20
- package/src/components/BlogHomeTags.vue +49 -40
- package/src/components/BlogHotArticle.vue +43 -36
- package/src/components/BlogImagePreview.vue +7 -5
- package/src/components/BlogItem.vue +42 -43
- package/src/components/BlogList.vue +46 -42
- package/src/components/BlogPopover.vue +41 -39
- package/src/components/BlogRecommendArticle.vue +58 -48
- package/src/components/BlogSearch.vue +143 -145
- package/src/components/UserWorks.vue +214 -210
- package/src/composables/config/blog.ts +14 -5
- package/src/composables/config/index.ts +74 -31
- package/src/constants/svg.ts +11 -2
- package/src/index.ts +1 -2
- package/src/node.ts +2 -2
- package/src/styles/gongan.png +0 -0
- package/src/styles/scss/global.scss +0 -5
- package/src/utils/client/index.ts +9 -8
- package/src/utils/node/genFeed.ts +8 -7
- package/src/utils/node/index.ts +8 -6
- package/src/utils/node/mdPlugins.ts +29 -22
- package/src/utils/node/theme.ts +16 -13
- package/src/utils/node/vitePlugins.ts +7 -6
- package/types/vue-shim.d.ts +1 -1
package/node.d.ts
CHANGED
|
@@ -119,6 +119,8 @@ declare namespace Theme {
|
|
|
119
119
|
inspiring?: string | string[];
|
|
120
120
|
inspiringTimeout?: number;
|
|
121
121
|
pageSize?: number;
|
|
122
|
+
author?: string | boolean;
|
|
123
|
+
logo?: string | boolean;
|
|
122
124
|
}
|
|
123
125
|
interface ArticleConfig {
|
|
124
126
|
readingTime?: boolean;
|
|
@@ -260,12 +262,16 @@ declare namespace Theme {
|
|
|
260
262
|
/**
|
|
261
263
|
* 设置解析 frontmatter 里 date 的时区
|
|
262
264
|
* @default 8 => 'UTC+8'
|
|
263
|
-
|
|
265
|
+
*/
|
|
264
266
|
timeZone?: number;
|
|
265
267
|
/**
|
|
266
268
|
* 启用RSS配置
|
|
267
269
|
*/
|
|
268
270
|
RSS?: RSSOptions;
|
|
271
|
+
/**
|
|
272
|
+
* 首页页脚
|
|
273
|
+
*/
|
|
274
|
+
footer?: Footer;
|
|
269
275
|
}
|
|
270
276
|
type RSSOptions = Omit<FeedOptions, 'id'> & {
|
|
271
277
|
id?: string;
|
|
@@ -301,6 +307,40 @@ declare namespace Theme {
|
|
|
301
307
|
limit?: number;
|
|
302
308
|
ariaLabel?: string;
|
|
303
309
|
};
|
|
310
|
+
interface Footer {
|
|
311
|
+
/**
|
|
312
|
+
* 自定义补充信息
|
|
313
|
+
*/
|
|
314
|
+
message?: string;
|
|
315
|
+
/**
|
|
316
|
+
* 是否展示主题版本信息
|
|
317
|
+
*/
|
|
318
|
+
version?: boolean;
|
|
319
|
+
/**
|
|
320
|
+
* copyright
|
|
321
|
+
*/
|
|
322
|
+
copyright?: string | {
|
|
323
|
+
message: string;
|
|
324
|
+
link?: string;
|
|
325
|
+
icon?: boolean | string;
|
|
326
|
+
};
|
|
327
|
+
/**
|
|
328
|
+
* ICP 备案信息
|
|
329
|
+
*/
|
|
330
|
+
icpRecord?: {
|
|
331
|
+
name: string;
|
|
332
|
+
link: string;
|
|
333
|
+
icon?: boolean | string;
|
|
334
|
+
};
|
|
335
|
+
/**
|
|
336
|
+
* 公安备案信息
|
|
337
|
+
*/
|
|
338
|
+
securityRecord?: {
|
|
339
|
+
name: string;
|
|
340
|
+
link: string;
|
|
341
|
+
icon?: boolean | string;
|
|
342
|
+
};
|
|
343
|
+
}
|
|
304
344
|
interface Config extends DefaultTheme.Config {
|
|
305
345
|
blog?: BlogConfig;
|
|
306
346
|
}
|
package/node.js
CHANGED
|
@@ -32,7 +32,7 @@ __export(node_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(node_exports);
|
|
34
34
|
|
|
35
|
-
// ../../node_modules/.pnpm/vitepress-plugin-tabs@0.2.0_vitepress@1.0.0-rc.
|
|
35
|
+
// ../../node_modules/.pnpm/vitepress-plugin-tabs@0.2.0_vitepress@1.0.0-rc.17_vue@3.3.4/node_modules/vitepress-plugin-tabs/dist/index.js
|
|
36
36
|
var tabsMarker = "=tabs";
|
|
37
37
|
var tabsMarkerLen = tabsMarker.length;
|
|
38
38
|
var ruleBlockTabs = (state, startLine, endLine, silent) => {
|
|
@@ -197,7 +197,7 @@ var tabsPlugin = (md) => {
|
|
|
197
197
|
};
|
|
198
198
|
|
|
199
199
|
// src/utils/node/index.ts
|
|
200
|
-
var
|
|
200
|
+
var import_node_child_process = require("child_process");
|
|
201
201
|
|
|
202
202
|
// src/utils/client/index.ts
|
|
203
203
|
function formatDate(d, fmt = "yyyy-MM-dd hh:mm:ss") {
|
|
@@ -211,7 +211,7 @@ function formatDate(d, fmt = "yyyy-MM-dd hh:mm:ss") {
|
|
|
211
211
|
"m+": d.getMinutes(),
|
|
212
212
|
"s+": d.getSeconds(),
|
|
213
213
|
"q+": Math.floor((d.getMonth() + 3) / 3),
|
|
214
|
-
S: d.getMilliseconds()
|
|
214
|
+
"S": d.getMilliseconds()
|
|
215
215
|
};
|
|
216
216
|
if (/(y+)/.test(fmt)) {
|
|
217
217
|
fmt = fmt.replace(
|
|
@@ -258,7 +258,7 @@ function getDefaultTitle(content) {
|
|
|
258
258
|
function getFileBirthTime(url) {
|
|
259
259
|
let date = new Date();
|
|
260
260
|
try {
|
|
261
|
-
const infoStr = (0,
|
|
261
|
+
const infoStr = (0, import_node_child_process.spawnSync)("git", ["log", "-1", '--pretty="%ci"', url]).stdout?.toString().replace(/["']/g, "").trim();
|
|
262
262
|
if (infoStr) {
|
|
263
263
|
date = new Date(infoStr);
|
|
264
264
|
}
|
|
@@ -277,11 +277,11 @@ function aliasObjectToArray(obj) {
|
|
|
277
277
|
}));
|
|
278
278
|
}
|
|
279
279
|
var EXTERNAL_URL_RE = /^[a-z]+:/i;
|
|
280
|
-
function joinPath(base,
|
|
281
|
-
return `${base}${
|
|
280
|
+
function joinPath(base, path4) {
|
|
281
|
+
return `${base}${path4}`.replace(/\/+/g, "/");
|
|
282
282
|
}
|
|
283
|
-
function withBase(base,
|
|
284
|
-
return EXTERNAL_URL_RE.test(
|
|
283
|
+
function withBase(base, path4) {
|
|
284
|
+
return EXTERNAL_URL_RE.test(path4) || path4.startsWith(".") ? path4 : joinPath(base, path4);
|
|
285
285
|
}
|
|
286
286
|
|
|
287
287
|
// src/utils/node/mdPlugins.ts
|
|
@@ -327,7 +327,7 @@ function assignMermaid(config) {
|
|
|
327
327
|
...aliasObjectToArray({
|
|
328
328
|
...config.vite.resolve.alias,
|
|
329
329
|
"cytoscape/dist/cytoscape.umd.js": "cytoscape/dist/cytoscape.esm.js",
|
|
330
|
-
mermaid: "mermaid/dist/mermaid.esm.mjs"
|
|
330
|
+
"mermaid": "mermaid/dist/mermaid.esm.mjs"
|
|
331
331
|
}),
|
|
332
332
|
{ find: /^dayjs\/(.*).js/, replacement: "dayjs/esm/$1" }
|
|
333
333
|
];
|
|
@@ -360,10 +360,11 @@ function supportRunExtendsPlugin(config) {
|
|
|
360
360
|
}
|
|
361
361
|
|
|
362
362
|
// src/utils/node/theme.ts
|
|
363
|
+
var import_node_fs = __toESM(require("fs"));
|
|
364
|
+
var import_node_path = __toESM(require("path"));
|
|
365
|
+
var import_node_process = __toESM(require("process"));
|
|
363
366
|
var import_fast_glob = __toESM(require("fast-glob"));
|
|
364
367
|
var import_gray_matter = __toESM(require("gray-matter"));
|
|
365
|
-
var import_fs = __toESM(require("fs"));
|
|
366
|
-
var import_path = __toESM(require("path"));
|
|
367
368
|
function patchDefaultThemeSideBar(cfg) {
|
|
368
369
|
return cfg?.blog !== false && cfg?.recommend !== false ? {
|
|
369
370
|
sidebar: [
|
|
@@ -376,27 +377,27 @@ function patchDefaultThemeSideBar(cfg) {
|
|
|
376
377
|
}
|
|
377
378
|
var pageMap = /* @__PURE__ */ new Map();
|
|
378
379
|
function getArticles(cfg) {
|
|
379
|
-
const srcDir = cfg?.srcDir ||
|
|
380
|
+
const srcDir = cfg?.srcDir || import_node_process.default.argv.slice(2)?.[1] || ".";
|
|
380
381
|
const files = import_fast_glob.default.sync(`${srcDir}/**/*.md`, { ignore: ["node_modules"] });
|
|
381
382
|
const data = files.map((v) => {
|
|
382
383
|
let route = v.replace(".md", "");
|
|
383
384
|
if (route.startsWith("./")) {
|
|
384
385
|
route = route.replace(
|
|
385
386
|
new RegExp(
|
|
386
|
-
`^\\.\\/${
|
|
387
|
+
`^\\.\\/${import_node_path.default.join(srcDir, "/").replace(new RegExp(`\\${import_node_path.default.sep}`, "g"), "/")}`
|
|
387
388
|
),
|
|
388
389
|
""
|
|
389
390
|
);
|
|
390
391
|
} else {
|
|
391
392
|
route = route.replace(
|
|
392
393
|
new RegExp(
|
|
393
|
-
`^${
|
|
394
|
+
`^${import_node_path.default.join(srcDir, "/").replace(new RegExp(`\\${import_node_path.default.sep}`, "g"), "/")}`
|
|
394
395
|
),
|
|
395
396
|
""
|
|
396
397
|
);
|
|
397
398
|
}
|
|
398
399
|
pageMap.set(`/${route}`, v);
|
|
399
|
-
const fileContent =
|
|
400
|
+
const fileContent = import_node_fs.default.readFileSync(v, "utf-8");
|
|
400
401
|
const { data: frontmatter, excerpt } = (0, import_gray_matter.default)(fileContent, {
|
|
401
402
|
excerpt: true
|
|
402
403
|
});
|
|
@@ -452,11 +453,14 @@ function patchVPThemeConfig(cfg, vpThemeConfig = {}) {
|
|
|
452
453
|
}
|
|
453
454
|
|
|
454
455
|
// src/utils/node/vitePlugins.ts
|
|
456
|
+
var import_node_path3 = __toESM(require("path"));
|
|
457
|
+
var import_node_child_process2 = require("child_process");
|
|
458
|
+
var import_node_process2 = __toESM(require("process"));
|
|
455
459
|
var import_vitepress_plugin_pagefind = require("vitepress-plugin-pagefind");
|
|
456
460
|
|
|
457
461
|
// src/utils/node/genFeed.ts
|
|
458
|
-
var
|
|
459
|
-
var
|
|
462
|
+
var import_node_path2 = __toESM(require("path"));
|
|
463
|
+
var import_node_fs2 = __toESM(require("fs"));
|
|
460
464
|
var import_feed = require("feed");
|
|
461
465
|
async function genFeed(config) {
|
|
462
466
|
const blogCfg = config.userConfig.themeConfig.blog;
|
|
@@ -499,7 +503,7 @@ async function genFeed(config) {
|
|
|
499
503
|
let html;
|
|
500
504
|
const filepath = pageMap.get(route);
|
|
501
505
|
if (filepath) {
|
|
502
|
-
const fileContent =
|
|
506
|
+
const fileContent = import_node_fs2.default.readFileSync(filepath, "utf-8");
|
|
503
507
|
html = mdRender.render(fileContent);
|
|
504
508
|
}
|
|
505
509
|
feed.addItem({
|
|
@@ -518,8 +522,8 @@ async function genFeed(config) {
|
|
|
518
522
|
});
|
|
519
523
|
}
|
|
520
524
|
const RSSFilename = filename || "feed.rss";
|
|
521
|
-
const RSSFile =
|
|
522
|
-
(0,
|
|
525
|
+
const RSSFile = import_node_path2.default.join(config.outDir, RSSFilename);
|
|
526
|
+
(0, import_node_fs2.writeFileSync)(RSSFile, feed.rss2());
|
|
523
527
|
console.log("\u{1F389} RSS generated", RSSFilename);
|
|
524
528
|
console.log("rss filepath:", RSSFile);
|
|
525
529
|
console.log("rss url:", `${baseUrl}${config.site.base + RSSFilename}`);
|
package/package.json
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sugarat/theme",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "简约风的 Vitepress 博客主题,sugarat vitepress blog theme",
|
|
5
|
-
"
|
|
5
|
+
"author": "sugar",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://theme.sugarat.top",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/ATQQ/sugar-blog.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/ATQQ/sugar-blog/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"vitepress",
|
|
17
|
+
"theme",
|
|
18
|
+
"粥里有勺糖"
|
|
19
|
+
],
|
|
6
20
|
"exports": {
|
|
7
21
|
"./node": {
|
|
8
22
|
"types": "./node.d.ts",
|
|
@@ -11,27 +25,13 @@
|
|
|
11
25
|
"./package.json": "./package.json",
|
|
12
26
|
".": "./src/index.ts"
|
|
13
27
|
},
|
|
28
|
+
"main": "src/index.ts",
|
|
14
29
|
"files": [
|
|
15
|
-
"
|
|
16
|
-
"types",
|
|
30
|
+
"node.d.ts",
|
|
17
31
|
"node.js",
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
"repository": {
|
|
21
|
-
"type": "git",
|
|
22
|
-
"url": "git+https://github.com/ATQQ/sugar-blog.git"
|
|
23
|
-
},
|
|
24
|
-
"keywords": [
|
|
25
|
-
"vitepress",
|
|
26
|
-
"theme",
|
|
27
|
-
"粥里有勺糖"
|
|
32
|
+
"src",
|
|
33
|
+
"types"
|
|
28
34
|
],
|
|
29
|
-
"author": "sugar",
|
|
30
|
-
"license": "MIT",
|
|
31
|
-
"homepage": "https://theme.sugarat.top",
|
|
32
|
-
"bugs": {
|
|
33
|
-
"url": "https://github.com/ATQQ/sugar-blog/issues"
|
|
34
|
-
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@mdit-vue/shared": "^0.12.0",
|
|
37
37
|
"@mermaid-js/mermaid-mindmap": "^9.3.0",
|
|
@@ -43,19 +43,19 @@
|
|
|
43
43
|
"highlight.js": "^11.7.0",
|
|
44
44
|
"mermaid": "^10.2.4",
|
|
45
45
|
"vitepress-plugin-mermaid": "^2.0.13",
|
|
46
|
-
"vitepress-plugin-pagefind": "0.2.
|
|
46
|
+
"vitepress-plugin-pagefind": "0.2.10",
|
|
47
47
|
"vue-command-palette": "^0.1.4"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@element-plus/icons-vue": "^2.1.0",
|
|
51
51
|
"element-plus": "^2.3.4",
|
|
52
|
+
"pagefind": "1.0.3",
|
|
52
53
|
"sass": "^1.56.1",
|
|
53
54
|
"tsup": " ^6.5.0",
|
|
54
55
|
"typescript": "^4.8.2",
|
|
55
|
-
"vitepress": "1.0.0-rc.
|
|
56
|
+
"vitepress": "1.0.0-rc.17",
|
|
56
57
|
"vitepress-plugin-tabs": "^0.2.0",
|
|
57
|
-
"vue": "^3.3.4"
|
|
58
|
-
"pagefind": "1.0.3"
|
|
58
|
+
"vue": "^3.3.4"
|
|
59
59
|
},
|
|
60
60
|
"scripts": {
|
|
61
61
|
"dev": "npm run build:node && npm run dev:docs",
|
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="global-alert" v-if="show" data-pagefind-ignore="all">
|
|
3
|
-
<el-alert
|
|
4
|
-
:title="alertProps?.title"
|
|
5
|
-
:type="alertProps?.type"
|
|
6
|
-
:show-icon="alertProps?.showIcon"
|
|
7
|
-
:center="alertProps?.center"
|
|
8
|
-
:closable="alertProps?.closable"
|
|
9
|
-
:close-text="alertProps?.closeText"
|
|
10
|
-
:description="alertProps?.description"
|
|
11
|
-
>
|
|
12
|
-
<div v-if="alertProps?.html" v-html="alertProps?.html"></div>
|
|
13
|
-
</el-alert>
|
|
14
|
-
</div>
|
|
15
|
-
</template>
|
|
16
|
-
|
|
17
1
|
<script lang="ts" setup>
|
|
18
2
|
import { ElAlert } from 'element-plus'
|
|
19
|
-
import {
|
|
3
|
+
import { onMounted, ref } from 'vue'
|
|
20
4
|
import { useBlogConfig } from '../composables/config/blog'
|
|
21
5
|
|
|
22
6
|
const { alert: alertProps } = useBlogConfig()
|
|
@@ -46,6 +30,22 @@ onMounted(() => {
|
|
|
46
30
|
})
|
|
47
31
|
</script>
|
|
48
32
|
|
|
33
|
+
<template>
|
|
34
|
+
<div v-if="show" class="global-alert" data-pagefind-ignore="all">
|
|
35
|
+
<ElAlert
|
|
36
|
+
:title="alertProps?.title"
|
|
37
|
+
:type="alertProps?.type"
|
|
38
|
+
:show-icon="alertProps?.showIcon"
|
|
39
|
+
:center="alertProps?.center"
|
|
40
|
+
:closable="alertProps?.closable"
|
|
41
|
+
:close-text="alertProps?.closeText"
|
|
42
|
+
:description="alertProps?.description"
|
|
43
|
+
>
|
|
44
|
+
<div v-if="alertProps?.html" v-html="alertProps?.html" />
|
|
45
|
+
</ElAlert>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
49
|
<style lang="scss" scoped>
|
|
50
50
|
.global-alert {
|
|
51
51
|
position: fixed;
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
<script setup lang="ts" name="BlogApp">
|
|
2
2
|
import Theme from 'vitepress/theme'
|
|
3
|
+
import { useData } from 'vitepress'
|
|
4
|
+
import { computed } from 'vue'
|
|
5
|
+
import { useBlogThemeMode } from '../composables/config/blog'
|
|
3
6
|
import BlogHomeInfo from './BlogHomeInfo.vue'
|
|
4
7
|
import BlogHomeBanner from './BlogHomeBanner.vue'
|
|
5
8
|
import BlogList from './BlogList.vue'
|
|
6
9
|
import BlogComment from './BlogComment.vue'
|
|
10
|
+
|
|
7
11
|
// import BlogSearch from './BlogSearch.vue'
|
|
8
12
|
import BlogSidebar from './BlogSidebar.vue'
|
|
9
13
|
import BlogImagePreview from './BlogImagePreview.vue'
|
|
10
14
|
import BlogArticleAnalyze from './BlogArticleAnalyze.vue'
|
|
11
15
|
import BlogAlert from './BlogAlert.vue'
|
|
12
16
|
import BlogPopover from './BlogPopover.vue'
|
|
13
|
-
import
|
|
17
|
+
import BlogFooter from './BlogFooter.vue'
|
|
14
18
|
|
|
19
|
+
const { frontmatter } = useData()
|
|
20
|
+
const layout = computed(() => frontmatter.value.layout)
|
|
15
21
|
const isBlogTheme = useBlogThemeMode()
|
|
16
22
|
const { Layout } = Theme
|
|
17
23
|
</script>
|
|
@@ -19,6 +25,7 @@ const { Layout } = Theme
|
|
|
19
25
|
<template>
|
|
20
26
|
<Layout>
|
|
21
27
|
<template #layout-top>
|
|
28
|
+
<slot name="layout-top" />
|
|
22
29
|
<BlogAlert />
|
|
23
30
|
<BlogPopover />
|
|
24
31
|
</template>
|
|
@@ -39,7 +46,7 @@ const { Layout } = Theme
|
|
|
39
46
|
<BlogSearch />
|
|
40
47
|
</template> -->
|
|
41
48
|
<!-- 自定义首页 -->
|
|
42
|
-
<template
|
|
49
|
+
<template v-if="isBlogTheme" #home-hero-before>
|
|
43
50
|
<slot name="home-hero-before" />
|
|
44
51
|
<div class="home">
|
|
45
52
|
<div class="header-banner">
|
|
@@ -49,11 +56,13 @@ const { Layout } = Theme
|
|
|
49
56
|
<div class="blog-list-wrapper">
|
|
50
57
|
<BlogList />
|
|
51
58
|
</div>
|
|
52
|
-
<div class="blog-info-wrapper"
|
|
59
|
+
<div class="blog-info-wrapper">
|
|
60
|
+
<BlogHomeInfo />
|
|
61
|
+
</div>
|
|
53
62
|
</div>
|
|
54
63
|
</div>
|
|
55
64
|
</template>
|
|
56
|
-
<template
|
|
65
|
+
<template v-if="isBlogTheme" #sidebar-nav-after>
|
|
57
66
|
<slot name="sidebar-nav-after" />
|
|
58
67
|
<BlogSidebar />
|
|
59
68
|
</template>
|
|
@@ -62,60 +71,92 @@ const { Layout } = Theme
|
|
|
62
71
|
<slot name="doc-after" />
|
|
63
72
|
<BlogComment />
|
|
64
73
|
</template>
|
|
65
|
-
|
|
74
|
+
<template #layout-bottom>
|
|
75
|
+
<BlogFooter v-if="layout === 'home'" />
|
|
76
|
+
<slot name="layout-bottom" />
|
|
77
|
+
</template>
|
|
66
78
|
<!-- 透传默认主题的其它插槽 -->
|
|
67
79
|
<!-- navbar -->
|
|
68
|
-
<template #nav-bar-title-before
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
<template #nav-bar-title-after
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
<template #nav-bar-content-after
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
<template #nav-screen-content-before
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
<template #nav-screen-content-after
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
<template #nav-bar-title-before>
|
|
81
|
+
<slot name="nav-bar-title-before" />
|
|
82
|
+
</template>
|
|
83
|
+
<template #nav-bar-title-after>
|
|
84
|
+
<slot name="nav-bar-title-after" />
|
|
85
|
+
</template>
|
|
86
|
+
<template #nav-bar-content-after>
|
|
87
|
+
<slot name="nav-bar-content-after" />
|
|
88
|
+
</template>
|
|
89
|
+
<template #nav-screen-content-before>
|
|
90
|
+
<slot name="nav-screen-content-before" />
|
|
91
|
+
</template>
|
|
92
|
+
<template #nav-screen-content-after>
|
|
93
|
+
<slot name="nav-screen-content-after" />
|
|
94
|
+
</template>
|
|
83
95
|
|
|
84
96
|
<!-- sidebar -->
|
|
85
|
-
<template #sidebar-nav-before
|
|
97
|
+
<template #sidebar-nav-before>
|
|
98
|
+
<slot name="sidebar-nav-before" />
|
|
99
|
+
</template>
|
|
86
100
|
|
|
87
101
|
<!-- content -->
|
|
88
|
-
<template #page-top
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
<template #
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
<template #
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
<template #home-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
<template #
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
<template #
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
102
|
+
<template #page-top>
|
|
103
|
+
<slot name="page-top" />
|
|
104
|
+
</template>
|
|
105
|
+
<template #page-bottom>
|
|
106
|
+
<slot name="page-bottom" />
|
|
107
|
+
</template>
|
|
108
|
+
|
|
109
|
+
<template #not-found>
|
|
110
|
+
<slot name="not-found" />
|
|
111
|
+
</template>
|
|
112
|
+
<template #home-hero-info>
|
|
113
|
+
<slot name="home-hero-info" />
|
|
114
|
+
</template>
|
|
115
|
+
<template #home-hero-image>
|
|
116
|
+
<slot name="home-hero-image" />
|
|
117
|
+
</template>
|
|
118
|
+
<template #home-hero-after>
|
|
119
|
+
<slot name="home-hero-after" />
|
|
120
|
+
</template>
|
|
121
|
+
<template #home-features-before>
|
|
122
|
+
<slot name="home-features-before" />
|
|
123
|
+
</template>
|
|
124
|
+
<template #home-features-after>
|
|
125
|
+
<slot name="home-features-after" />
|
|
126
|
+
</template>
|
|
127
|
+
|
|
128
|
+
<template #doc-footer-before>
|
|
129
|
+
<slot name="doc-footer-before" />
|
|
130
|
+
</template>
|
|
131
|
+
|
|
132
|
+
<template #doc-top>
|
|
133
|
+
<slot name="doc-top" />
|
|
134
|
+
</template>
|
|
135
|
+
<template #doc-bottom>
|
|
136
|
+
<slot name="doc-bottom" />
|
|
137
|
+
</template>
|
|
138
|
+
|
|
139
|
+
<template #aside-top>
|
|
140
|
+
<slot name="aside-top" />
|
|
141
|
+
</template>
|
|
142
|
+
<template #aside-bottom>
|
|
143
|
+
<slot name="aside-bottom" />
|
|
144
|
+
</template>
|
|
145
|
+
<template #aside-outline-before>
|
|
146
|
+
<slot name="aside-outline-before" />
|
|
147
|
+
</template>
|
|
148
|
+
<template #aside-outline-after>
|
|
149
|
+
<slot name="aside-outline-after" />
|
|
150
|
+
</template>
|
|
151
|
+
<template #aside-ads-before>
|
|
152
|
+
<slot name="aside-ads-before" />
|
|
153
|
+
</template>
|
|
154
|
+
<template #aside-ads-after>
|
|
155
|
+
<slot name="aside-ads-after" />
|
|
156
|
+
</template>
|
|
117
157
|
</Layout>
|
|
118
158
|
</template>
|
|
159
|
+
|
|
119
160
|
<style scoped lang="scss">
|
|
120
161
|
.home {
|
|
121
162
|
margin: 0 auto;
|