diff --git a/gulpfile.ts b/gulpfile.ts index 8ae0cd550d6e4fbe58ffa37658156c15eb920c29..df8382547d1fa0fc868bd8608e9a0cfbcbc70b8c 100644 --- a/gulpfile.ts +++ b/gulpfile.ts @@ -9,6 +9,7 @@ import * as ts from 'gulp-typescript'; const sourcemaps = require('gulp-sourcemaps'); import tslint from 'gulp-tslint'; const cssnano = require('gulp-cssnano'); +const stylus = require('gulp-stylus'); import * as uglifyComposer from 'gulp-uglify/composer'; import pug = require('gulp-pug'); import * as rimraf from 'rimraf'; @@ -38,8 +39,6 @@ if (isDebug) { const constants = require('./src/const.json'); -require('./src/client/docs/gulpfile.ts'); - gulp.task('build', [ 'build:ts', 'build:copy', @@ -201,3 +200,10 @@ gulp.task('build:client:pug', [ })) .pipe(gulp.dest('./built/client/app/')) ); + +gulp.task('doc', () => + gulp.src('./src/docs/**/*.styl') + .pipe(stylus()) + .pipe((cssnano as any)()) + .pipe(gulp.dest('./built/docs/assets/')) +); diff --git a/package-lock.json b/package-lock.json index 5cbfa2c18de39e2e3e23fec514155f2fe628e3f0..177420348017838878ea7686aef193a93ce952a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -620,6 +620,11 @@ "@types/mime": "*" } }, + "@types/showdown": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-1.7.5.tgz", + "integrity": "sha512-uUSUP6XtyTclRzTH0NLkEIiEowxYXOWDeulpngrPltEceOmsGdhfrl8xr3D4QfJA7FuUUyHwFQuWWURLFg3hgg==" + }, "@types/single-line-log": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@types/single-line-log/-/single-line-log-1.1.0.tgz", @@ -15107,6 +15112,129 @@ "jsonify": "~0.0.0" } }, + "showdown": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.8.6.tgz", + "integrity": "sha1-kepO47elRIqspoIKTifmkMatdxw=", + "requires": { + "yargs": "^10.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, "shvl": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/shvl/-/shvl-1.3.1.tgz", diff --git a/package.json b/package.json index 75a11704ec342a86b6631a3bf0a1644aacf16597..672b4d29ade554949ddf0ec84255c5e8f11cecaa 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "@types/request-promise-native": "1.0.15", "@types/rimraf": "2.0.2", "@types/seedrandom": "2.4.27", + "@types/showdown": "1.7.5", "@types/single-line-log": "1.1.0", "@types/speakeasy": "2.0.2", "@types/tmp": "0.0.33", @@ -179,6 +180,7 @@ "s-age": "1.1.2", "sass-loader": "7.0.3", "seedrandom": "2.4.3", + "showdown": "1.8.6", "single-line-log": "1.1.2", "speakeasy": "2.0.0", "style-loader": "0.21.0", diff --git a/src/client/docs/about.en.pug b/src/client/docs/about.en.pug deleted file mode 100644 index 893d9dd6a1cc3d33c8a3757745fe0ad8bf29c898..0000000000000000000000000000000000000000 --- a/src/client/docs/about.en.pug +++ /dev/null @@ -1,3 +0,0 @@ -h1 About Misskey - -p Misskey is a mini blog SNS. diff --git a/src/client/docs/about.ja.pug b/src/client/docs/about.ja.pug deleted file mode 100644 index fec933b0c6c87d52608e3f3792f063efd707878a..0000000000000000000000000000000000000000 --- a/src/client/docs/about.ja.pug +++ /dev/null @@ -1,3 +0,0 @@ -h1 Misskeyã«ã¤ã„㦠- -p Misskeyã¯ãƒŸãƒ‹ãƒ–ãƒã‚°SNSã§ã™ã€‚ diff --git a/src/client/docs/api.ja.pug b/src/client/docs/api.ja.pug deleted file mode 100644 index 665cfdc4b84a7afb8c2587c63de2e7ef9ea303bf..0000000000000000000000000000000000000000 --- a/src/client/docs/api.ja.pug +++ /dev/null @@ -1,103 +0,0 @@ -h1 Misskey API - -p Misskeyã¯Web APIを公開ã—ã¦ãŠã‚Šã€æ§˜ã€…ãªæ“作をプãƒã‚°ãƒ©ãƒ 上ã‹ã‚‰è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚ -p APIを自分ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‹ã‚‰åˆ©ç”¨ã™ã‚‹å ´åˆ(自分ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ã¿æ“作ã—ãŸã„å ´åˆ)ã¨ã€ã‚¢ãƒ—リケーションã‹ã‚‰åˆ©ç”¨ã™ã‚‹å ´åˆ(ä¸ç‰¹å®šã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’æ“作ã—ãŸã„å ´åˆ)ã¨ã§åˆ©ç”¨æ‰‹é †ãŒç•°ãªã‚Šã¾ã™ã®ã§ã€ãã‚Œãžã‚Œã®ã‚±ãƒ¼ã‚¹ã«ã¤ã„ã¦èª¬æ˜Žã—ã¾ã™ã€‚ - -section - h2 自分ã®æ‰€æœ‰ã™ã‚‹ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‹ã‚‰APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å ´åˆ - p 「è¨å®š > APIã€ã§ã€APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã®ã«å¿…è¦ãªAPIã‚ーをå–å¾—ã—ã¦ãã ã•ã„。 - p APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹éš›ã«ã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«APIã‚ーを「iã€ã¨ã„ã†ãƒ‘ラメータåã§å«ã‚ã¾ã™ã€‚ - div.ui.info.warn: p %fa:exclamation-triangle%アカウントをä¸æ£åˆ©ç”¨ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€ã“ã®ãƒˆãƒ¼ã‚¯ãƒ³ã¯ç¬¬ä¸‰è€…ã«æ•™ãˆãªã„ã§ãã ã•ã„(アプリãªã©ã«ã‚‚入力ã—ãªã„ã§ãã ã•ã„)。 - p APIã®è©³ã—ã„使用法ã¯ã€ŒMisskey APIã®åˆ©ç”¨ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã”覧ãã ã•ã„。 - -section - h2 アプリケーションã‹ã‚‰APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å ´åˆ - p - | 直接ユーザーã®APIã‚ーをアプリケーションãŒæ‰±ã†ã®ã¯å±é™ºãªã®ã§ã€ - | アプリケーションã‹ã‚‰APIを利用ã™ã‚‹éš›ã«ã¯ã€ã‚¢ãƒ—リケーションã¨ã‚¢ãƒ—リケーションを利用ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒçµã³ä»˜ã‘られãŸå°‚用ã®ãƒˆãƒ¼ã‚¯ãƒ³(アクセストークン)ã‚’Misskeyã«ç™ºè¡Œã—ã¦ã‚‚らã„〠- | ãã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’リクエストã®ãƒ‘ラメータã«å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ - div.ui.info: p %fa:info-circle%アクセストークンã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè‡ªåˆ†ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ã‚ãªãŸã®ã‚¢ãƒ—リケーションãŒã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ã‚’許å¯ã—ãŸå ´åˆã®ã¿ç™ºè¡Œã•ã‚Œã¾ã™ - - p ãã‚Œã§ã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã™ã‚‹ã¾ã§ã®æµã‚Œã‚’説明ã—ã¾ã™ã€‚ - - section - h3 1.アプリケーションを登録ã™ã‚‹ - p ã¾ãšã€ã‚ãªãŸã®ã‚¢ãƒ—リケーションやWebサービス(以後ã€ã‚ãªãŸã®ã‚¢ãƒ—リã¨å‘¼ã³ã¾ã™)ã‚’Misskeyã«ç™»éŒ²ã—ã¾ã™ã€‚ - p - a(href=common.config.dev_url, target="_blank") デベãƒãƒƒãƒ‘ーセンター - | ã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã€ã€Œã‚¢ãƒ—リ > アプリ作æˆã€ã«é€²ã¿ã¾ã™ã€‚ - | フォームã«å¿…è¦äº‹é …を記入ã—ã€ã‚¢ãƒ—リを作æˆã—ã¦ãã ã•ã„。フォームã®è¨˜å…¥æ¬„ã®èª¬æ˜Žã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™: - - table - thead - tr - th åå‰ - th 説明 - tbody - tr - td アプリケーションå - td ã‚ãªãŸã®ã‚¢ãƒ—リã®å称。 - tr - td アプリã®æ¦‚è¦ - td ã‚ãªãŸã®ã‚¢ãƒ—リã®ç°¡å˜ãªèª¬æ˜Žã‚„紹介。 - tr - td コールãƒãƒƒã‚¯URL - td ユーザーãŒå¾Œè¿°ã™ã‚‹èªè¨¼ãƒ•ã‚©ãƒ¼ãƒ ã§èªè¨¼ã‚’終ãˆãŸéš›ã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹URLã‚’è¨å®šã§ãã¾ã™ã€‚ã‚ãªãŸã®ã‚¢ãƒ—リãŒWebサービスã§ã‚ã‚‹å ´åˆã«æœ‰ç”¨ã§ã™ã€‚ - tr - td æ¨©é™ - td ã‚ãªãŸã®ã‚¢ãƒ—リãŒè¦æ±‚ã™ã‚‹æ¨©é™ã€‚ã“ã“ã§è¦æ±‚ã—ãŸæ©Ÿèƒ½ã ã‘ãŒAPIã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚ - - p 登録ãŒæ¸ˆã‚€ã¨ã‚ãªãŸã®ã‚¢ãƒ—リã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚ーãŒå…¥æ‰‹ã§ãã¾ã™ã€‚ã“ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚ーã¯å¾Œã§ä½¿ç”¨ã—ã¾ã™ã€‚ - div.ui.info.warn: p %fa:exclamation-triangle%アプリã«æˆã‚Šã™ã¾ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€æ¥µåŠ›ã“ã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚ーã¯å…¬é–‹ã—ãªã„よã†ã«ã—ã¦ãã ã•ã„。 - - section - h3 2.ユーザーã«èªè¨¼ã•ã›ã‚‹ - p ã‚ãªãŸã®ã‚¢ãƒ—リを使ã£ã¦ã‚‚らã†ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã®è¨±å¯ã‚’もらã†å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ - p - | èªè¨¼ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’開始ã™ã‚‹ã«ã¯ã€#{common.config.api_url}/auth/session/generate ã¸ãƒ‘ラメータ㫠appSecret ã¨ã—ã¦ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚ーをå«ã‚ãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã¾ã™ã€‚ - | リクエスト形å¼ã¯JSONã§ã€ãƒ¡ã‚½ãƒƒãƒ‰ã¯POSTã§ã™ã€‚ - | レスãƒãƒ³ã‚¹ã¨ã—ã¦èªè¨¼ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚„èªè¨¼ãƒ•ã‚©ãƒ¼ãƒ ã®URLãŒå–å¾—ã§ãã‚‹ã®ã§ã€èªè¨¼ãƒ•ã‚©ãƒ¼ãƒ ã®URLをブラウザã§è¡¨ç¤ºã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãƒ•ã‚©ãƒ¼ãƒ ã‚’æ示ã—ã¦ãã ã•ã„。 - - p - | ã‚ãªãŸã®ã‚¢ãƒ—リãŒã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯URLã‚’è¨å®šã—ã¦ã„ã‚‹å ´åˆã€ - | ユーザーãŒã‚ãªãŸã®ã‚¢ãƒ—リã®é€£æºã‚’許å¯ã™ã‚‹ã¨è¨å®šã—ã¦ã„るコールãƒãƒƒã‚¯URLã« token ã¨ã„ã†åå‰ã§ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®ãƒˆãƒ¼ã‚¯ãƒ³ãŒå«ã¾ã‚ŒãŸã‚¯ã‚¨ãƒªã‚’付ã‘ã¦ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã€‚ - - p - | ã‚ãªãŸã®ã‚¢ãƒ—リãŒã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯URLã‚’è¨å®šã—ã¦ã„ãªã„å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚ãªãŸã®ã‚¢ãƒ—リã®é€£æºã‚’許å¯ã—ãŸã“ã¨ã‚’(何らã‹ã®æ–¹æ³•ã§(ãŸã¨ãˆã°ãƒœã‚¿ãƒ³ã‚’押ã•ã›ã‚‹ãªã©))確èªå‡ºæ¥ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 - - section - h3 3.ユーザーã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã™ã‚‹ - p ユーザーãŒé€£æºã‚’許å¯ã—ãŸã‚‰ã€#{common.config.api_url}/auth/session/userkey ã¸æ¬¡ã®ãƒ‘ラメータをå«ã‚€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã¾ã™: - table - thead - tr - th åå‰ - th åž‹ - th 説明 - tbody - tr - td appSecret - td string - td ã‚ãªãŸã®ã‚¢ãƒ—リã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚ー - tr - td token - td string - td セッションã®ãƒˆãƒ¼ã‚¯ãƒ³ - p 上手ãã„ã‘ã°ã€èªè¨¼ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ãŒãƒ¬ã‚¹ãƒãƒ³ã‚¹ã¨ã—ã¦å–å¾—ã§ãã¾ã™ã€‚ãŠã‚ã§ã¨ã†ã”ã–ã„ã¾ã™ï¼ - - p アクセストークンãŒå–å¾—ã§ããŸã‚‰ã€ã€Œãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³+ã‚ãªãŸã®ã‚¢ãƒ—リã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚ーをsha256ã—ãŸã‚‚ã®ã€ã‚’「iã€ã¨ã„ã†ãƒ‘ラメータã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å«ã‚ã‚‹ã¨ã€APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - - p 「iã€ãƒ‘ラメータã®ç”Ÿæˆæ–¹æ³•ã‚’擬似コードã§è¡¨ã™ã¨æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™: - pre: code - | const i = sha256(accessToken + secretKey); - - p APIã®è©³ã—ã„使用法ã¯ã€ŒMisskey APIã®åˆ©ç”¨ã€ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã”覧ãã ã•ã„。 - -section - h2 Misskey APIã®åˆ©ç”¨ - p APIã¯ã™ã¹ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®ãƒ‘ラメータ・レスãƒãƒ³ã‚¹ã¨ã‚‚ã«JSONå½¢å¼ã§ã™ã€‚ã¾ãŸã€ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã¯POSTメソッドã®ã¿å—ã‘付ã‘ã¾ã™ã€‚ - p APIリファレンスもã”確èªãã ã•ã„。 - - section - h3 レートリミット - p Misskey APIã«ã¯ãƒ¬ãƒ¼ãƒˆãƒªãƒŸãƒƒãƒˆãŒã‚ã‚Šã€çŸæ™‚é–“ã®ã†ã¡ã«å¤šæ•°ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã™ã‚‹ã¨ã€ä¸€å®šæ™‚é–“APIを利用ã™ã‚‹ã“ã¨ãŒã§ããªããªã‚‹ã“ã¨ãŒã‚ã‚Šã¾ã™ã€‚ diff --git a/src/client/docs/follow.ja.pug b/src/client/docs/follow.ja.pug deleted file mode 100644 index f0e83bc8fdc9d04e32727472690bdffddebf8c28..0000000000000000000000000000000000000000 --- a/src/client/docs/follow.ja.pug +++ /dev/null @@ -1,9 +0,0 @@ -h1 フォãƒãƒ¼ -p ユーザーをフォãƒãƒ¼ã™ã‚‹ã¨ã€ã‚¿ã‚¤ãƒ ラインã«ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æŠ•ç¨¿ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ãŸã ã—ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å¯¾ã™ã‚‹è¿”ä¿¡ã¯å«ã¾ã‚Œã¾ã›ã‚“。 -p ユーザーをフォãƒãƒ¼ã™ã‚‹ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒšãƒ¼ã‚¸ã®ã€Œãƒ•ã‚©ãƒãƒ¼ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚フォãƒãƒ¼ã‚’解除ã™ã‚‹ã«ã¯ã€ã‚‚ã†ä¸€åº¦ã‚¯ãƒªãƒƒã‚¯ã—ã¾ã™ã€‚ - -section - h2 ストーã‚ング - p ユーザーをフォãƒãƒ¼ã—ã¦ã„る状態ã§ã¯ã€ã•ã‚‰ã«ã€Œã‚¹ãƒˆãƒ¼ã‚ングã€ãƒ¢ãƒ¼ãƒ‰ã‚’オンã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ストーã‚ングを行ã†ã¨ã€ã‚¿ã‚¤ãƒ ラインã«ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å…¨ã¦ã®æŠ•ç¨¿ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ã¤ã¾ã‚Šã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å¯¾ã™ã‚‹è¿”ä¿¡ã‚‚å«ã¾ã‚Œã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ - p ストーã‚ングã™ã‚‹ã«ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒšãƒ¼ã‚¸ã®ã€Œã‚¹ãƒˆãƒ¼ã‚¯ã™ã‚‹ã€ã‚’クリックã—ã¾ã™ã€‚ストーã‚ングをやã‚ã‚‹ã«ã¯ã€ã‚‚ã†ä¸€åº¦ã‚¯ãƒªãƒƒã‚¯ã—ã¾ã™ã€‚ - p ストーã‚ングã—ã¦ã„ã‚‹ã“ã¨ã¯ç›¸æ‰‹ã«é€šçŸ¥ã•ã‚Œã¾ã›ã‚“。 diff --git a/src/client/docs/gulpfile.ts b/src/client/docs/gulpfile.ts deleted file mode 100644 index 2a95dfbfeeff538ebb1ea2d382c29a5ca28324ee..0000000000000000000000000000000000000000 --- a/src/client/docs/gulpfile.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Gulp tasks - */ - -import * as gulp from 'gulp'; -const stylus = require('gulp-stylus'); -const cssnano = require('gulp-cssnano'); - -gulp.task('doc', [ - 'doc:styles' -]); - -gulp.task('doc:styles', () => - gulp.src('./src/client/docs/**/*.styl') - .pipe(stylus()) - .pipe((cssnano as any)()) - .pipe(gulp.dest('./built/client/docs/assets/')) -); diff --git a/src/client/docs/index.en.pug b/src/client/docs/index.en.pug deleted file mode 100644 index 1fcc870d3d956084785b5a9c2839c4c6325e430e..0000000000000000000000000000000000000000 --- a/src/client/docs/index.en.pug +++ /dev/null @@ -1,3 +0,0 @@ -h1 Misskey Docs - -p Welcome to docs of Misskey. diff --git a/src/client/docs/index.ja.pug b/src/client/docs/index.ja.pug deleted file mode 100644 index 4a0bf7fa1d2c391a48daba8fb5fc5d38bb463ab5..0000000000000000000000000000000000000000 --- a/src/client/docs/index.ja.pug +++ /dev/null @@ -1,3 +0,0 @@ -h1 Misskey ドã‚ュメント - -p Misskeyã®ãƒ‰ã‚ュメントã¸ã‚ˆã†ã“ã diff --git a/src/client/docs/license.en.pug b/src/client/docs/license.en.pug deleted file mode 100644 index 45d8b76473ce049041f2e042b7a551670f4e1342..0000000000000000000000000000000000000000 --- a/src/client/docs/license.en.pug +++ /dev/null @@ -1,17 +0,0 @@ -h1 License - -div!= common.license - -details - summary Libraries - - section - h2 Libraries - - each dependency, name in common.dependencies - details - summary= name - - section - h3= name - pre= dependency.licenseText diff --git a/src/client/docs/license.ja.pug b/src/client/docs/license.ja.pug deleted file mode 100644 index 6eb9ac308ed6b343322fa620b683ed566339d432..0000000000000000000000000000000000000000 --- a/src/client/docs/license.ja.pug +++ /dev/null @@ -1,17 +0,0 @@ -h1 ライセンス - -div!= common.license - -details - summary サードパーティ - - section - h2 サードパーティ - - each dependency, name in common.dependencies - details - summary= name - - section - h3= name - pre= dependency.licenseText diff --git a/src/client/docs/mute.ja.pug b/src/client/docs/mute.ja.pug deleted file mode 100644 index 807f7b67a79a2682e0ed01556da68de0c0460bae..0000000000000000000000000000000000000000 --- a/src/client/docs/mute.ja.pug +++ /dev/null @@ -1,13 +0,0 @@ -h1 ミュート - -p ユーザーページã‹ã‚‰ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ミュートã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -p ユーザーをミュートã™ã‚‹ã¨ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é–¢ã™ã‚‹æ¬¡ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒMisskeyã«è¡¨ç¤ºã•ã‚Œãªããªã‚Šã¾ã™: -ul - li タイムラインや投稿ã®æ¤œç´¢çµæžœå†…ã®ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æŠ•ç¨¿(ãŠã‚ˆã³ãれらã®æŠ•ç¨¿ã«å¯¾ã™ã‚‹è¿”ä¿¡ã‚„Renote) - li ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‹ã‚‰ã®é€šçŸ¥ - li メッセージ履æ´ä¸€è¦§å†…ã®ã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸å±¥æ´ - -p ミュートを行ã£ãŸã“ã¨ã¯ç›¸æ‰‹ã«é€šçŸ¥ã•ã‚Œãšã€ãƒŸãƒ¥ãƒ¼ãƒˆã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’知るã“ã¨ã‚‚ã§ãã¾ã›ã‚“。 - -p è¨å®š>ミュート ã‹ã‚‰ã€è‡ªåˆ†ãŒãƒŸãƒ¥ãƒ¼ãƒˆã—ã¦ã„るユーザー一覧を確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ diff --git a/src/client/docs/search.ja.pug b/src/client/docs/search.ja.pug deleted file mode 100644 index fc62d16cae549118e7a670a8c2c0a86b574d9608..0000000000000000000000000000000000000000 --- a/src/client/docs/search.ja.pug +++ /dev/null @@ -1,120 +0,0 @@ -h1 検索 - -p 投稿を検索ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -p - | ã‚ーワードをåŠè§’スペースã§åŒºåˆ‡ã‚‹ã¨ã€and検索ã«ãªã‚Šã¾ã™ã€‚ - | 例ãˆã°ã€ã€Œgit コミットã€ã¨æ¤œç´¢ã™ã‚‹ã¨ã€ã€Œgitã§ç·¨é›†ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã®ç‰¹å®šã®è¡Œã ã‘コミットã™ã‚‹æ–¹æ³•ãŒã‚ã‹ã‚‰ãªã„ã€ãªã©ãŒãƒžãƒƒãƒã—ã¾ã™ã€‚ - -section - h2 ã‚ーワードã®é™¤å¤– - p ã‚ーワードã®å‰ã«ã€Œ-ã€(ãƒã‚¤ãƒ•ãƒ³)をプリフィクスã™ã‚‹ã¨ã€ãã®ã‚ーワードをå«ã¾ãªã„投稿ã«é™å®šã—ã¾ã™ã€‚ - p 例ãˆã°ã€ã€Œgitã¨ã„ã†ã‚ーワードをå«ã‚€ãŒã€ã‚³ãƒŸãƒƒãƒˆã¨ã„ã†ã‚ーワードã¯å«ã¾ãªã„投稿ã€ã‚’検索ã—ãŸã„å ´åˆã€ã‚¯ã‚¨ãƒªã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™: - code git -コミット - -section - h2 完全一致 - p テã‚ストを「"""ã€ã§å›²ã‚€ã¨ã€ãã®ãƒ†ã‚ストã¨å®Œå…¨ã«ä¸€è‡´ã™ã‚‹æŠ•ç¨¿ã‚’検索ã—ã¾ã™ã€‚ - p 例ãˆã°ã€ã€Œ"""ã«ã‚ƒãƒ¼ã‚“"""ã€ã¨æ¤œç´¢ã™ã‚‹ã¨ã€ã€Œã«ã‚ƒãƒ¼ã‚“ã€ã¨ã„ã†æŠ•ç¨¿ã®ã¿ãŒãƒ’ットã—ã€ã€Œã«ã‚ƒãƒ¼ã‚“…ã€ã¨ã„ã†æŠ•ç¨¿ã¯ãƒ’ットã—ã¾ã›ã‚“。 - -section - h2 ã‚¿ã‚° - p ã‚ーワードã®å‰ã«ã€Œ#ã€(シャープ)をプリフィクスã™ã‚‹ã¨ã€ãã®ã‚ーワードã¨ä¸€è‡´ã™ã‚‹ã‚¿ã‚°ã‚’æŒã¤æŠ•ç¨¿ã«é™å®šã—ã¾ã™ã€‚ - -section - h2 オプション - p - | オプションを使用ã—ã¦ã€ã‚ˆã‚Šé«˜åº¦ãªæ¤œç´¢ã‚’è¡Œãˆã¾ã™ã€‚ - | オプションを指定ã™ã‚‹ã«ã¯ã€ã€Œã‚ªãƒ—ションå:値ã€ã¨ã„ã†å½¢å¼ã§ã‚¯ã‚¨ãƒªã«å«ã‚ã¾ã™ã€‚ - p 利用å¯èƒ½ãªã‚ªãƒ—ション一覧ã§ã™: - - table - thead - tr - th åå‰ - th 説明 - tbody - tr - td user - td - | 指定ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æŠ•ç¨¿ã«é™å®šã—ã¾ã™ã€‚ - | 「,ã€(カンマ)ã§åŒºåˆ‡ã£ã¦ã€è¤‡æ•°ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - br - | 例ãˆã°ã€ - code user:himawari,sakurako - | ã¨æ¤œç´¢ã™ã‚‹ã¨ã€Œ@himawariã¾ãŸã¯@sakurakoã®æŠ•ç¨¿ã€ã ã‘ã«é™å®šã—ã¾ã™ã€‚ - | (ã¤ã¾ã‚Šãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã§ã™) - tr - td exclude_user - td - | 指定ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æŠ•ç¨¿ã‚’除外ã—ã¾ã™ã€‚ - | 「,ã€(カンマ)ã§åŒºåˆ‡ã£ã¦ã€è¤‡æ•°ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - br - | 例ãˆã°ã€ - code exclude_user:akari,chinatsu - | ã¨æ¤œç´¢ã™ã‚‹ã¨ã€Œ@akariã¾ãŸã¯@chinatsu以外ã®æŠ•ç¨¿ã€ã«é™å®šã—ã¾ã™ã€‚ - | (ã¤ã¾ã‚Šãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ–ラックリストã§ã™) - tr - td follow - td - | true ... フォãƒãƒ¼ã—ã¦ã„るユーザーã«é™å®šã€‚ - br - | false ... フォãƒãƒ¼ã—ã¦ã„ãªã„ユーザーã«é™å®šã€‚ - br - | null ... 特ã«é™å®šã—ãªã„(デフォルト) - tr - td mute - td - | mute_all ... ミュートã—ã¦ã„るユーザーã®æŠ•ç¨¿ã¨ãã®æŠ•ç¨¿ã«å¯¾ã™ã‚‹è¿”ä¿¡ã‚„Renoteを除外ã™ã‚‹(デフォルト) - br - | mute_related ... ミュートã—ã¦ã„るユーザーã®æŠ•ç¨¿ã«å¯¾ã™ã‚‹è¿”ä¿¡ã‚„Renoteã ã‘除外ã™ã‚‹ - br - | mute_direct ... ミュートã—ã¦ã„るユーザーã®æŠ•ç¨¿ã ã‘除外ã™ã‚‹ - br - | disabled ... ミュートã—ã¦ã„るユーザーã®æŠ•ç¨¿ã¨ãã®æŠ•ç¨¿ã«å¯¾ã™ã‚‹è¿”ä¿¡ã‚„Renoteã‚‚å«ã‚ã‚‹ - br - | direct_only ... ミュートã—ã¦ã„るユーザーã®æŠ•ç¨¿ã ã‘ã«é™å®š - br - | related_only ... ミュートã—ã¦ã„るユーザーã®æŠ•ç¨¿ã«å¯¾ã™ã‚‹è¿”ä¿¡ã‚„Renoteã ã‘ã«é™å®š - br - | all_only ... ミュートã—ã¦ã„るユーザーã®æŠ•ç¨¿ã¨ãã®æŠ•ç¨¿ã«å¯¾ã™ã‚‹è¿”ä¿¡ã‚„Renoteã«é™å®š - tr - td reply - td - | true ... 返信ã«é™å®šã€‚ - br - | false ... 返信ã§ãªã„投稿ã«é™å®šã€‚ - br - | null ... 特ã«é™å®šã—ãªã„(デフォルト) - tr - td renote - td - | true ... Renoteã«é™å®šã€‚ - br - | false ... Renoteã§ãªã„投稿ã«é™å®šã€‚ - br - | null ... 特ã«é™å®šã—ãªã„(デフォルト) - tr - td media - td - | true ... メディアãŒæ·»ä»˜ã•ã‚Œã¦ã„る投稿ã«é™å®šã€‚ - br - | false ... メディアãŒæ·»ä»˜ã•ã‚Œã¦ã„ãªã„投稿ã«é™å®šã€‚ - br - | null ... 特ã«é™å®šã—ãªã„(デフォルト) - tr - td poll - td - | true ... 投票ãŒæ·»ä»˜ã•ã‚Œã¦ã„る投稿ã«é™å®šã€‚ - br - | false ... 投票ãŒæ·»ä»˜ã•ã‚Œã¦ã„ãªã„投稿ã«é™å®šã€‚ - br - | null ... 特ã«é™å®šã—ãªã„(デフォルト) - tr - td until - td 上é™ã®æ—¥æ™‚。(YYYY-MM-DD) - tr - td since - td 下é™ã®æ—¥æ™‚。(YYYY-MM-DD) - - p 例ãˆã°ã€ã€Œ@syuiloã®2017å¹´11月1æ—¥ã‹ã‚‰2017å¹´12月31æ—¥ã¾ã§ã®ã€ŽMisskeyã€ã¨ã„ã†ãƒ†ã‚ストをå«ã‚€è¿”ä¿¡ã§ã¯ãªã„投稿ã€ã‚’検索ã—ãŸã„å ´åˆã€ã‚¯ã‚¨ãƒªã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™: - code user:syuilo since:2017-11-01 until:2017-12-31 reply:false Misskey diff --git a/src/client/docs/tou.ja.pug b/src/client/docs/tou.ja.pug deleted file mode 100644 index 7663258f824c43e7fffe5d5e03260b37594a0bea..0000000000000000000000000000000000000000 --- a/src/client/docs/tou.ja.pug +++ /dev/null @@ -1,3 +0,0 @@ -h1 利用è¦ç´„ - -p å…¬åºè‰¯ä¿—ã«åã™ã‚‹è¡Œç‚ºã¯ãŠã‚„ã‚ãã ã•ã„。 diff --git a/src/docs/about.en.md b/src/docs/about.en.md new file mode 100644 index 0000000000000000000000000000000000000000..bb1c51927b5c4e401c741546edc945ce9ef0cef4 --- /dev/null +++ b/src/docs/about.en.md @@ -0,0 +1,3 @@ +# About Misskey + +Misskey is a mini blog SNS. diff --git a/src/docs/about.ja.md b/src/docs/about.ja.md new file mode 100644 index 0000000000000000000000000000000000000000..1b06361f0f61131662f7c899b2667986a140cbf4 --- /dev/null +++ b/src/docs/about.ja.md @@ -0,0 +1,3 @@ +# Misskeyã«ã¤ã„㦠+ +Misskeyã¯ãƒŸãƒ‹ãƒ–ãƒã‚°SNSã§ã™ã€‚ diff --git a/src/client/docs/api/endpoints/style.styl b/src/docs/api/endpoints/style.styl similarity index 100% rename from src/client/docs/api/endpoints/style.styl rename to src/docs/api/endpoints/style.styl diff --git a/src/client/docs/api/endpoints/view.pug b/src/docs/api/endpoints/view.pug similarity index 100% rename from src/client/docs/api/endpoints/view.pug rename to src/docs/api/endpoints/view.pug diff --git a/src/client/docs/api/entities/drive-file.yaml b/src/docs/api/entities/drive-file.yaml similarity index 100% rename from src/client/docs/api/entities/drive-file.yaml rename to src/docs/api/entities/drive-file.yaml diff --git a/src/client/docs/api/entities/note.yaml b/src/docs/api/entities/note.yaml similarity index 100% rename from src/client/docs/api/entities/note.yaml rename to src/docs/api/entities/note.yaml diff --git a/src/client/docs/api/entities/post.yaml b/src/docs/api/entities/post.yaml similarity index 100% rename from src/client/docs/api/entities/post.yaml rename to src/docs/api/entities/post.yaml diff --git a/src/client/docs/api/entities/style.styl b/src/docs/api/entities/style.styl similarity index 100% rename from src/client/docs/api/entities/style.styl rename to src/docs/api/entities/style.styl diff --git a/src/client/docs/api/entities/user.yaml b/src/docs/api/entities/user.yaml similarity index 100% rename from src/client/docs/api/entities/user.yaml rename to src/docs/api/entities/user.yaml diff --git a/src/client/docs/api/entities/view.pug b/src/docs/api/entities/view.pug similarity index 100% rename from src/client/docs/api/entities/view.pug rename to src/docs/api/entities/view.pug diff --git a/src/client/docs/api/mixins.pug b/src/docs/api/mixins.pug similarity index 100% rename from src/client/docs/api/mixins.pug rename to src/docs/api/mixins.pug diff --git a/src/client/docs/api/style.styl b/src/docs/api/style.styl similarity index 100% rename from src/client/docs/api/style.styl rename to src/docs/api/style.styl diff --git a/src/docs/article.pug b/src/docs/article.pug new file mode 100644 index 0000000000000000000000000000000000000000..fe68ceb910057d67e650dabe567310e1a0fac6de --- /dev/null +++ b/src/docs/article.pug @@ -0,0 +1,4 @@ +extends ./layout.pug + +block main + != html diff --git a/src/client/docs/layout.pug b/src/docs/layout.pug similarity index 100% rename from src/client/docs/layout.pug rename to src/docs/layout.pug diff --git a/src/client/docs/style.styl b/src/docs/style.styl similarity index 98% rename from src/client/docs/style.styl rename to src/docs/style.styl index 3b13617588d603f0fe9f3b97ce8e617390ea75cf..d9ee9dad4a5e8a220cdd03f9c23a981282848fc4 100644 --- a/src/client/docs/style.styl +++ b/src/docs/style.styl @@ -1,4 +1,4 @@ -@import "../style" +@import "../client/style" @import "./ui" body diff --git a/src/client/docs/ui.styl b/src/docs/ui.styl similarity index 100% rename from src/client/docs/ui.styl rename to src/docs/ui.styl diff --git a/src/server/web/docs.ts b/src/server/web/docs.ts index f4d6be885b5c5a3619dd7a5133f9b094da4148af..8f707d4d3f961c537d90942e127f76a45e8cfecc 100644 --- a/src/server/web/docs.ts +++ b/src/server/web/docs.ts @@ -4,6 +4,7 @@ import * as fs from 'fs'; import * as path from 'path'; +import * as showdown from 'showdown'; import ms = require('ms'); import * as Router from 'koa-router'; import * as send from 'koa-send'; @@ -16,8 +17,6 @@ import { fa } from '../../misc/fa'; import { licenseHtml } from '../../misc/license'; const constants = require('../../const.json'); -const docs = `${__dirname}/../../client/docs/`; - async function genVars(lang: string): Promise<{ [key: string]: any }> { const vars = {} as { [key: string]: any }; @@ -26,23 +25,23 @@ async function genVars(lang: string): Promise<{ [key: string]: any }> { const endpoints = glob.sync('./built/server/api/endpoints/**/*.js'); vars['endpoints'] = endpoints.map(ep => require('../../../' + ep)).filter(x => x.meta).map(x => x.meta.name); - const entities = glob.sync('./src/client/docs/api/entities/**/*.yaml'); + const entities = glob.sync('./src/docs/api/entities/**/*.yaml'); vars['entities'] = entities.map(x => { const _x = yaml.safeLoad(fs.readFileSync(x, 'utf-8')) as any; return _x.name; }); - const docs = glob.sync('./src/client/docs/**/*.*.pug'); + const docs = glob.sync('./src/docs/**/*.md'); vars['docs'] = {}; docs.forEach(x => { - const [, name, lang] = x.match(/docs\/(.+?)\.(.+?)\.pug$/); + const [, name, lang] = x.match(/docs\/(.+?)\.(.+?)\.md$/); if (vars['docs'][name] == null) { vars['docs'][name] = { name, title: {} }; } - vars['docs'][name]['title'][lang] = fs.readFileSync(x, 'utf-8').match(/^h1 (.+?)\r?\n/)[1]; + vars['docs'][name]['title'][lang] = fs.readFileSync(x, 'utf-8').match(/^# (.+?)\r?\n/)[1]; }); vars['kebab'] = (string: string) => string.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/\s+/g, '-').toLowerCase(); @@ -162,7 +161,7 @@ const router = new Router(); router.get('/assets/*', async ctx => { await send(ctx, ctx.params[0], { - root: docs + '/assets/', + root: `${__dirname}/../../docs/assets/`, maxage: ms('7 days'), immutable: true }); @@ -183,20 +182,20 @@ router.get('/*/api/endpoints/*', async ctx => { // @ts-ignore params: sortParams(Object.entries(ep.params).map(([k, v]) => parseParamDefinition(k, v))), paramDefs: extractParamDefRef(Object.entries(ep.params).map(([k, v]) => v)), - res: ep.res.props ? sortParams(Object.entries(ep.res.props).map(([k, v]) => parsePropDefinition(k, v))) : null, + res: ep.res && ep.res.props ? sortParams(Object.entries(ep.res.props).map(([k, v]) => parsePropDefinition(k, v))) : null, resDefs: null//extractPropDefRef(Object.entries(ep.res.props).map(([k, v]) => parsePropDefinition(k, v))) }; - await ctx.render('../../../../src/client/docs/api/endpoints/view', Object.assign(await genVars(lang), vars)); + await ctx.render('../../../../src/docs/api/endpoints/view', Object.assign(await genVars(lang), vars)); }); router.get('/*/api/entities/*', async ctx => { const lang = ctx.params[0]; const entity = ctx.params[1]; - const x = yaml.safeLoad(fs.readFileSync(path.resolve('./src/client/docs/api/entities/' + entity + '.yaml'), 'utf-8')) as any; + const x = yaml.safeLoad(fs.readFileSync(path.resolve('./src/docs/api/entities/' + entity + '.yaml'), 'utf-8')) as any; - await ctx.render('../../../../src/client/docs/api/entities/view', Object.assign(await genVars(lang), { + await ctx.render('../../../../src/docs/api/entities/view', Object.assign(await genVars(lang), { name: x.name, desc: x.desc, props: sortParams(Object.entries(x.props).map(([k, v]) => parsePropDefinition(k, v))), @@ -208,7 +207,12 @@ router.get('/*/*', async ctx => { const lang = ctx.params[0]; const doc = ctx.params[1]; - await ctx.render('../../../../src/client/docs/' + doc + '.' + lang, await genVars(lang)); + const conv = new showdown.Converter(); + const md = fs.readFileSync(`${__dirname}/../../../src/docs/${doc}.${lang}.md`, 'utf8'); + + await ctx.render('../../../../src/docs/article', Object.assign({ + html: conv.makeHtml(md) + }, await genVars(lang))); }); export default router;