77 :key =" i"
88 :class =" {
99 'vac-text-ellipsis': singleLine,
10- 'vac-text-deleted': deleted,
1110 'vac-text-bold': checkType(message, 'bold'),
12- 'vac-text-italic': checkType(message, 'italic'),
11+ 'vac-text-italic': checkType(message, 'italic') || deleted ,
1312 'vac-text-strike': checkType(message, 'strike'),
1413 'vac-text-underline': checkType(message, 'underline'),
1514 'vac-text-inline-code':
1615 !singleLine && checkType(message, 'inline-code'),
1716 'vac-text-multiline-code':
18- !singleLine && checkType(message, 'multiline-code')
17+ !singleLine && checkType(message, 'multiline-code'),
18+ 'vac-text-tag': checkType(message, 'tag')
1919 }"
2020 :href =" message.href"
21- target =" _blank"
21+ :target =" message.href ? '_blank' : null"
22+ @click =" openTag(message)"
2223 >
2324 <slot name =" deleted-icon" v-bind =" { deleted }" >
2425 <svg-icon v-if =" deleted" name =" deleted" class =" vac-icon-deleted" />
2728 </component >
2829 </template >
2930 </div >
30- <div v-else >{{ content }}</div >
31+ <div v-else >{{ formattedContent }}</div >
3132 </div >
3233</template >
3334
@@ -43,30 +44,44 @@ export default {
4344 props: {
4445 content: { type: [String , Number ], required: true },
4546 deleted: { type: Boolean , default: false },
47+ users: { type: Array , default : () => [] },
4648 linkify: { type: Boolean , default: true },
4749 singleLine: { type: Boolean , default: false },
4850 textFormatting: { type: Boolean , required: true }
4951 },
5052
5153 computed: {
5254 linkifiedMessage () {
53- return formatString (this .content , this .linkify )
55+ return formatString (this .formatTags (this .content ), this .linkify )
56+ },
57+ formattedContent () {
58+ return this .formatTags (this .content )
5459 }
5560 },
5661
5762 methods: {
5863 checkType (message , type ) {
5964 return message .types .indexOf (type) !== - 1
65+ },
66+ formatTags (content ) {
67+ this .users .forEach (user => {
68+ const index = content .indexOf (user ._id )
69+ const isTag = content .substring (index - 9 , index) === ' <usertag>'
70+ if (isTag) content = content .replace (user ._id , ` @${ user .username } ` )
71+ })
72+
73+ return content
74+ },
75+ openTag (message ) {
76+ if (! this .singleLine && this .checkType (message, ' tag' )) {
77+ // TODO: emit event
78+ }
6079 }
6180 }
6281}
6382 </script >
6483
6584<style >
66- .vac-text-deleted {
67- font-style : italic ;
68- }
69-
7085.vac-icon-deleted {
7186 height : 14px ;
7287 width : 14px ;
0 commit comments