diff options
| author | FineArchs <133759614+FineArchs@users.noreply.github.com> | 2024-01-18 10:53:29 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-18 10:53:29 +0900 |
| commit | 9a40b366a3a54c7a00d6322b4f61ef4aaa167b01 (patch) | |
| tree | 8f352f6c80cc8349dd14a3683091d91c08e00294 /packages/frontend/src/components/MkCode.vue | |
| parent | enhance(drop-and-fusion): ゲームバランスの調整など (diff) | |
| download | sharkey-9a40b366a3a54c7a00d6322b4f61ef4aaa167b01.tar.gz sharkey-9a40b366a3a54c7a00d6322b4f61ef4aaa167b01.tar.bz2 sharkey-9a40b366a3a54c7a00d6322b4f61ef4aaa167b01.zip | |
MkCodeにコピーボタンを追加 (#12999)
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update MkCode.vue
* Update CHANGELOG.md
---------
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/frontend/src/components/MkCode.vue')
| -rw-r--r-- | packages/frontend/src/components/MkCode.vue | 56 |
1 files changed, 42 insertions, 14 deletions
diff --git a/packages/frontend/src/components/MkCode.vue b/packages/frontend/src/components/MkCode.vue index 2c016e4d7c..b81afe2920 100644 --- a/packages/frontend/src/components/MkCode.vue +++ b/packages/frontend/src/components/MkCode.vue @@ -4,29 +4,36 @@ SPDX-License-Identifier: AGPL-3.0-only --> <template> -<Suspense> - <template #fallback> - <MkLoading v-if="!inline ?? true"/> - </template> - <code v-if="inline" :class="$style.codeInlineRoot">{{ code }}</code> - <XCode v-else-if="show && lang" :code="code" :lang="lang"/> - <pre v-else-if="show" :class="$style.codeBlockFallbackRoot"><code :class="$style.codeBlockFallbackCode">{{ code }}</code></pre> - <button v-else :class="$style.codePlaceholderRoot" @click="show = true"> - <div :class="$style.codePlaceholderContainer"> - <div><i class="ti ti-code"></i> {{ i18n.ts.code }}</div> - <div>{{ i18n.ts.clickToShow }}</div> - </div> +<code v-if="inline" :class="$style.codeInlineRoot">{{ code }}</code> +<div v-else :class="$style.codeBlockRoot"> + <button :class="$style.codeBlockCopyButton" class="_button" @click="copy"> + <i class="ti ti-copy"></i> </button> -</Suspense> + <Suspense> + <template #fallback> + <MkLoading /> + </template> + <XCode v-if="show && lang" :code="code" :lang="lang"/> + <pre v-else-if="show" :class="$style.codeBlockFallbackRoot"><code :class="$style.codeBlockFallbackCode">{{ code }}</code></pre> + <button v-else :class="$style.codePlaceholderRoot" @click="show = true"> + <div :class="$style.codePlaceholderContainer"> + <div><i class="ti ti-code"></i> {{ i18n.ts.code }}</div> + <div>{{ i18n.ts.clickToShow }}</div> + </div> + </button> + </Suspense> +</div> </template> <script lang="ts" setup> import { defineAsyncComponent, ref } from 'vue'; +import * as os from '@/os.js'; import MkLoading from '@/components/global/MkLoading.vue'; import { defaultStore } from '@/store.js'; import { i18n } from '@/i18n.js'; +import copyToClipboard from '@/scripts/copy-to-clipboard.js'; -defineProps<{ +const props = defineProps<{ code: string; lang?: string; inline?: boolean; @@ -35,9 +42,30 @@ defineProps<{ const show = ref(!defaultStore.state.dataSaver.code); const XCode = defineAsyncComponent(() => import('@/components/MkCode.core.vue')); + +function copy() { + copyToClipboard(props.code); + os.success(); +} </script> <style module lang="scss"> +.codeBlockRoot { + position: relative; +} + +.codeBlockCopyButton { + color: #D4D4D4; + position: absolute; + top: 8px; + right: 8px; + opacity: 0.5; + + &:hover { + opacity: 0.8; + } +} + .codeInlineRoot { display: inline-block; font-family: Consolas, Monaco, Andale Mono, Ubuntu Mono, monospace; |