Skip to content

Commit 1ba5afb

Browse files
committed
(fix) linkify message content
1 parent d572477 commit 1ba5afb

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

src/ChatWindow/Message.vue

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@
6262
</div>
6363

6464
<div v-else-if="!message.file">
65-
<span>{{ linkifiedMessage }}</span>
65+
<span v-for="(message, i) in linkifiedMessage" :key="i">
66+
<span v-if="message.url" v-html="message.content"></span>
67+
<span v-else>{{ message.content }}</span>
68+
</span>
6669
</div>
6770

6871
<div class="image-container" v-else-if="isImage">
@@ -98,7 +101,10 @@
98101
</div>
99102
</transition>
100103
</div>
101-
<span>{{ linkifiedMessage }}</span>
104+
<span v-for="(message, i) in linkifiedMessage" :key="i">
105+
<span v-if="message.url" v-html="message.content"></span>
106+
<span v-else>{{ message.content }}</span>
107+
</span>
102108
</div>
103109

104110
<div v-else class="file-message">
@@ -108,7 +114,7 @@
108114
>
109115
<svg-icon name="document" />
110116
</div>
111-
<span>{{ linkifiedMessage }}</span>
117+
<span>{{ message.content }}</span>
112118
</div>
113119

114120
<div class="text-timestamp">
@@ -218,9 +224,11 @@
218224
</template>
219225

220226
<script>
221-
import SvgIcon from './SvgIcon'
222-
import vClickOutside from 'v-click-outside'
227+
const linkify = require('linkifyjs')
223228
import linkifyHtml from 'linkifyjs/html'
229+
import vClickOutside from 'v-click-outside'
230+
231+
import SvgIcon from './SvgIcon'
224232
import Loader from './Loader'
225233
import EmojiPicker from './EmojiPicker'
226234
@@ -303,9 +311,29 @@ export default {
303311
304312
computed: {
305313
linkifiedMessage() {
306-
return linkifyHtml(this.message.content, {
307-
defaultProtocol: 'https'
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) {
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
308334
})
335+
336+
return formattedStrings
309337
},
310338
showDate() {
311339
return (

0 commit comments

Comments
 (0)