|
62 | 62 | </div>
|
63 | 63 |
|
64 | 64 | <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> |
66 | 69 | </div>
|
67 | 70 |
|
68 | 71 | <div class="image-container" v-else-if="isImage">
|
|
98 | 101 | </div>
|
99 | 102 | </transition>
|
100 | 103 | </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> |
102 | 108 | </div>
|
103 | 109 |
|
104 | 110 | <div v-else class="file-message">
|
|
108 | 114 | >
|
109 | 115 | <svg-icon name="document" />
|
110 | 116 | </div>
|
111 |
| - <span>{{ linkifiedMessage }}</span> |
| 117 | + <span>{{ message.content }}</span> |
112 | 118 | </div>
|
113 | 119 |
|
114 | 120 | <div class="text-timestamp">
|
|
218 | 224 | </template>
|
219 | 225 |
|
220 | 226 | <script>
|
221 |
| -import SvgIcon from './SvgIcon' |
222 |
| -import vClickOutside from 'v-click-outside' |
| 227 | +const linkify = require('linkifyjs') |
223 | 228 | import linkifyHtml from 'linkifyjs/html'
|
| 229 | +import vClickOutside from 'v-click-outside' |
| 230 | +
|
| 231 | +import SvgIcon from './SvgIcon' |
224 | 232 | import Loader from './Loader'
|
225 | 233 | import EmojiPicker from './EmojiPicker'
|
226 | 234 |
|
@@ -303,9 +311,29 @@ export default {
|
303 | 311 |
|
304 | 312 | computed: {
|
305 | 313 | 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 |
308 | 334 | })
|
| 335 | +
|
| 336 | + return formattedStrings |
309 | 337 | },
|
310 | 338 | showDate() {
|
311 | 339 | return (
|
|
0 commit comments