summaryrefslogtreecommitdiff
path: root/packages/frontend/src/components/MkCode.vue
diff options
context:
space:
mode:
authorFineArchs <133759614+FineArchs@users.noreply.github.com>2024-01-18 10:53:29 +0900
committerGitHub <noreply@github.com>2024-01-18 10:53:29 +0900
commit9a40b366a3a54c7a00d6322b4f61ef4aaa167b01 (patch)
tree8f352f6c80cc8349dd14a3683091d91c08e00294 /packages/frontend/src/components/MkCode.vue
parentenhance(drop-and-fusion): ゲームバランスの調整など (diff)
downloadsharkey-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.vue56
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;