This commit is contained in:
syuilo 2017-12-17 04:02:30 +09:00
parent 0711d29f6f
commit da279f9e50
13 changed files with 104 additions and 32 deletions

View File

@ -183,6 +183,24 @@ common:
mk-uploader: mk-uploader:
waiting: "Waiting" waiting: "Waiting"
docs:
edit-this-page-on-github: "Caught a mistake or want to contribute to the documentation? "
edit-this-page-on-github-link: "Edit this page on Github!"
api:
entities:
properties: "Properties"
endpoints:
params: "Parameters"
res: "Response"
props:
name: "Name"
type: "Type"
optional: "Optional"
description: "Description"
yes: "Yes"
no: "No"
ch: ch:
tags: tags:
mk-index: mk-index:

View File

@ -10,12 +10,12 @@ const loadLang = lang => yaml.safeLoad(
const native = loadLang('ja'); const native = loadLang('ja');
const langs = Object.entries({ const langs = {
'en': loadLang('en'), 'en': loadLang('en'),
'ja': native 'ja': native
}); };
langs.map(([, locale]) => { Object.entries(langs).map(([, locale]) => {
// Extend native language (Japanese) // Extend native language (Japanese)
locale = Object.assign({}, native, locale); locale = Object.assign({}, native, locale);
}); });

View File

@ -183,6 +183,24 @@ common:
mk-uploader: mk-uploader:
waiting: "待機中" waiting: "待機中"
docs:
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
edit-this-page-on-github-link: "このページをGitHubで編集"
api:
entities:
properties: "プロパティ"
endpoints:
params: "パラメータ"
res: "レスポンス"
props:
name: "名前"
type: "型"
optional: "オプション"
description: "説明"
yes: "はい"
no: "いいえ"
ch: ch:
tags: tags:
mk-index: mk-index:

View File

@ -1,8 +1,21 @@
@import "../style" @import "../style"
#url #url
padding 8px 12px padding 8px 12px 8px 8px
font-family Consolas, 'Courier New', Courier, Monaco, monospace font-family Consolas, 'Courier New', Courier, Monaco, monospace
color #fff color #fff
background #222e40 background #222e40
border-radius 4px border-radius 4px
> .method
display inline-block
margin 0 8px 0 0
padding 0 6px
color #f4fcff
background #17afc7
border-radius 4px
user-select none
pointer-events none
> .host
opacity 0.7

View File

@ -7,12 +7,17 @@ block meta
block main block main
h1= endpoint h1= endpoint
p#url= url p#url
span.method POST
span.host
= url.host
| /
span.path= url.path
p#desc= desc[lang] || desc['ja'] p#desc= desc[lang] || desc['ja']
section section
h2 Params h2= common.i18n[lang]['docs']['api']['endpoints']['params']
+propTable(params) +propTable(params)
if paramDefs if paramDefs
@ -23,5 +28,5 @@ block main
if res if res
section section
h2 Response h2= common.i18n[lang]['docs']['api']['endpoints']['res']
+propTable(res) +propTable(res)

View File

@ -10,7 +10,7 @@ block main
p#desc= desc[lang] || desc['ja'] p#desc= desc[lang] || desc['ja']
section section
h2 Properties h2= common.i18n[lang]['docs']['api']['entities']['properties']
+propTable(props) +propTable(props)
if propDefs if propDefs

View File

@ -16,7 +16,7 @@ import generateVars from '../vars';
const commonVars = generateVars(); const commonVars = generateVars();
const langs = ['ja', 'en']; const langs = Object.keys(commonVars.i18n);
const kebab = string => string.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/\s+/g, '-').toLowerCase(); const kebab = string => string.replace(/([a-z])([A-Z])/g, '$1-$2').replace(/\s+/g, '-').toLowerCase();
@ -102,7 +102,10 @@ gulp.task('doc:api:endpoints', () => {
const ep = yaml.safeLoad(fs.readFileSync(file, 'utf-8')); const ep = yaml.safeLoad(fs.readFileSync(file, 'utf-8'));
const vars = { const vars = {
endpoint: ep.endpoint, endpoint: ep.endpoint,
url: `${config.api_url}/${ep.endpoint}`, url: {
host: config.api_url,
path: ep.endpoint
},
desc: ep.desc, desc: ep.desc,
params: sortParams(ep.params.map(p => parseParam(p))), params: sortParams(ep.params.map(p => parseParam(p))),
paramDefs: extractDefs(ep.params), paramDefs: extractDefs(ep.params),
@ -113,6 +116,7 @@ gulp.task('doc:api:endpoints', () => {
pug.renderFile('./src/web/docs/api/endpoints/view.pug', Object.assign({}, vars, { pug.renderFile('./src/web/docs/api/endpoints/view.pug', Object.assign({}, vars, {
lang, lang,
title: ep.endpoint, title: ep.endpoint,
src: `https://github.com/syuilo/misskey/tree/master/src/web/docs/api/endpoints/${ep.endpoint}.yaml`,
kebab, kebab,
common: commonVars common: commonVars
}), (renderErr, html) => { }), (renderErr, html) => {
@ -152,6 +156,7 @@ gulp.task('doc:api:entities', () => {
pug.renderFile('./src/web/docs/api/entities/view.pug', Object.assign({}, vars, { pug.renderFile('./src/web/docs/api/entities/view.pug', Object.assign({}, vars, {
lang, lang,
title: entity.name, title: entity.name,
src: `https://github.com/syuilo/misskey/tree/master/src/web/docs/api/entities/${kebab(entity.name)}.yaml`,
kebab, kebab,
common: commonVars common: commonVars
}), (renderErr, html) => { }), (renderErr, html) => {

View File

@ -1,10 +1,10 @@
mixin propTable(props) mixin propTable(props)
table.props table.props
thead: tr thead: tr
th Name th= common.i18n[lang]['docs']['api']['props']['name']
th Type th= common.i18n[lang]['docs']['api']['props']['type']
th Optional th= common.i18n[lang]['docs']['api']['props']['optional']
th Description th= common.i18n[lang]['docs']['api']['props']['description']
tbody tbody
each prop in props each prop in props
tr tr
@ -29,5 +29,9 @@ mixin propTable(props)
| ) | )
else if prop.kind == 'date' else if prop.kind == 'date'
| (Date) | (Date)
td.optional= prop.optional.toString() td.optional
if prop.optional
= common.i18n[lang]['docs']['api']['props']['yes']
else
= common.i18n[lang]['docs']['api']['props']['no']
td.desc!= prop.desc[lang] || prop.desc['ja'] td.desc!= prop.desc[lang] || prop.desc['ja']

View File

@ -37,7 +37,8 @@ gulp.task('doc:docs', () => {
const vars = { const vars = {
common: commonVars, common: commonVars,
lang: lang, lang: lang,
title: fs.readFileSync(file, 'utf-8').match(/^h1 (.+?)\r?\n/)[1] title: fs.readFileSync(file, 'utf-8').match(/^h1 (.+?)\r?\n/)[1],
src: `https://github.com/syuilo/misskey/tree/master/src/web/docs/${name}.${lang}.pug`,
}; };
pug.renderFile(file, vars, (renderErr, content) => { pug.renderFile(file, vars, (renderErr, content) => {
if (renderErr) { if (renderErr) {

View File

@ -27,6 +27,12 @@ html(lang= lang)
each endpoint in common.endpoints each endpoint in common.endpoints
li: a(href=`./api/endpoints/${common.kebab(endpoint)}`)= endpoint li: a(href=`./api/endpoints/${common.kebab(endpoint)}`)= endpoint
main main
block main article
if content block main
| !{content} if content
| !{content}
footer
p
= common.i18n[lang]['docs']['edit-this-page-on-github']
a(href=src target="_blank")= common.i18n[lang]['docs']['edit-this-page-on-github-link']

View File

@ -37,6 +37,14 @@ main
margin 1em 0 margin 1em 0
line-height 1.6em line-height 1.6em
footer
margin 32px 0 0 0
border-top solid 2px #eee
.copyright
margin 16px 0 0 0
color #aaa
nav nav
display block display block
position fixed position fixed
@ -48,15 +56,6 @@ nav
padding 32px padding 32px
border-right solid 2px #eee border-right solid 2px #eee
footer
padding:32px 0 0 0
margin 32px 0 0 0
border-top solid 1px #eee
.copyright
margin 16px 0 0 0
color #aaa
table table
width 100% width 100%
border-spacing 0 border-spacing 0

View File

@ -1,10 +1,11 @@
import * as fs from 'fs'; import * as fs from 'fs';
import * as glob from 'glob'; import * as glob from 'glob';
import * as yaml from 'js-yaml'; import * as yaml from 'js-yaml';
import langs from '../../../locales';
import config from '../../conf'; import config from '../../conf';
export default function() { export default function(): { [key: string]: any } {
const vars = {}; const vars = {} as { [key: string]: any };
const endpoints = glob.sync('./src/web/docs/api/endpoints/**/*.yaml'); const endpoints = glob.sync('./src/web/docs/api/endpoints/**/*.yaml');
vars['endpoints'] = endpoints.map(ep => { vars['endpoints'] = endpoints.map(ep => {
@ -35,5 +36,7 @@ export default function() {
vars['config'] = config; vars['config'] = config;
vars['i18n'] = langs;
return vars; return vars;
} }

View File

@ -5,10 +5,10 @@
import module_ from './module'; import module_ from './module';
import plugins from './plugins'; import plugins from './plugins';
import langs from './langs'; import langs from '../locales';
import version from '../src/version'; import version from '../src/version';
module.exports = langs.map(([lang, locale]) => { module.exports = Object.entries(langs).map(([lang, locale]) => {
// Chunk name // Chunk name
const name = lang; const name = lang;