|
47 | 47 | </div>
|
48 | 48 | </template>
|
49 | 49 | <template v-else>
|
50 |
| - <span :class="{ 'vac-emoji-message': containsOnlyEmojis }"> |
| 50 | + <span v-html="message.value"> |
51 | 51 | {{ message.value }}
|
52 | 52 | </span>
|
53 | 53 | </template>
|
54 | 54 | </component>
|
55 | 55 | </div>
|
56 | 56 | </div>
|
57 |
| - <div v-else :class="{ 'vac-emoji-message': containsOnlyEmojis }"> |
58 |
| - {{ formattedContent }} |
59 |
| - </div> |
| 57 | + <div v-else v-html="formattedContent" /> |
60 | 58 | </div>
|
61 | 59 | </template>
|
62 | 60 |
|
@@ -101,23 +99,11 @@ export default {
|
101 | 99 | m.multiline = this.checkType(m, 'multiline-code')
|
102 | 100 | m.tag = this.checkType(m, 'tag')
|
103 | 101 | m.image = this.checkImageType(m)
|
| 102 | + m.value = this.replaceEmojiByElement(m.value) |
104 | 103 | })
|
105 | 104 |
|
106 | 105 | return message
|
107 | 106 | },
|
108 |
| - containsOnlyEmojis() { |
109 |
| - if (this.singleLine) return false |
110 |
| -
|
111 |
| - const onlyEmojis = this.content.replace( |
112 |
| - new RegExp('[\u0000-\u1eeff]', 'g'), |
113 |
| - '' |
114 |
| - ) |
115 |
| - const visibleChars = this.content.replace( |
116 |
| - new RegExp('[\n\rs]+|( )+', 'g'), |
117 |
| - '' |
118 |
| - ) |
119 |
| - return onlyEmojis.length === visibleChars.length |
120 |
| - }, |
121 | 107 | formattedContent() {
|
122 | 108 | return this.formatTags(this.content)
|
123 | 109 | }
|
@@ -183,6 +169,30 @@ export default {
|
183 | 169 | )
|
184 | 170 | this.$emit('open-user-tag', user)
|
185 | 171 | }
|
| 172 | + }, |
| 173 | + replaceEmojiByElement(value) { |
| 174 | + let emojiSize |
| 175 | + if (this.singleLine) { |
| 176 | + emojiSize = 16 |
| 177 | + } else { |
| 178 | + const onlyEmojis = this.containsOnlyEmojis() |
| 179 | + emojiSize = onlyEmojis ? 28 : 20 |
| 180 | + } |
| 181 | +
|
| 182 | + return value.replaceAll(/\p{Emoji}/gu, v => { |
| 183 | + return `<span style="font-size: ${emojiSize}px">${v}</span>` |
| 184 | + }) |
| 185 | + }, |
| 186 | + containsOnlyEmojis() { |
| 187 | + const onlyEmojis = this.content.replace( |
| 188 | + new RegExp('[\u0000-\u1eeff]', 'g'), |
| 189 | + '' |
| 190 | + ) |
| 191 | + const visibleChars = this.content.replace( |
| 192 | + new RegExp('[\n\rs]+|( )+', 'g'), |
| 193 | + '' |
| 194 | + ) |
| 195 | + return onlyEmojis.length === visibleChars.length |
186 | 196 | }
|
187 | 197 | }
|
188 | 198 | }
|
|
0 commit comments