From e965b57dc25fcea390135f7bcbb4dc0decf39e22 Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 27 Jul 2021 00:01:21 +0900 Subject: [PATCH 1/8] Update PULL_REQUEST_TEMPLATE.md --- .github/PULL_REQUEST_TEMPLATE.md | 43 +++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5ae21482a7..ba46dfdc72 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,13 +1,32 @@ -## Summary + + - +# What + + + +# Why + + + +# Additional info (optional) + + From f220e4183f184290982e7049cc45cb7a126332fe Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 27 Jul 2021 21:37:32 +0900 Subject: [PATCH 2/8] :art: --- src/client/style.scss | 5 ++--- src/client/themes/_dark.json5 | 3 +-- src/client/themes/_light.json5 | 3 +-- src/client/themes/d-astro.json5 | 3 +-- src/client/themes/d-black.json5 | 1 - src/client/themes/d-dark.json5 | 1 - src/client/themes/d-persimmon.json5 | 1 - src/client/themes/l-light.json5 | 1 - src/client/themes/l-vivid.json5 | 3 +-- src/client/ui/deck/widgets-column.vue | 2 +- src/client/ui/default.vue | 12 ++++-------- 11 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/client/style.scss b/src/client/style.scss index 578e7543c7..02f794fba4 100644 --- a/src/client/style.scss +++ b/src/client/style.scss @@ -239,8 +239,7 @@ hr { ._panel { background: var(--panel); border-radius: var(--radius); - //border: var(--panelBorder); - box-shadow: var(--panelShadow); + border: var(--panelBorder); overflow: clip; } @@ -357,7 +356,7 @@ hr { ._flat_ { --root-margin: 0px; --baseContentWidth: 100%; - --panelShadow: none; + --panelBorder: none; ._block { //border-top: solid 0.5px var(--divider); diff --git a/src/client/themes/_dark.json5 b/src/client/themes/_dark.json5 index 6414a7ad42..fb0fe80146 100644 --- a/src/client/themes/_dark.json5 +++ b/src/client/themes/_dark.json5 @@ -26,8 +26,7 @@ panelHeaderBg: ':lighten<3<@panel', panelHeaderFg: '@fg', panelHeaderDivider: 'rgba(0, 0, 0, 0)', - panelBorder: 'rgba(0, 0, 0, 0)', - panelShadow: '" 0 8px 24px rgba(0, 0, 0, 0.12)', + panelBorder: '" solid 1px var(--divider)', acrylicPanel: ':alpha<0.5<@panel', shadow: 'rgba(0, 0, 0, 0.3)', header: ':alpha<0.7<@panel', diff --git a/src/client/themes/_light.json5 b/src/client/themes/_light.json5 index 0438b54a49..db971ba0e4 100644 --- a/src/client/themes/_light.json5 +++ b/src/client/themes/_light.json5 @@ -26,8 +26,7 @@ panelHeaderBg: ':lighten<3<@panel', panelHeaderFg: '@fg', panelHeaderDivider: 'rgba(0, 0, 0, 0)', - panelBorder: 'rgba(0, 0, 0, 0)', - panelShadow: '" 0 8px 24px rgb(21 43 75 / 8%)', + panelBorder: '" solid 1px var(--divider)', acrylicPanel: ':alpha<0.5<@panel', shadow: 'rgba(0, 0, 0, 0.1)', header: ':alpha<0.7<@panel', diff --git a/src/client/themes/d-astro.json5 b/src/client/themes/d-astro.json5 index a88e949c3c..c9818f2c5c 100644 --- a/src/client/themes/d-astro.json5 +++ b/src/client/themes/d-astro.json5 @@ -39,8 +39,7 @@ navHoverFg: ':lighten<17<@fg', dateLabelFg: '@fg', inputBorder: '#959da2', - panelBorder: 'rgba(0, 0, 0, 0)', - panelShadow: '" 0 8px 24px rgba(0, 0, 0, 0.12)', + panelBorder: '" solid 1px var(--divider)', accentDarken: ':darken<10<@accent', acrylicPanel: ':alpha<0.5<@panel', navIndicator: '@accent', diff --git a/src/client/themes/d-black.json5 b/src/client/themes/d-black.json5 index 2608891e73..f4b93cdcbc 100644 --- a/src/client/themes/d-black.json5 +++ b/src/client/themes/d-black.json5 @@ -11,7 +11,6 @@ panel: '#131313', panelHeaderBg: '@panel', panelHeaderDivider: '@divider', - panelShadow: '" 0 8px 24px rgb(0 0 0 / 25%)', shadow: 'rgba(255, 255, 255, 0.05)', modalBg: 'rgba(255, 255, 255, 0.1)', messageBg: '#1d1d1d', diff --git a/src/client/themes/d-dark.json5 b/src/client/themes/d-dark.json5 index fba7fe7582..d24ce4df69 100644 --- a/src/client/themes/d-dark.json5 +++ b/src/client/themes/d-dark.json5 @@ -13,7 +13,6 @@ fgHighlighted: '#fff', divider: 'rgba(255, 255, 255, 0.14)', panel: '#2d2d2d', - panelShadow: '" 0 8px 24px rgb(0 0 0 / 25%)', panelHeaderBg: '@panel', panelHeaderDivider: '@divider', header: ':alpha<0.7<@panel', diff --git a/src/client/themes/d-persimmon.json5 b/src/client/themes/d-persimmon.json5 index a1ebaf59eb..11e9994f5e 100644 --- a/src/client/themes/d-persimmon.json5 +++ b/src/client/themes/d-persimmon.json5 @@ -13,7 +13,6 @@ fgHighlighted: '#fff', divider: 'rgba(255, 255, 255, 0.14)', panel: 'rgb(41, 43, 41)', - panelShadow: '" 0 8px 24px rgb(0 0 0 / 25%)', infoFg: '@fg', infoBg: '#333c3b', navBg: '#141714', diff --git a/src/client/themes/l-light.json5 b/src/client/themes/l-light.json5 index 27a973c88a..f85bee3b06 100644 --- a/src/client/themes/l-light.json5 +++ b/src/client/themes/l-light.json5 @@ -14,7 +14,6 @@ header: ':alpha<0.7<@panel', navBg: '#fff', panel: '#fff', - panelShadow: '" 0 8px 24px rgb(21 43 75 / 8%)', panelHeaderDivider: '@divider', messageBg: '#dedede', }, diff --git a/src/client/themes/l-vivid.json5 b/src/client/themes/l-vivid.json5 index a21e053b0a..0d6255d300 100644 --- a/src/client/themes/l-vivid.json5 +++ b/src/client/themes/l-vivid.json5 @@ -42,8 +42,7 @@ navHoverFg: ':darken<17<@fg', dateLabelFg: '@fg', inputBorder: '#dae0e4', - panelBorder: 'rgba(0, 0, 0, 0)', - panelShadow: '" 0 8px 24px rgb(21 43 75 / 8%)', + panelBorder: '" solid 1px var(--divider)', accentDarken: ':darken<10<@accent', acrylicPanel: ':alpha<0.5<@panel', navIndicator: '@accent', diff --git a/src/client/ui/deck/widgets-column.vue b/src/client/ui/deck/widgets-column.vue index 69aaaffa88..22b1a38287 100644 --- a/src/client/ui/deck/widgets-column.vue +++ b/src/client/ui/deck/widgets-column.vue @@ -64,7 +64,7 @@ export default defineComponent({ diff --git a/src/client/router.ts b/src/client/router.ts index 4c3aa765e6..2081c1020c 100644 --- a/src/client/router.ts +++ b/src/client/router.ts @@ -31,7 +31,7 @@ export const router = createRouter({ { path: '/docs', component: page('docs') }, { path: '/theme-editor', component: page('theme-editor') }, { path: '/advanced-theme-editor', component: page('advanced-theme-editor') }, - { path: '/docs/:doc', component: page('doc'), props: route => ({ doc: route.params.doc }) }, + { path: '/docs/:doc(.*)', component: page('doc'), props: route => ({ doc: route.params.doc }) }, { path: '/explore', component: page('explore') }, { path: '/explore/tags/:tag', props: true, component: page('explore') }, { path: '/search', component: page('search') }, diff --git a/src/docs/ja-JP/aiscript.md b/src/docs/ja-JP/advanced/aiscript.md similarity index 100% rename from src/docs/ja-JP/aiscript.md rename to src/docs/ja-JP/advanced/aiscript.md diff --git a/src/docs/ja-JP/api.md b/src/docs/ja-JP/advanced/api.md similarity index 100% rename from src/docs/ja-JP/api.md rename to src/docs/ja-JP/advanced/api.md diff --git a/src/docs/ja-JP/create-plugin.md b/src/docs/ja-JP/advanced/create-plugin.md similarity index 100% rename from src/docs/ja-JP/create-plugin.md rename to src/docs/ja-JP/advanced/create-plugin.md diff --git a/src/docs/ja-JP/reversi-bot.md b/src/docs/ja-JP/advanced/reversi-bot.md similarity index 100% rename from src/docs/ja-JP/reversi-bot.md rename to src/docs/ja-JP/advanced/reversi-bot.md diff --git a/src/docs/ja-JP/stream.md b/src/docs/ja-JP/advanced/stream.md similarity index 100% rename from src/docs/ja-JP/stream.md rename to src/docs/ja-JP/advanced/stream.md diff --git a/src/docs/ja-JP/custom-emoji.md b/src/docs/ja-JP/features/custom-emoji.md similarity index 100% rename from src/docs/ja-JP/custom-emoji.md rename to src/docs/ja-JP/features/custom-emoji.md diff --git a/src/docs/ja-JP/deck.md b/src/docs/ja-JP/features/deck.md similarity index 100% rename from src/docs/ja-JP/deck.md rename to src/docs/ja-JP/features/deck.md diff --git a/src/docs/ja-JP/follow.md b/src/docs/ja-JP/features/follow.md similarity index 100% rename from src/docs/ja-JP/follow.md rename to src/docs/ja-JP/features/follow.md diff --git a/src/docs/ja-JP/keyboard-shortcut.md b/src/docs/ja-JP/features/keyboard-shortcut.md similarity index 100% rename from src/docs/ja-JP/keyboard-shortcut.md rename to src/docs/ja-JP/features/keyboard-shortcut.md diff --git a/src/docs/ja-JP/mfm.md b/src/docs/ja-JP/features/mfm.md similarity index 100% rename from src/docs/ja-JP/mfm.md rename to src/docs/ja-JP/features/mfm.md diff --git a/src/docs/ja-JP/mute.md b/src/docs/ja-JP/features/mute.md similarity index 100% rename from src/docs/ja-JP/mute.md rename to src/docs/ja-JP/features/mute.md diff --git a/src/docs/ja-JP/pages.md b/src/docs/ja-JP/features/pages.md similarity index 100% rename from src/docs/ja-JP/pages.md rename to src/docs/ja-JP/features/pages.md diff --git a/src/docs/ja-JP/reaction.md b/src/docs/ja-JP/features/reaction.md similarity index 86% rename from src/docs/ja-JP/reaction.md rename to src/docs/ja-JP/features/reaction.md index 476af64e8b..fadce7af4e 100644 --- a/src/docs/ja-JP/reaction.md +++ b/src/docs/ja-JP/features/reaction.md @@ -9,7 +9,6 @@ ## リモート投稿へのリアクションについて リアクションはMisskeyオリジナルの機能であるため、リモートインスタンスがMisskeyでない限りは、ほとんどの場合「Like」としてアクティビティが送信されます。一般的にはLikeは「お気に入り」として実装されているようです。 -また、相手がMisskeyであったとしても、カスタム絵文字リアクションは伝わらず、自動的に「👍」等にフォールバックされます。 ## リモートからのリアクションについて リモートから「Like」アクティビティを受信したとき、Misskeyでは「👍」のリアクションとして解釈されます。 diff --git a/src/docs/ja-JP/theme.md b/src/docs/ja-JP/features/theme.md similarity index 100% rename from src/docs/ja-JP/theme.md rename to src/docs/ja-JP/features/theme.md diff --git a/src/docs/ja-JP/timelines.md b/src/docs/ja-JP/features/timelines.md similarity index 100% rename from src/docs/ja-JP/timelines.md rename to src/docs/ja-JP/features/timelines.md diff --git a/src/docs/ja-JP/general/misskey.md b/src/docs/ja-JP/general/misskey.md new file mode 100644 index 0000000000..13ef1609d8 --- /dev/null +++ b/src/docs/ja-JP/general/misskey.md @@ -0,0 +1,43 @@ +# Misskeyについて + +Misskeyはオープンソースの分散型マイクロブログプラットフォームプロジェクトです。 +開発はsyuiloによって2014年から開始されました。 + +## 分散型とは何か? +分散(distributed)型とは、非中央集権(decentralized)とも呼ばれ、コミュニティが多数のサーバーに分散して存在し、それらが相互に通信することでコンテンツ共有ネットワークを形成していることが特徴のサービスです。 +単一のサーバーしか存在しない、もしくは複数存在しても互いに独立している場合は中央集権なサービスと言われ、例えばTwitterやFacebookなどほとんどのサービスがそれに該当します。 + +## 常にオープンソース +Misskeyはこれまでもこれからも、オープンソースであり続けます。オープンソースとは、ソフトウェアのソースコード(プログラム)が公開されていることです。ソースコードの修正や再配布が可能であることを定義に含めることもあります。 +Misskeyのすべてのソースコードは公開されていて、誰でも自由に閲覧、使用、修正、改変、再配布をすることができます。 +オープンソースは、自分で好きなように変えたり、有害な処理が含まれていないことを確認することができたり、誰でも開発に参加できるなどの、様々なメリットがあります。 +上述の分散型を実現するためにも、オープンソースであるということは必要不可欠な要素です。 +再び引き合いに出しますが、TwitterやFacebookなどの利益を得ているほとんどのサービスはオープンソースではありません。 + +Misskeyのソースコードは、[GitHub上で公開されています。](https://github.com/misskey-dev) + +## 開発に参加する、開発を支援する +Misskeyの開発に貢献するにはいろいろな方法があります。 + +### 機能を追加したり、バグを修正する +ソフトウェアエンジニアのスキルをお持ちの方であれば、ソースコードを編集する形でプロジェクトに貢献することができます。 + +### 議論に参加する +新しい機能、または既存の機能について意見を述べたり、不具合を報告したりすることでも貢献できます。 +そのようなディスカッションは[GitHub](https://github.com/misskey-dev)上か、[フォーラム](https://forum.misskey.io/)等で行われます。 + +### テキストを翻訳する +Misskeyは様々な言語に対応しています(i18n -internationalizationの略- と呼ばれます)。元の言語は基本的に日本語ですが、有志によって他の言語へと翻訳されています。 +その翻訳作業に加わっていただくことでもMisskeyに貢献できます。 +Misskeyは[Crowdinというサービスを使用して翻訳の管理を行っています。](https://crowdin.com/project/misskey) + +### 感想を投稿する +不具合報告等だけではなく、Misskeyの良い点、楽しい点といったポジティブな意見もぜひ共有してください。開発の励みになり、それは間接的ですがプロジェクトへの貢献です。 + +### 寄付をする +Misskeyはビジネスではなく、利用は無料であるため、収益は皆様からの寄付のみです。(インスタンスによっては広告収入を得ているような場合もありますが、それは運営者の収入であり開発者への収入にはなりません) +寄付をしていただければ、今後も開発を続けることが可能になり、プロジェクトへの貢献になります。 +寄付は[Patreon](https://www.patreon.com/syuilo)で受け付けています。 + +## クレジット +Misskeyの開発者や、Misskeyに寄付をしてくださった方の一覧は[こちら](/about-misskey)で見ることができます。 diff --git a/src/server/web/index.ts b/src/server/web/index.ts index 50fea757f2..a732e7f5b4 100644 --- a/src/server/web/index.ts +++ b/src/server/web/index.ts @@ -121,14 +121,22 @@ router.get('/api.json', async ctx => { router.get('/docs.json', async ctx => { const lang = ctx.query.lang; + const query = ctx.query.q; if (!Object.keys(locales).includes(lang)) { ctx.body = []; return; } - const paths = glob.sync(__dirname + `/../../../src/docs/${lang}/*.md`); - const docs: { path: string; title: string; }[] = []; + const dirPath = `${__dirname}/../../../src/docs/${lang}`.replace(/\\/g, '/'); + const paths = glob.sync(`${dirPath}/**/*.md`); + const docs: { path: string; title: string; summary: string; }[] = []; for (const path of paths) { const md = fs.readFileSync(path, { encoding: 'utf8' }); + + if (query && query.length > 0) { + // TODO: カタカナをひらがなにして比較するなどしたい + if (!md.includes(query)) continue; + } + const parsed = markdown.parse(md, {}); if (parsed.length === 0) return; @@ -147,9 +155,22 @@ router.get('/docs.json', async ctx => { } } + const firstParagrapfTokens = []; + while (buf[0].type !== 'paragraph_open') { + buf.shift(); + } + buf.shift(); + while (buf[0].type as string !== 'paragraph_close') { + const token = buf.shift(); + if (token) { + firstParagrapfTokens.push(token); + } + } + docs.push({ - path: path.split('/').pop()!.split('.')[0], - title: markdown.renderer.render(headingTokens, {}, {}) + path: path.replace(`${dirPath}/`, '').split('.')[0], + title: markdown.renderer.render(headingTokens, {}, {}), + summary: markdown.renderer.render(firstParagrapfTokens, {}, {}), }); }