diff --git a/gulpfile.ts b/gulpfile.ts
index fde66717a..989093cea 100644
--- a/gulpfile.ts
+++ b/gulpfile.ts
@@ -74,9 +74,17 @@ gulp.task('copy:client', () =>
.pipe(gulp.dest('./built/client/assets/'))
);
+gulp.task('copy:docs', () =>
+ gulp.src([
+ './src/docs/**/*',
+ ])
+ .pipe(gulp.dest('./built/client/assets/docs/'))
+);
+
gulp.task('build:client', gulp.parallel(
'build:client:styles',
- 'copy:client'
+ 'copy:client',
+ 'copy:docs'
));
gulp.task('build', gulp.parallel(
diff --git a/src/client/app.vue b/src/client/app.vue
index ef2ec1e3f..61fd1ec38 100644
--- a/src/client/app.vue
+++ b/src/client/app.vue
@@ -179,6 +179,7 @@ export default Vue.extend({
return {
'p': this.post,
'n': this.post,
+ 'h|/': this.help
};
},
@@ -254,6 +255,10 @@ export default Vue.extend({
},
methods: {
+ help() {
+ this.$router.push('/docs/keyboard-shortcut');
+ },
+
back() {
if (this.canBack) window.history.back();
},
diff --git a/src/client/pages/document.vue b/src/client/pages/doc.vue
similarity index 50%
rename from src/client/pages/document.vue
rename to src/client/pages/doc.vue
index 3ee729b8b..3a92b7adf 100644
--- a/src/client/pages/document.vue
+++ b/src/client/pages/doc.vue
@@ -4,7 +4,7 @@
{{ title }}
@@ -14,8 +14,11 @@
import Vue from 'vue';
import { faFileAlt } from '@fortawesome/free-solid-svg-icons'
import MarkdownIt from 'markdown-it';
+import { url, lang } from '../config';
-const markdown = MarkdownIt();
+const markdown = MarkdownIt({
+ html: true
+});
export default Vue.extend({
metaInfo() {
@@ -24,12 +27,19 @@ export default Vue.extend({
};
},
- components: {
+ props: {
+ doc: {
+ type: String,
+ required: true
+ }
},
watch: {
- markdown() {
- this.updateText();
+ doc: {
+ handler() {
+ this.fetchDoc();
+ },
+ immediate: true,
}
},
@@ -38,32 +48,23 @@ export default Vue.extend({
faFileAlt,
title: '',
body: '',
- markdown: `# ぽぺ
-ぽぺ **ぽぺ** _ぽぺーーーーーっ!_ \`ぽぺ\`
-
-\`\`\`
-export default class Pope extends PopeBase
-{
- public Pope() {
- return 'ぽぺ';
- }
-}
-\`\`\``,
+ markdown: '',
}
},
- created() {
- this.updateText()
- },
-
methods: {
- updateText() {
- // markdown の全容をパースする
- const parsed = markdown.parse(this.markdown, {});
- if (parsed.length === 0)
- return;
+ fetchDoc() {
+ fetch(`${url}/assets/docs/${this.doc}.${lang}.md`).then(res => res.text()).then(md => {
+ this.parse(md);
+ });
+ },
- const buf = [ ...parsed ]
+ parse(md: string) {
+ // markdown の全容をパースする
+ const parsed = markdown.parse(md, {});
+ if (parsed.length === 0) return;
+
+ const buf = [...parsed];
const headingTokens = [];
let headingStart = 0;
@@ -81,7 +82,7 @@ export default class Pope extends PopeBase
}
// 抽出した見出しを除く部分をbodyとして抽出する
- const bodyTokens = [ ...parsed ]
+ const bodyTokens = [...parsed];
bodyTokens.splice(headingStart, headingTokens.length + 2);
// 各々レンダーする
@@ -91,3 +92,43 @@ export default class Pope extends PopeBase
}
});
+
+
diff --git a/src/client/router.ts b/src/client/router.ts
index 27aa07822..48eaa0f2e 100644
--- a/src/client/router.ts
+++ b/src/client/router.ts
@@ -21,7 +21,7 @@ export const router = new VueRouter({
{ path: '/announcements', component: page('announcements') },
{ path: '/about', component: page('about') },
{ path: '/featured', component: page('featured') },
- { path: '/document', component: page('document') },
+ { path: '/docs/:doc', component: page('doc'), props: true },
{ path: '/explore', component: page('explore') },
{ path: '/explore/tags/:tag', props: true, component: page('explore') },
{ path: '/search', component: page('search') },
diff --git a/src/docs/about.en-US.md b/src/docs/about.en-US.md
deleted file mode 100644
index bb1c51927..000000000
--- a/src/docs/about.en-US.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# About Misskey
-
-Misskey is a mini blog SNS.