diff options
| author | dakkar <dakkar@thenautilus.net> | 2024-06-28 11:10:21 +0100 |
|---|---|---|
| committer | dakkar <dakkar@thenautilus.net> | 2024-06-28 11:10:21 +0100 |
| commit | 7bafb3ab2e85d3877b172422b6f1fb300aee539a (patch) | |
| tree | 081709a18f5e7298c3066d1f0679bc03a8b2690f /packages/frontend/src/components/SkMfmWindow.vue | |
| parent | merge: prepare for the next release (!562) (diff) | |
| download | sharkey-7bafb3ab2e85d3877b172422b6f1fb300aee539a.tar.gz sharkey-7bafb3ab2e85d3877b172422b6f1fb300aee539a.tar.bz2 sharkey-7bafb3ab2e85d3877b172422b6f1fb300aee539a.zip | |
rename our components - fixes #534
Diffstat (limited to 'packages/frontend/src/components/SkMfmWindow.vue')
| -rw-r--r-- | packages/frontend/src/components/SkMfmWindow.vue | 516 |
1 files changed, 516 insertions, 0 deletions
diff --git a/packages/frontend/src/components/SkMfmWindow.vue b/packages/frontend/src/components/SkMfmWindow.vue new file mode 100644 index 0000000000..c599531ec5 --- /dev/null +++ b/packages/frontend/src/components/SkMfmWindow.vue @@ -0,0 +1,516 @@ +<!-- +SPDX-FileCopyrightText: marie and other Sharkey contributors +SPDX-License-Identifier: AGPL-3.0-only +--> + +<template> +<MkWindow + ref="window" + :initialWidth="600" + :initialHeight="800" + :canResize="true" + @closed="emit('closed')" +> + <template #header> + MFM Cheatsheet + </template> + <MkStickyContainer> + <MkSpacer :contentMax="800"> + <div class="mfm-cheat-sheet"> + <div>{{ i18n.ts._mfm.intro }}</div> + <br/> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.mention }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.mentionDescription }}</p> + <div class="preview"> + <Mfm :text="preview_mention"/> + <MkTextarea v-model="preview_mention"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.hashtag }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.hashtagDescription }}</p> + <div class="preview"> + <Mfm :text="preview_hashtag"/> + <MkTextarea v-model="preview_hashtag"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.link }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.linkDescription }}</p> + <div class="preview"> + <Mfm :text="preview_link"/> + <MkTextarea v-model="preview_link"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.emoji }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.emojiDescription }}</p> + <div class="preview"> + <Mfm :text="preview_emoji"/> + <MkTextarea v-model="preview_emoji"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.bold }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.boldDescription }}</p> + <div class="preview"> + <Mfm :text="preview_bold"/> + <MkTextarea v-model="preview_bold"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.small }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.smallDescription }}</p> + <div class="preview"> + <Mfm :text="preview_small"/> + <MkTextarea v-model="preview_small"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.quote }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.quoteDescription }}</p> + <div class="preview"> + <Mfm :text="preview_quote"/> + <MkTextarea v-model="preview_quote"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.center }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.centerDescription }}</p> + <div class="preview"> + <Mfm :text="preview_center"/> + <MkTextarea v-model="preview_center"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.inlineCode }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.inlineCodeDescription }}</p> + <div class="preview"> + <Mfm :text="preview_inlineCode"/> + <MkTextarea v-model="preview_inlineCode"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.blockCode }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.blockCodeDescription }}</p> + <div class="preview"> + <Mfm :text="preview_blockCode"/> + <MkTextarea v-model="preview_blockCode"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.inlineMath }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.inlineMathDescription }}</p> + <div class="preview"> + <Mfm :text="preview_inlineMath"/> + <MkTextarea v-model="preview_inlineMath"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.blockMath }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.blockMathDescription }}</p> + <div class="preview"> + <Mfm :text="preview_blockMath"/> + <MkTextarea v-model="preview_blockMath"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.search }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.searchDescription }}</p> + <div class="preview"> + <Mfm :text="preview_search"/> + <MkTextarea v-model="preview_search"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.flip }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.flipDescription }}</p> + <div class="preview"> + <Mfm :text="preview_flip"/> + <MkTextarea v-model="preview_flip"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.font }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.fontDescription }}</p> + <div class="preview"> + <Mfm :text="preview_font"/> + <MkTextarea v-model="preview_font"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.x2 }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.x2Description }}</p> + <div class="preview"> + <Mfm :text="preview_x2"/> + <MkTextarea v-model="preview_x2"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.x3 }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.x3Description }}</p> + <div class="preview"> + <Mfm :text="preview_x3"/> + <MkTextarea v-model="preview_x3"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.x4 }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.x4Description }}</p> + <div class="preview"> + <Mfm :text="preview_x4"/> + <MkTextarea v-model="preview_x4"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.blur }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.blurDescription }}</p> + <div class="preview"> + <Mfm :text="preview_blur"/> + <MkTextarea v-model="preview_blur"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.jelly }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.jellyDescription }}</p> + <div class="preview"> + <Mfm :text="preview_jelly"/> + <MkTextarea v-model="preview_jelly"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.tada }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.tadaDescription }}</p> + <div class="preview"> + <Mfm :text="preview_tada"/> + <MkTextarea v-model="preview_tada"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.jump }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.jumpDescription }}</p> + <div class="preview"> + <Mfm :text="preview_jump"/> + <MkTextarea v-model="preview_jump"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.bounce }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.bounceDescription }}</p> + <div class="preview"> + <Mfm :text="preview_bounce"/> + <MkTextarea v-model="preview_bounce"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.spin }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.spinDescription }}</p> + <div class="preview"> + <Mfm :text="preview_spin"/> + <MkTextarea v-model="preview_spin"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.shake }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.shakeDescription }}</p> + <div class="preview"> + <Mfm :text="preview_shake"/> + <MkTextarea v-model="preview_shake"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.twitch }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.twitchDescription }}</p> + <div class="preview"> + <Mfm :text="preview_twitch"/> + <MkTextarea v-model="preview_twitch"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.rainbow }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.rainbowDescription }}</p> + <div class="preview"> + <Mfm :text="preview_rainbow"/> + <MkTextarea v-model="preview_rainbow"><template #label>MFM</template></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.sparkle }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.sparkleDescription }}</p> + <div class="preview"> + <Mfm :text="preview_sparkle"/> + <MkTextarea v-model="preview_sparkle"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.rotate }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.rotateDescription }}</p> + <div class="preview"> + <Mfm :text="preview_rotate"/> + <MkTextarea v-model="preview_rotate"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.crop }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.cropDescription }}</p> + <div class="preview"> + <Mfm :text="preview_crop" /> + <MkTextarea v-model="preview_crop"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.position }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.positionDescription }}</p> + <div class="preview"> + <Mfm :text="preview_position"/> + <MkTextarea v-model="preview_position"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block" style="overflow: hidden"> + <div class="title">{{ i18n.ts._mfm.followMouse }}</div> + <MkInfo warn>{{ i18n.ts._mfm.uncommonFeature }}</MkInfo> + <br/> + <div class="content"> + <p>{{ i18n.ts._mfm.followMouseDescription }}</p> + <div class="preview"> + <Mfm :text="preview_followmouse"/> + <MkTextarea v-model="preview_followmouse"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.scale }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.scaleDescription }}</p> + <div class="preview"> + <Mfm :text="preview_scale"/> + <MkTextarea v-model="preview_scale"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.fade }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.fadeDescription }}</p> + <div class="preview"> + <Mfm :text="preview_fade" /> + <MkTextarea v-model="preview_fade"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.foreground }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.foregroundDescription }}</p> + <div class="preview"> + <Mfm :text="preview_fg"/> + <MkTextarea v-model="preview_fg"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.background }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.backgroundDescription }}</p> + <div class="preview"> + <Mfm :text="preview_bg"/> + <MkTextarea v-model="preview_bg"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + <div class="section _block"> + <div class="title">{{ i18n.ts._mfm.plain }}</div> + <div class="content"> + <p>{{ i18n.ts._mfm.plainDescription }}</p> + <div class="preview"> + <Mfm :text="preview_plain"/> + <MkTextarea v-model="preview_plain"><span>MFM</span></MkTextarea> + </div> + </div> + </div> + </div> + </MkSpacer> + </MkStickyContainer> +</MkWindow> +</template> + +<script lang="ts" setup> +import { ref } from 'vue'; +import MkInfo from './MkInfo.vue'; +import MkWindow from '@/components/MkWindow.vue'; +import MkTextarea from '@/components/MkTextarea.vue'; +import { i18n } from '@/i18n.js'; + +const emit = defineEmits<{ + (ev: 'closed'): void; +}>(); + +const preview_mention = ref('@example'); +const preview_hashtag = ref('#test'); +const preview_link = ref(`[${i18n.ts._mfm.dummy}](https://joinsharkey.org)`); +const preview_emoji = ref(':heart:'); +const preview_bold = ref(`**${i18n.ts._mfm.dummy}**`); +const preview_small = ref( + `<small>${i18n.ts._mfm.dummy}</small>`, +); +const preview_center = ref( + `<center>${i18n.ts._mfm.dummy}</center>`, +); +const preview_inlineCode = ref('`<: "Hello, world!"`'); +const preview_blockCode = ref( + '```\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```', +); +const preview_inlineMath = ref( + '\\(x= \\frac{-b\' \\pm \\sqrt{(b\')^2-ac}}{a}\\)', +); +const preview_blockMath = ref('\\[x= \\frac{-b\' \\pm \\sqrt{(b\')^2-ac}}{a}\\]'); +const preview_quote = ref(`> ${i18n.ts._mfm.dummy}`); +const preview_search = ref( + `${i18n.ts._mfm.dummy} [search]\n${i18n.ts._mfm.dummy} [ๆค็ดข]`, +); +const preview_jelly = ref( + '$[jelly ๐ฎ] $[jelly.speed=3s ๐ฎ] $[jelly.delay=3s ๐ฎ] $[jelly.loop=3 ๐ฎ]', +); +const preview_tada = ref( + '$[tada ๐ฎ] $[tada.speed=3s ๐ฎ] $[tada.delay=3s ๐ฎ] $[tada.loop=3 ๐ฎ]', +); +const preview_jump = ref( + '$[jump ๐ฎ] $[jump.speed=3s ๐ฎ] $[jump.delay=3s ๐ฎ] $[jump.loop=3 ๐ฎ]', +); +const preview_bounce = ref( + '$[bounce ๐ฎ] $[bounce.speed=3s ๐ฎ] $[bounce.delay=3s ๐ฎ] $[bounce.loop=3 ๐ฎ]', +); +const preview_shake = ref( + '$[shake ๐ฎ] $[shake.speed=3s ๐ฎ] $[shake.delay=3s ๐ฎ] $[shake.loop=3 ๐ฎ]', +); +const preview_twitch = ref( + '$[twitch ๐ฎ] $[twitch.speed=3s ๐ฎ] $[twitch.delay=3s ๐ฎ] $[twitch.loop=3 ๐ฎ]', +); +const preview_spin = ref( + '$[spin ๐ฎ] $[spin.left ๐ฎ] $[spin.alternate ๐ฎ]\n$[spin.x ๐ฎ] $[spin.x,left ๐ฎ] $[spin.x,alternate ๐ฎ]\n$[spin.y ๐ฎ] $[spin.y,left ๐ฎ] $[spin.y,alternate ๐ฎ]\n\n$[spin.speed=3s ๐ฎ] $[spin.delay=3s ๐ฎ] $[spin.loop=3 ๐ฎ]', +); +const preview_flip = ref( + `$[flip ${i18n.ts._mfm.dummy}]\n$[flip.v ${i18n.ts._mfm.dummy}]\n$[flip.h,v ${i18n.ts._mfm.dummy}]`, +); +const preview_font = ref( + `$[font.serif ${i18n.ts._mfm.dummy}]\n$[font.monospace ${i18n.ts._mfm.dummy}]`, +); +const preview_x2 = ref('$[x2 ๐ฎ]'); +const preview_x3 = ref('$[x3 ๐ฎ]'); +const preview_x4 = ref('$[x4 ๐ฎ]'); +const preview_blur = ref(`$[blur ${i18n.ts._mfm.dummy}]`); +const preview_rainbow = ref( + '$[rainbow ๐ฎ] $[rainbow.speed=3s ๐ฎ] $[rainbow.delay=3s ๐ฎ] $[rainbow.loop=3 ๐ฎ]', +); +const preview_sparkle = ref('$[sparkle ๐ฎ]'); +const preview_rotate = ref( + '$[rotate ๐ฎ]\n$[rotate.deg=45 ๐ฎ]\n$[rotate.x,deg=45 Hello, world!]', +); +const preview_position = ref('$[position.y=-1 ๐ฎ]\n$[position.x=-1 ๐ฎ]'); +const preview_crop = ref( + "$[crop.top=50 ๐ฎ] $[crop.right=50 ๐ฎ] $[crop.bottom=50 ๐ฎ] $[crop.left=50 ๐ฎ]", +); +const preview_followmouse = ref('$[followmouse.x ๐ฎ]\n$[followmouse.x,y,rotateByVelocity,speed=0.4 ๐ฎ]'); +const preview_scale = ref( + '$[scale.x=1.3 ๐ฎ]\n$[scale.x=1.5,y=3 ๐ฎ]\n$[scale.y=0.3 ๐ฎ]', +); +const preview_fg = ref('$[fg.color=eb6f92 Text color]'); +const preview_bg = ref('$[bg.color=31748f Background color]'); +const preview_plain = ref( + '<plain>**bold** @mention #hashtag `code` $[x2 ๐ฎ]</plain>', +); +const preview_fade = ref(`$[fade ๐ฎ] $[fade.out ๐ฎ] $[fade.speed=3s ๐ฎ] $[fade.delay=3s ๐ฎ]`); +</script> + +<style lang="scss" scoped> +.mfm-cheat-sheet { + > .section { + > .title { + position: sticky; + z-index: 1; + top: var(--stickyTop, 0px); + padding: 16px; + font-weight: bold; + -webkit-backdrop-filter: var(--blur, blur(10px)); + backdrop-filter: var(--blur, blur(10px)); + background-color: var(--X16); + } + + > .content { + > p { + margin: 0; + padding: 16px; + padding-top: 0; + } + + > .preview { + border-top: solid 0.5px var(--divider); + padding: 16px; + } + } + } +} +</style> |