Skip to content

Commit 72b1a62

Browse files
authored
Merge pull request #15 from zernonia/14-add-code-block-support-multiple-language
14 add code block support multiple language
2 parents 6c12ab6 + 93b049c commit 72b1a62

File tree

4 files changed

+65
-7
lines changed

4 files changed

+65
-7
lines changed

src/blocks/code.vue

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,43 @@ import PrismBlock from "./helpers/prism.vue"
44
import { useNotionBlock, defineNotionProps } from "@/lib/blockable"
55
import { computed } from "vue"
66
7+
import "prismjs/components/prism-markup-templating"
8+
import "prismjs/components/prism-markup"
9+
import "prismjs/components/prism-bash"
10+
import "prismjs/components/prism-c"
11+
import "prismjs/components/prism-cpp"
12+
import "prismjs/components/prism-csharp"
13+
import "prismjs/components/prism-docker"
14+
import "prismjs/components/prism-java"
15+
import "prismjs/components/prism-js-templates"
16+
import "prismjs/components/prism-typescript"
17+
import "prismjs/components/prism-coffeescript"
18+
import "prismjs/components/prism-diff"
19+
import "prismjs/components/prism-git"
20+
import "prismjs/components/prism-go"
21+
import "prismjs/components/prism-graphql"
22+
import "prismjs/components/prism-handlebars"
23+
import "prismjs/components/prism-json"
24+
import "prismjs/components/prism-less"
25+
import "prismjs/components/prism-makefile"
26+
import "prismjs/components/prism-markdown"
27+
import "prismjs/components/prism-objectivec"
28+
import "prismjs/components/prism-ocaml"
29+
import "prismjs/components/prism-python"
30+
import "prismjs/components/prism-reason"
31+
import "prismjs/components/prism-rust"
32+
import "prismjs/components/prism-sass"
33+
import "prismjs/components/prism-scss"
34+
import "prismjs/components/prism-solidity"
35+
import "prismjs/components/prism-sql"
36+
import "prismjs/components/prism-stylus"
37+
import "prismjs/components/prism-swift"
38+
import "prismjs/components/prism-wasm"
39+
import "prismjs/components/prism-yaml"
40+
741
const props = defineProps({ overrideLang: String, overrideLangClass: String, ...defineNotionProps })
842
//@ts-ignore
943
const { properties } = useNotionBlock(props)
10-
1144
const lang = computed(() => {
1245
return props.overrideLang || properties.value?.language?.[0]?.[0]?.toLowerCase()
1346
})
@@ -19,6 +52,8 @@ const langClass = computed(() => {
1952
const supported = computed(() => {
2053
return lang.value ? Prism?.languages[lang.value] : false
2154
})
55+
56+
const computedSlot = computed(() => properties.value?.title.map((i) => i?.[0]).join(""))
2257
</script>
2358

2459
<script lang="ts">
@@ -29,9 +64,9 @@ export default {
2964

3065
<template>
3166
<div v-if="supported" :class="['notion-code']">
32-
<PrismBlock :language="lang">{{ properties?.title[0][0] }}</PrismBlock>
67+
<PrismBlock :language="lang">{{ computedSlot }}</PrismBlock>
3368
</div>
3469
<div v-else :class="['notion-code']">
35-
<pre><code :class="langClass">{{ properties?.title[0][0] }}</code></pre>
70+
<pre><div :class="langClass">{{ computedSlot }}</div></pre>
3671
</div>
3772
</template>

src/blocks/helpers/prism.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ const d = computed(() => Prism?.highlight(code, Prism?.languages[language.value]
2929
</script>
3030

3131
<template>
32-
<code :class="className" v-if="inline" v-html="d"></code>
33-
<pre :class="className" v-else><code v-html="d"></code></pre>
32+
<div :class="className" v-if="inline" v-html="d"></div>
33+
<pre :class="className" v-else><div v-html="d"></div></pre>
3434
</template>

src/components/block.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<script setup lang="ts">
2+
import { defineAsyncComponent } from "vue"
23
import { defineNotionProps, useNotionBlock } from "@/lib/blockable"
34
import { availableType } from "@/lib/constant"
45
import NotionBookmark from "@/blocks/bookmark.vue"
56
import NotionCallout from "@/blocks/callout.vue"
6-
import NotionCode from "@/blocks/code.vue"
77
import NotionColumn from "@/blocks/column.vue"
88
import NotionEquation from "@/blocks/equation.vue"
99
import NotionFigure from "@/blocks/helpers/figure.vue"
@@ -18,6 +18,8 @@ import NotionTodo from "@/blocks/todo.vue"
1818
import NotionToggle from "@/blocks/toggle.vue"
1919
import NotionTableOfContents from "@/blocks/table-of-contents.vue"
2020
21+
const NotionCode = defineAsyncComponent(() => import("@/blocks/code.vue"))
22+
2123
const props = defineProps({ ...defineNotionProps })
2224
//@ts-ignore
2325
const { pass, type, format, isType } = useNotionBlock(props)

src/style.css

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,24 @@
108108
--notion-gray_background_co: rgba(69, 75, 78, 0.3);
109109
}
110110

111+
::-webkit-scrollbar {
112+
background: transparent;
113+
width: 10px;
114+
height: 10px;
115+
}
116+
::-webkit-scrollbar-thumb {
117+
background: #d3d1cb;
118+
}
119+
::-webkit-scrollbar-thumb:hover {
120+
background: #c2c1bf;
121+
}
122+
::-webkit-scrollbar-track {
123+
background: #edece9;
124+
}
125+
*::selection {
126+
background: rgba(45, 170, 219, 0.3);
127+
}
128+
111129
.notion {
112130
box-sizing: border-box;
113131
font-size: 16px;
@@ -820,7 +838,6 @@ svg.notion-page-icon {
820838

821839
.notion-code {
822840
width: 100%;
823-
padding: 20px 16px 20px 20px;
824841
margin: 4px 0;
825842
border-radius: 3px;
826843
tab-size: 2;
@@ -830,6 +847,10 @@ svg.notion-page-icon {
830847
background: var(--bg-color-1);
831848
font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace;
832849
}
850+
.notion-code > pre {
851+
padding: 34px 16px 32px 32px;
852+
margin: 0;
853+
}
833854

834855
.notion-column {
835856
display: flex;

0 commit comments

Comments
 (0)