diff options
| author | Marie <marie@kaifa.ch> | 2024-02-03 20:19:44 +0100 |
|---|---|---|
| committer | Marie <marie@kaifa.ch> | 2024-02-03 20:19:44 +0100 |
| commit | 11628e4b6a439a8a5f0ed1e1e8997f4edc894ace (patch) | |
| tree | 865f01b5a5fbaf98bc838451cb7bd39e44bceb66 /packages/frontend/src/components/MkCode.core.vue | |
| parent | merge: Fix sfm-js linkage (!399) (diff) | |
| parent | 2024.2.0-beta.9 (diff) | |
| download | sharkey-11628e4b6a439a8a5f0ed1e1e8997f4edc894ace.tar.gz sharkey-11628e4b6a439a8a5f0ed1e1e8997f4edc894ace.tar.bz2 sharkey-11628e4b6a439a8a5f0ed1e1e8997f4edc894ace.zip | |
merge: upstream
Diffstat (limited to 'packages/frontend/src/components/MkCode.core.vue')
| -rw-r--r-- | packages/frontend/src/components/MkCode.core.vue | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/packages/frontend/src/components/MkCode.core.vue b/packages/frontend/src/components/MkCode.core.vue index 77a01627ba..b06bb70e99 100644 --- a/packages/frontend/src/components/MkCode.core.vue +++ b/packages/frontend/src/components/MkCode.core.vue @@ -5,13 +5,13 @@ SPDX-License-Identifier: AGPL-3.0-only <!-- eslint-disable vue/no-v-html --> <template> -<div :class="['codeBlockRoot', { 'codeEditor': codeEditor }]" v-html="html"></div> +<div :class="[$style.codeBlockRoot, { [$style.codeEditor]: codeEditor }]" v-html="html"></div> </template> <script lang="ts" setup> import { ref, computed, watch } from 'vue'; -import { BUNDLED_LANGUAGES } from 'shiki'; -import type { Lang as ShikiLang } from 'shiki'; +import { bundledLanguagesInfo } from 'shiki'; +import type { BuiltinLanguage } from 'shiki'; import { getHighlighter } from '@/scripts/code-highlighter.js'; const props = defineProps<{ @@ -22,24 +22,25 @@ const props = defineProps<{ const highlighter = await getHighlighter(); -const codeLang = ref<ShikiLang | 'aiscript'>('js'); +const codeLang = ref<BuiltinLanguage | 'aiscript'>('js'); const html = computed(() => highlighter.codeToHtml(props.code, { lang: codeLang.value, theme: 'dark-plus', })); async function fetchLanguage(to: string): Promise<void> { - const language = to as ShikiLang; + const language = to as BuiltinLanguage; // Check for the loaded languages, and load the language if it's not loaded yet. if (!highlighter.getLoadedLanguages().includes(language)) { // Check if the language is supported by Shiki - const bundles = BUNDLED_LANGUAGES.filter((bundle) => { + const bundles = bundledLanguagesInfo.filter((bundle) => { // Languages are specified by their id, they can also have aliases (i. e. "js" and "javascript") return bundle.id === language || bundle.aliases?.includes(language); }); if (bundles.length > 0) { - await highlighter.loadLanguage(language); + console.log(`Loading language: ${language}`); + await highlighter.loadLanguage(bundles[0].import); codeLang.value = language; } else { codeLang.value = 'js'; @@ -57,13 +58,13 @@ watch(() => props.lang, (to) => { }, { immediate: true }); </script> -<style scoped lang="scss"> -.codeBlockRoot :deep(.shiki) > code { +<style module lang="scss"> +.codeBlockRoot :global(.shiki) > code { counter-reset: step; counter-increment: step 0; } -.codeBlockRoot :deep(.shiki) > code > .line::before { +.codeBlockRoot :global(.shiki) > code > .line::before { content: counter(step); counter-increment: step; width: 1rem; @@ -73,7 +74,7 @@ watch(() => props.lang, (to) => { color: rgba(115,138,148,.4) } -.codeBlockRoot :deep(.shiki) { +.codeBlockRoot :global(.shiki) { padding: 1em; margin: .5em 0; overflow: auto; @@ -89,7 +90,7 @@ watch(() => props.lang, (to) => { min-width: 100%; height: 100%; - & :deep(.shiki) { + & :global(.shiki) { padding: 12px; margin: 0; border-radius: var(--radius-sm); |