From 9c8efab23656480199276b444fed253e55cf3f5c Mon Sep 17 00:00:00 2001 From: N-Pex Date: Tue, 17 Nov 2020 20:32:37 +0100 Subject: [PATCH] Break message layouts out into separate compontents --- src/components/Chat.vue | 170 ++++++++---------- src/components/messages/ContactInvited.vue | 25 +++ src/components/messages/ContactJoin.vue | 25 +++ src/components/messages/ContactLeave.vue | 25 +++ src/components/messages/DebugEvent.vue | 15 ++ .../messages/MessageIncomingText.vue | 35 ++++ .../messages/MessageOutgoingText.vue | 26 +++ src/components/messages/RoomAvatarChanged.vue | 18 ++ src/components/messages/RoomNameChanged.vue | 19 ++ src/components/messages/RoomTopicChanged.vue | 19 ++ src/components/messages/messageMixin.js | 68 +++++++ 11 files changed, 349 insertions(+), 96 deletions(-) create mode 100644 src/components/messages/ContactInvited.vue create mode 100644 src/components/messages/ContactJoin.vue create mode 100644 src/components/messages/ContactLeave.vue create mode 100644 src/components/messages/DebugEvent.vue create mode 100644 src/components/messages/MessageIncomingText.vue create mode 100644 src/components/messages/MessageOutgoingText.vue create mode 100644 src/components/messages/RoomAvatarChanged.vue create mode 100644 src/components/messages/RoomNameChanged.vue create mode 100644 src/components/messages/RoomTopicChanged.vue create mode 100644 src/components/messages/messageMixin.js diff --git a/src/components/Chat.vue b/src/components/Chat.vue index 37531eb..2015ec0 100644 --- a/src/components/Chat.vue +++ b/src/components/Chat.vue @@ -8,97 +8,53 @@ >
-
- {{ stateEventDisplayName(event) }} joined the chat -
+ " :room="room" :event="event" + /> -
- {{ stateEventDisplayName(event) }} left the chat -
+ " :room="room" :event="event" + /> -
- {{ stateEventDisplayName(event) }} was invited to the chat... -
+ " :room="room" :event="event" + /> -
-
-
{{ messageEventDisplayName(event) }}
- - - {{ - messageEventDisplayName(event).substring(0, 1).toUpperCase() - }} - + " :room="room" :event="event" + /> -
-
{{ event.getContent().body }}
-
-
-
- {{ formatTime(event.event.origin_server_ts) }} -
-
-
-
-
{{ "You" }}
-
-
{{ event.getContent().body }}
-
-
{{ event.status }}
-
-
- {{ formatTime(event.event.origin_server_ts) }} -
-
+ -
- {{ stateEventDisplayName(event) }} changed room name to - {{ event.getContent().name }} -
+ -
- {{ stateEventDisplayName(event) }} changed topic to - {{ event.getContent().topic }} -
+ -
- {{ stateEventDisplayName(event) }} changed the room avatar -
+ -
Event: {{ event.getType() }}
+
@@ -169,6 +125,15 @@ diff --git a/src/components/messages/ContactInvited.vue b/src/components/messages/ContactInvited.vue new file mode 100644 index 0000000..8363b66 --- /dev/null +++ b/src/components/messages/ContactInvited.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/ContactJoin.vue b/src/components/messages/ContactJoin.vue new file mode 100644 index 0000000..cae7d83 --- /dev/null +++ b/src/components/messages/ContactJoin.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/ContactLeave.vue b/src/components/messages/ContactLeave.vue new file mode 100644 index 0000000..5f6ae6c --- /dev/null +++ b/src/components/messages/ContactLeave.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/DebugEvent.vue b/src/components/messages/DebugEvent.vue new file mode 100644 index 0000000..e678340 --- /dev/null +++ b/src/components/messages/DebugEvent.vue @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/MessageIncomingText.vue b/src/components/messages/MessageIncomingText.vue new file mode 100644 index 0000000..99802fc --- /dev/null +++ b/src/components/messages/MessageIncomingText.vue @@ -0,0 +1,35 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/MessageOutgoingText.vue b/src/components/messages/MessageOutgoingText.vue new file mode 100644 index 0000000..113fb85 --- /dev/null +++ b/src/components/messages/MessageOutgoingText.vue @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/RoomAvatarChanged.vue b/src/components/messages/RoomAvatarChanged.vue new file mode 100644 index 0000000..62b06f8 --- /dev/null +++ b/src/components/messages/RoomAvatarChanged.vue @@ -0,0 +1,18 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/RoomNameChanged.vue b/src/components/messages/RoomNameChanged.vue new file mode 100644 index 0000000..ac3e30f --- /dev/null +++ b/src/components/messages/RoomNameChanged.vue @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/RoomTopicChanged.vue b/src/components/messages/RoomTopicChanged.vue new file mode 100644 index 0000000..d669bb3 --- /dev/null +++ b/src/components/messages/RoomTopicChanged.vue @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/src/components/messages/messageMixin.js b/src/components/messages/messageMixin.js new file mode 100644 index 0000000..2d049d2 --- /dev/null +++ b/src/components/messages/messageMixin.js @@ -0,0 +1,68 @@ +export default { + props: { + room: { + type: Object, + default: function () { + return null + } + }, + event: { + type: Object, + default: function () { + return {} + } + }, + }, + computed: { + }, + methods: { + /** + * Get a display name given an event. + */ + stateEventDisplayName(event) { + if (this.room) { + const member = this.room.getMember(event.getSender()); + if (member) { + return member.name; + } + } + return event.getContent().displayname || event.event.state_key; + }, + + messageEventDisplayName(event) { + return this.stateEventDisplayName(event); + }, + + messageEventAvatar(event) { + if (this.room) { + const member = this.room.getMember(event.getSender()); + if (member) { + return member.getAvatarUrl( + this.$matrix.matrixClient.getHomeserverUrl(), + 40, + 40, + "scale", + true + ); + } + } + return null; + }, + + formatTime(time) { + const date = new Date(); + date.setTime(time); + + const today = new Date(); + if ( + date.getDate() == today.getDate() && + date.getMonth() == today.getMonth() && + date.getFullYear() == today.getFullYear() + ) { + // For today, skip the date part + return date.toLocaleTimeString(); + } + return date.toLocaleString(); + }, + } +} \ No newline at end of file