Skip to content
This repository was archived by the owner on Feb 10, 2025. It is now read-only.

Commit a7e1d02

Browse files
committed
chore: development
1 parent 238e486 commit a7e1d02

File tree

8 files changed

+174
-183
lines changed

8 files changed

+174
-183
lines changed

dev/App.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ export default defineComponent({
5151
const mode = ref('split')
5252
const languages = ref(['javascript', 'html', 'css'])
5353
const language = ref('html')
54-
const themes = ref(['light', 'dark'])
55-
const theme = ref('light')
54+
const themes = ref(['dark', 'light'])
55+
const theme = ref('dark')
5656
5757
const prev = ref('')
5858
const current = ref('')

dev/template.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ const html2 =
5050
</html>`
5151

5252
const css1 =
53-
`@import '../../node_modules/prismjs/themes/prism-okaidia.css';
53+
`@import '../../css/style.css';
5454
5555
.vue-diff-viewer {
5656
background-color: #272822;
5757
}`
5858

5959
const css2 =
60-
`@import 'prismjs/themes/prism-okaidia.css';
60+
`@import 'css/style.css';
6161
6262
div.vue-diff-viewer {
6363
background-color: #666;

package-lock.json

Lines changed: 1 addition & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"dependencies": {
1919
"core-js": "^3.6.5",
2020
"diff": "^5.0.0",
21-
"prismjs": "^1.22.0",
21+
"highlight.js": "^10.5.0",
2222
"vue": "^3.0.0"
2323
},
2424
"devDependencies": {

src/Code.vue

Lines changed: 23 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -1,153 +1,51 @@
11
<template>
2-
<tr v-if="mode === 'split'" :class="`vue-diff-row-${mode}`">
3-
<template :key="index" v-for="(line, index) in data">
4-
<td class="lineNum" :class="`vue-diff-cell-${line.type}`">
5-
{{ line.lineNum }}
6-
</td>
7-
<td class="code" :class="`vue-diff-cell-${line.type}`">
8-
<pre :class="`language-${language}`"><code
9-
:class="`language-${language}`"
10-
v-html="line.type.match(/added|removed/) ?
11-
getHighlightCode(line.value, data, index) :
12-
getHighlightCode(line.value)"
13-
></code></pre>
14-
</td>
15-
</template>
16-
</tr>
17-
<template v-if="mode === 'unified'">
18-
<tr :class="`vue-diff-row-${mode}`">
19-
<td class="lineNum" :class="`vue-diff-cell-${data[0].type}`">
20-
{{ data[0].lineNum }}
21-
</td>
22-
<td class="code" :class="`vue-diff-cell-${data[0].type}`">
23-
<pre :class="`language-${language}`"><code :class="`language-${language}`" v-html="getHighlightCode(data[0].value)"></code></pre>
24-
</td>
25-
</tr>
26-
</template>
2+
<pre :class="`language-${language}`"><code
3+
:class="`language-${language}`"
4+
v-html="code"
5+
></code></pre>
276
</template>
287

298
<script lang="ts">
30-
import Prism from 'prismjs'
31-
import { defineComponent, PropType } from 'vue'
32-
import { MODIFIED_START_TAG, MODIFIED_CLOSE_TAG, renderWords } from './utils'
33-
34-
import type { Mode, Lines } from './utils'
35-
36-
// @ts-ignore
37-
Prism.manual = true
9+
import hljs from 'highlight.js'
10+
import { defineComponent, ref, onMounted } from 'vue'
11+
import { MODIFIED_START_TAG, MODIFIED_CLOSE_TAG } from './utils'
12+
import 'highlight.js/styles/monokai.css'
3813
3914
export default defineComponent({
4015
props: {
41-
mode: {
42-
type: String as PropType<Mode>,
43-
required: true
44-
},
4516
language: {
4617
type: String,
4718
required: true
4819
},
49-
data: {
50-
type: Object as PropType<Lines>,
20+
value: {
21+
type: String,
5122
required: true
5223
}
5324
},
5425
setup (props) {
55-
const getHighlightCode = (value: string, data?: Lines, index?: number) => {
56-
if (!value) return '\n'
57-
58-
const code = value
26+
const code = ref('')
5927
60-
// if (data) { // Diff words
61-
// const diffIndex = index === 0 ? 1 : 0
62-
// const diffValue = data[diffIndex].value
28+
const pureValue = props.value.replace(new RegExp(`(${MODIFIED_START_TAG}|${MODIFIED_CLOSE_TAG})`, 'g'), '')
29+
code.value = hljs.highlight(props.language, pureValue).value
6330
64-
// if (diffValue) { // Wrap custom highlight
65-
// code = renderWords(diffValue, value)
66-
// }
67-
// }
31+
onMounted(() => {
32+
const el = document.createElement('div')
33+
el.innerHTML = code.value
6834
69-
const grammar = Prism.languages[props.language]
70-
const highlightCode = Prism.highlight(code, grammar, props.language)
71-
72-
return highlightCode
73-
}
35+
console.log(el.childNodes)
36+
})
7437
7538
return {
76-
getHighlightCode
39+
code
7740
}
7841
}
7942
})
8043
</script>
8144

8245
<style scoped lang="scss">
83-
td {
84-
padding: 0 0.5em;
85-
vertical-align: top;
86-
87-
&.lineNum {
88-
width: 3.5em;
89-
padding-top: .05em;
90-
text-align: right;
91-
color: #999;
92-
font-size: 0.9em;
93-
}
94-
95-
pre[class*="language-"]:before {
96-
display: inline-block;
97-
position: absolute;
98-
left: 0;
99-
top: 0;
100-
opacity: 0.8;
101-
}
102-
103-
pre[class*="language-"] {
104-
display: block;
105-
position: relative;
106-
max-width: 100%;
107-
margin: 0;
108-
padding: 0;
109-
padding-left: 1.5em;
110-
overflow: visible;
111-
background: none;
112-
border-radius: 0;
113-
}
114-
115-
code {
116-
word-wrap: break-all !important;
117-
word-break: break-all !important;
118-
white-space: pre-wrap !important;
119-
}
120-
}
121-
122-
td.vue-diff-cell-removed {
123-
background-color: rgba(255, 0, 0, .1);
124-
125-
:deep(.token.modified) {
126-
background-color: rgba(255, 0, 0, .3);
127-
}
128-
}
129-
130-
td.vue-diff-cell-removed.code {
131-
pre[class*="language-"]:before {
132-
content: "-";
133-
}
134-
}
135-
136-
td.vue-diff-cell-added {
137-
background-color: rgba(0, 255, 128, .1);
138-
139-
:deep(.token.modified) {
140-
background-color: rgba(0, 255, 128, .3);
141-
}
142-
}
143-
144-
td.vue-diff-cell-added.code {
145-
pre[class*="language-"]:before {
146-
content: "+";
147-
}
148-
}
149-
150-
td.vue-diff-cell-disabled {
151-
background-color: rgba(128, 128, 128, 0.1);
46+
code {
47+
word-wrap: break-all !important;
48+
word-break: break-all !important;
49+
white-space: pre-wrap !important;
15250
}
15351
</style>

src/Diff.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<div ref="viewer" class="vue-diff-viewer">
44
<table>
55
<tbody>
6-
<Code
6+
<Line
77
:key="index"
88
v-for="(data, index) in lines"
99
:mode="mode"
@@ -19,13 +19,13 @@
1919
<script lang="ts">
2020
import { defineComponent, PropType, ref, watch } from 'vue'
2121
import { renderLines } from './utils'
22-
import Code from './Code.vue'
22+
import Line from './Line.vue'
2323
2424
import type { Mode, Lines } from './utils'
2525
2626
export default defineComponent({
2727
components: {
28-
Code
28+
Line
2929
},
3030
props: {
3131
mode: {

0 commit comments

Comments
 (0)