diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index e35514ded9fadf9c7b42739ccc6101569a9e5567..9fa4531db57ca03efa503febea125517c8a9fc8a 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -878,6 +878,8 @@ _mfm: blurDescription: "内容をã¼ã‹ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’上ã«ä¹—ã›ã‚‹ã¨ã¯ã£ãり見ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" font: "フォント" fontDescription: "内容ã®ãƒ•ã‚©ãƒ³ãƒˆã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" + rainbow: "レインボー" + rainbowDescription: "内容をレインボーã«ã—ã¾ã™ã€‚" _reversi: reversi: "リãƒãƒ¼ã‚·" diff --git a/src/client/components/global/misskey-flavored-markdown.vue b/src/client/components/global/misskey-flavored-markdown.vue index 988cf9cf47b4a157238ae539be39883f27dfd8ef..c4f75bee9332a4ed7385f478a5fcc9820c247912 100644 --- a/src/client/components/global/misskey-flavored-markdown.vue +++ b/src/client/components/global/misskey-flavored-markdown.vue @@ -117,6 +117,11 @@ export default defineComponent({ 75% { transform: scale3d(1.05, 0.95, 1); } to { transform: scale3d(1, 1, 1); } } + +@keyframes mfm-rainbow { + 0% { filter: hue-rotate(0deg) contrast(150%) saturate(150%); } + 100% { filter: hue-rotate(360deg) contrast(150%) saturate(150%); } +} </style> <style lang="scss" scoped> diff --git a/src/client/components/mfm.ts b/src/client/components/mfm.ts index 3b08c83c7fff676654868cc5aaeee6760bf408e3..c248f934df96258f0461850bbed2f6832439b793 100644 --- a/src/client/components/mfm.ts +++ b/src/client/components/mfm.ts @@ -165,6 +165,10 @@ export default defineComponent({ class: '_mfm_blur_', }, genEl(token.children)); } + case 'rainbow': { + style = this.$store.state.animatedMfm ? 'animation: mfm-rainbow 1s linear infinite;' : ''; + break; + } } if (style == null) { return h('span', {}, ['[', token.props.name, ...genEl(token.children), ']']); diff --git a/src/client/pages/mfm-cheat-sheet.vue b/src/client/pages/mfm-cheat-sheet.vue index 52278552362fc629928277c46d4cb7d860714e49..75bbfce7e85f4f7c09a2ff6bebf67b18db081e01 100644 --- a/src/client/pages/mfm-cheat-sheet.vue +++ b/src/client/pages/mfm-cheat-sheet.vue @@ -261,6 +261,16 @@ </div> </div> </div> + <div class="section _block"> + <div class="title">{{ $ts._mfm.rainbow }}</div> + <div class="content"> + <p>{{ $ts._mfm.rainbowDescription }}</p> + <div class="preview"> + <Mfm :text="preview_rainbow"/> + <MkTextarea v-model:value="preview_rainbow"><span>MFM</span></MkTextarea> + </div> + </div> + </div> </div> </template> @@ -306,6 +316,7 @@ export default defineComponent({ preview_x3: `$[x3 ðŸ®]`, preview_x4: `$[x4 ðŸ®]`, preview_blur: `$[blur ${this.$ts._mfm.dummy}]`, + preview_rainbow: `$[rainbow ðŸ®]`, } }, }); @@ -313,6 +324,8 @@ export default defineComponent({ <style lang="scss" scoped> .mwysmxbg { + background: var(--bg); + > .section { > .title { position: sticky;