Skip to content

Commit 16d3a02

Browse files
committed
(refactor) add formatString util function
1 parent afb3e21 commit 16d3a02

File tree

2 files changed

+42
-27
lines changed

2 files changed

+42
-27
lines changed

src/ChatWindow/Message.vue

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363

6464
<div v-else-if="!message.file">
6565
<span v-for="(message, i) in linkifiedMessage" :key="i">
66-
<span v-if="message.url" v-html="message.content"></span>
66+
<span v-if="message.bind" v-html="message.content"></span>
6767
<span v-else>{{ message.content }}</span>
6868
</span>
6969
</div>
@@ -102,7 +102,7 @@
102102
</transition>
103103
</div>
104104
<span v-for="(message, i) in linkifiedMessage" :key="i">
105-
<span v-if="message.url" v-html="message.content"></span>
105+
<span v-if="message.bind" v-html="message.content"></span>
106106
<span v-else>{{ message.content }}</span>
107107
</span>
108108
</div>
@@ -224,14 +224,14 @@
224224
</template>
225225

226226
<script>
227-
const linkify = require('linkifyjs')
228-
import linkifyHtml from 'linkifyjs/html'
229227
import vClickOutside from 'v-click-outside'
230228
231229
import SvgIcon from './SvgIcon'
232230
import Loader from './Loader'
233231
import EmojiPicker from './EmojiPicker'
234232
233+
import formatString from '../utils/formatString'
234+
235235
export default {
236236
name: 'message',
237237
components: { SvgIcon, Loader, EmojiPicker },
@@ -311,29 +311,7 @@ export default {
311311
312312
computed: {
313313
linkifiedMessage() {
314-
const strings = this.message.content.split(' ')
315-
316-
const formattedStrings = strings.map((string, i) => {
317-
const links = linkify.find(string)
318-
319-
let result = { content: string }
320-
321-
if (links.length && string === links[0].value) {
322-
result = {
323-
url: true,
324-
content: linkifyHtml(links[0].value, {
325-
defaultProtocol: 'https'
326-
})
327-
}
328-
}
329-
330-
const space = i !== strings.length - 1 ? ' ' : ''
331-
result.content = result.content + space
332-
333-
return result
334-
})
335-
336-
return formattedStrings
314+
return formatString(this.message.content)
337315
},
338316
showDate() {
339317
return (

src/utils/formatString.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const linkify = require('linkifyjs')
2+
import linkifyHtml from 'linkifyjs/html'
3+
4+
export default text => {
5+
const strings = text.split(' ')
6+
7+
const formattedStrings = strings.map((string, i) => {
8+
const links = linkify.find(string)
9+
10+
let result = ''
11+
12+
if (links.length && string === links[0].value) {
13+
result = {
14+
bind: true,
15+
content: linkifyHtml(links[0].value, {
16+
defaultProtocol: 'https'
17+
})
18+
}
19+
} else {
20+
const firstChar = string.slice(0, 1)
21+
const lastChar = string.slice(-1)
22+
23+
if (string.length > 2 && firstChar === '*' && lastChar === '*') {
24+
result = { bind: true, content: `<b>${string.slice(1, -1)}</b>` }
25+
} else {
26+
result = { content: string }
27+
}
28+
}
29+
30+
const space = i !== strings.length - 1 ? ' ' : ''
31+
result.content = result.content + space
32+
33+
return result
34+
})
35+
36+
return formattedStrings
37+
}

0 commit comments

Comments
 (0)