diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 4091e7c3f1..11abca17b1 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -606,6 +606,49 @@ system: "システム" switchUi: "UI切り替え" desktop: "デスクトップ" +_mfm: + cheatSheet: "MFMチートシート" + intro: "MFMは、Misskey内の様々な場所で使用できる専用のマークアップ言語です。ここでは、MFMで使用可能な構文一覧が確認できます。" + dummy: "MisskeyでFediverseの世界が広がります" + mention: "メンション" + mentionDescription: "アットマーク + ユーザー名で、特定のユーザーを示すことができます。" + hashtag: "ハッシュタグ" + hashtagDescription: "ナンバーサイン + タグで、ハッシュタグを示すことができます。" + url: "URL" + urlDescription: "URLを示すことができます。" + link: "リンク" + linkDescription: "文章の特定の範囲を、URLに紐づけることができます。" + bold: "太字" + boldDescription: "文字を太く表示して強調することができます。" + small: "目立たなく" + smallDescription: "内容を小さく・薄く表示させることができます。" + center: "中央寄せ" + centerDescription: "内容を中央寄せで表示させることができます。" + inlineCode: "コード(インライン)" + inlineCodeDescription: "プログラムなどのコードをインラインでシンタックスハイライトします。" + blockCode: "コード(ブロック)" + blockCodeDescription: "複数行のプログラムなどのコードをブロックでシンタックスハイライトします。" + quote: "引用" + quoteDescription: "内容が引用であることを示すことができます。" + emoji: "カスタム絵文字" + emojiDescription: "コロンでカスタム絵文字名を囲むと、カスタム絵文字を表示させることができます。" + search: "検索" + searchDescription: "入力済み検索ボックスを表示させることができます。" + flip: "反転" + flipDescription: "内容を上下または左右に反転させます。" + jelly: "アニメーション(びよんびよん)" + jellyDescription: "びよんびよんするアニメーションを与えます。" + tada: "アニメーション(じゃーん)" + tadaDescription: "ジャーン!という感じのアニメーションを与えます。" + jump: "アニメーション(ジャンプ)" + jumpDescription: "飛び跳ねるようなアニメーションを与えます。" + shake: "アニメーション(ぶるぶる)" + shakeDescription: "ぶるぶるするアニメーションを与えます。" + twitch: "アニメーション(ブレ)" + twitchDescription: "激しくブレるアニメーションを与えます。" + spin: "アニメーション(回転)" + spinDescription: "回転するアニメーションを与えます。" + _reversi: reversi: "リバーシ" gameSettings: "対局の設定" diff --git a/src/client/pages/mfm-cheat-sheet.vue b/src/client/pages/mfm-cheat-sheet.vue new file mode 100644 index 0000000000..5164251696 --- /dev/null +++ b/src/client/pages/mfm-cheat-sheet.vue @@ -0,0 +1,247 @@ +<template> +<div class="mwysmxbg"> + <div class="_section"> + <div class="_content"> + <p>{{ $t('_mfm.intro') }}</p> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.mention') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.mentionDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_mention"/> + <MkTextarea v-model:value="preview_mention"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.hashtag') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.hashtagDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_hashtag"/> + <MkTextarea v-model:value="preview_hashtag"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.url') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.urlDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_url"/> + <MkTextarea v-model:value="preview_url"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.link') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.linkDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_link"/> + <MkTextarea v-model:value="preview_link"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.emoji') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.emojiDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_emoji"/> + <MkTextarea v-model:value="preview_emoji"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.bold') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.boldDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_bold"/> + <MkTextarea v-model:value="preview_bold"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.small') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.smallDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_small"/> + <MkTextarea v-model:value="preview_small"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.center') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.centerDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_center"/> + <MkTextarea v-model:value="preview_center"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.inlineCode') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.inlineCodeDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_inlineCode"/> + <MkTextarea v-model:value="preview_inlineCode"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.blockCode') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.blockCodeDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_blockCode"/> + <MkTextarea v-model:value="preview_blockCode"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.quote') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.quoteDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_quote"/> + <MkTextarea v-model:value="preview_quote"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.search') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.searchDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_search"/> + <MkTextarea v-model:value="preview_search"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.flip') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.flipDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_flip"/> + <MkTextarea v-model:value="preview_flip"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.jelly') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.jellyDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_jelly"/> + <MkTextarea v-model:value="preview_jelly"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.tada') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.tadaDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_tada"/> + <MkTextarea v-model:value="preview_tada"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.jump') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.jumpDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_jump"/> + <MkTextarea v-model:value="preview_jump"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.spin') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.spinDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_spin"/> + <MkTextarea v-model:value="preview_spin"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.shake') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.shakeDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_shake"/> + <MkTextarea v-model:value="preview_shake"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="_section"> + <div class="_title">{{ $t('_mfm.twitch') }}</div> + <div class="_content"> + <p>{{ $t('_mfm.twitchDescription') }}</p> + <div class="preview _panel"> + <Mfm :text="preview_twitch"/> + <MkTextarea v-model:value="preview_twitch"><span>MFM</span></MkTextarea> + </div> + </div> + </div> +</div> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue'; +import { faQuestionCircle } from '@fortawesome/free-regular-svg-icons'; +import MkTextarea from '@/components/ui/textarea.vue'; + +export default defineComponent({ + components: { + MkTextarea + }, + + data() { + return { + INFO: { + title: this.$t('_mfm.cheatSheet'), + icon: faQuestionCircle, + }, + preview_mention: '@example', + preview_hashtag: '#test', + preview_url: `https://example.com`, + preview_link: `[${this.$t('_mfm.dummy')}](https://example.com)`, + preview_emoji: `:${this.$store.state.instance.meta.emojis[0].name}:`, + preview_bold: `**${this.$t('_mfm.dummy')}**`, + preview_small: `<small>${this.$t('_mfm.dummy')}</small>`, + preview_center: `<center>${this.$t('_mfm.dummy')}</center>`, + preview_inlineCode: '`<: "Hello, world!"`', + preview_blockCode: '```\n~ (#i, 100) {\n\t<: ? ((i % 15) = 0) "FizzBuzz"\n\t\t.? ((i % 3) = 0) "Fizz"\n\t\t.? ((i % 5) = 0) "Buzz"\n\t\t. i\n}\n```', + preview_quote: `> ${this.$t('_mfm.dummy')}`, + preview_search: `${this.$t('_mfm.dummy')} 検索`, + preview_jelly: `[jelly 🍮]`, + preview_tada: `[tada 🍮]`, + preview_jump: `[jump 🍮]`, + preview_shake: `[shake 🍮]`, + preview_twitch: `[twitch 🍮]`, + preview_spin: `[spin 🍮] [spin.left 🍮] [spin.alternate 🍮]\n[spin.x 🍮] [spin.x,left 🍮] [spin.x,alternate 🍮]\n[spin.y 🍮] [spin.y,left 🍮] [spin.y,alternate 🍮]`, + preview_flip: `[flip ${this.$t('_mfm.dummy')}]\n[flip.v ${this.$t('_mfm.dummy')}]\n[flip.h,v ${this.$t('_mfm.dummy')}]`, + } + }, +}); +</script> + +<style lang="scss" scoped> +.mwysmxbg { + .preview { + padding: 16px; + } +} +</style> diff --git a/src/client/router.ts b/src/client/router.ts index 5068eccfea..575aed416d 100644 --- a/src/client/router.ts +++ b/src/client/router.ts @@ -72,7 +72,8 @@ export const router = createRouter({ { path: '/tags/:tag', component: page('tag'), props: route => ({ tag: route.params.tag }) }, { path: '/games/reversi', component: page('reversi/index') }, { path: '/games/reversi/:gameId', component: page('reversi/game'), props: route => ({ gameId: route.params.gameId }) }, - { path: '/api-console', component: page('api-console') }, + { path: '/mfm-cheat-sheet', component: page('mfm-cheat-sheet') }, + { path: '/test', component: page('test') }, { path: '/auth/:token', component: page('auth') }, { path: '/miauth/:session', component: page('miauth') }, { path: '/authorize-follow', component: page('follow') }, diff --git a/src/client/style.scss b/src/client/style.scss index 9715bde10b..75a2e825c1 100644 --- a/src/client/style.scss +++ b/src/client/style.scss @@ -346,7 +346,6 @@ hr { > ._title { margin-bottom: 24px; - font-size: 1.25em; font-weight: bold; }