From 1d9bbb8ddd0485070214b8858110b44db121d9fd Mon Sep 17 00:00:00 2001 From: JC Brand Date: Mon, 3 Jun 2019 21:53:19 +0200 Subject: [PATCH] Message display improvements * Checkmark and edit modal button are now on the right * Instead of showing checkmarks for MUC messages, we now show them as light grey before MUC reflection * Simplify message markup by requiring less `if` statements --- sass/_messages.scss | 19 +++++++++++++++++-- spec/messages.js | 15 +++++++++------ src/converse-message-view.js | 1 + src/headless/converse-chatboxes.js | 2 +- src/headless/converse-muc.js | 5 ++--- src/templates/message.html | 24 ++++++++++++------------ 6 files changed, 42 insertions(+), 24 deletions(-) diff --git a/sass/_messages.scss b/sass/_messages.scss index c077b2cc5..c28c5846b 100644 --- a/sass/_messages.scss +++ b/sass/_messages.scss @@ -130,7 +130,21 @@ margin-left: 0.5rem; width: calc(100% - var(--message-avatar-width)); } + + .chat-msg__content--me { + .chat-msg__body--groupchat { + .chat-msg__text { + color: var(--subdued-color); + } + &.chat-msg__body--delayed .chat-msg__text, + &.chat-msg__body--received .chat-msg__text { + color: var(--message-text-color); + } + } + } + .chat-msg__content--action { + width: 100%; margin-left: 0; } @@ -164,8 +178,8 @@ } .chat-msg__text { - padding: 0; color: var(--message-text-color); + padding: 0; width: 100%; white-space: pre-wrap; a { @@ -255,7 +269,7 @@ } &.chat-msg--action { .chat-msg__content { - flex-wrap: wrap; + flex-wrap: nowrap; flex-direction: row; justify-content: flex-start; } @@ -286,6 +300,7 @@ } .chat-msg__content { margin-left: 2.75rem; + width: 100%; } } diff --git a/spec/messages.js b/spec/messages.js index ad6c51f0e..2c83e8632 100644 --- a/spec/messages.js +++ b/spec/messages.js @@ -2301,7 +2301,7 @@ expect(view.model.messages.last().get('affiliation')).toBe('owner'); expect(view.model.messages.last().get('role')).toBe('moderator'); expect(view.el.querySelectorAll('.chat-msg').length).toBe(1); - expect(sizzle('.chat-msg__author', view.el).pop().classList.value.trim()).toBe('chat-msg__author chat-msg__me moderator'); + expect(sizzle('.chat-msg__author', view.el).pop().classList.value.trim()).toBe('chat-msg__author moderator'); let presence = $pres({ to:'romeo@montague.lit/orchard', @@ -2328,7 +2328,7 @@ expect(view.model.messages.last().get('affiliation')).toBe('member'); expect(view.model.messages.last().get('role')).toBe('participant'); expect(view.el.querySelectorAll('.chat-msg').length).toBe(2); - expect(sizzle('.chat-msg__author', view.el).pop().classList.value.trim()).toBe('chat-msg__author chat-msg__me participant'); + expect(sizzle('.chat-msg__author', view.el).pop().classList.value.trim()).toBe('chat-msg__author participant'); presence = $pres({ to:'romeo@montague.lit/orchard', @@ -2348,7 +2348,7 @@ expect(view.model.messages.last().get('affiliation')).toBe('owner'); expect(view.model.messages.last().get('role')).toBe('moderator'); expect(view.el.querySelectorAll('.chat-msg').length).toBe(3); - expect(sizzle('.chat-msg__author', view.el).pop().classList.value.trim()).toBe('chat-msg__author chat-msg__me moderator'); + expect(sizzle('.chat-msg__author', view.el).pop().classList.value.trim()).toBe('chat-msg__author moderator'); done(); })); @@ -2562,21 +2562,24 @@ keyCode: 13 // Enter }); await new Promise((resolve, reject) => view.once('messageInserted', resolve)); + expect(view.el.querySelectorAll('.chat-msg__body.chat-msg__body--received').length).toBe(0); + const msg_obj = view.model.messages.at(0); const stanza = u.toStanza(` - ${msg_obj.get('message')} + ${msg_obj.get('message')} `); await view.model.onMessage(stanza); - await test_utils.waitUntil(() => view.el.querySelectorAll('.chat-msg__receipt').length, 500); - expect(view.el.querySelectorAll('.chat-msg__receipt').length).toBe(1); + await test_utils.waitUntil(() => view.el.querySelectorAll('.chat-msg__body.chat-msg__body--received').length, 500); + expect(view.el.querySelectorAll('.chat-msg__receipt').length).toBe(0); + expect(view.el.querySelectorAll('.chat-msg__body.chat-msg__body--received').length).toBe(1); expect(view.model.messages.length).toBe(1); const message = view.model.messages.at(0); diff --git a/src/converse-message-view.js b/src/converse-message-view.js index 8de88da1e..c0f0174bc 100644 --- a/src/converse-message-view.js +++ b/src/converse-message-view.js @@ -164,6 +164,7 @@ converse.plugins.add('converse-message-view', { Object.assign( this.model.toJSON(), { '__': __, + 'is_groupchat_message': this.model.get('type') === 'groupchat', 'is_me_message': is_me_message, 'roles': roles, 'pretty_time': time.format(_converse.time_format), diff --git a/src/headless/converse-chatboxes.js b/src/headless/converse-chatboxes.js index b3f3477e2..cc4e533a5 100644 --- a/src/headless/converse-chatboxes.js +++ b/src/headless/converse-chatboxes.js @@ -397,7 +397,7 @@ converse.plugins.add('converse-chatboxes', { // Overridden in converse-muc and converse-mam const attrs = this.getUpdatedMessageAttributes(message, stanza); if (attrs) { - message.save(attrs, {'patch': true}); + message.save(attrs); } }, diff --git a/src/headless/converse-muc.js b/src/headless/converse-muc.js index 274da9f05..777b7de90 100644 --- a/src/headless/converse-muc.js +++ b/src/headless/converse-muc.js @@ -1308,9 +1308,8 @@ converse.plugins.add('converse-muc', { */ async onMessage (stanza) { this.fetchFeaturesIfConfigurationChanged(stanza); - - const original_stanza = stanza, - forwarded = sizzle(`forwarded[xmlns="${Strophe.NS.FORWARD}"]`, stanza).pop(); + const original_stanza = stanza; + const forwarded = sizzle(`forwarded[xmlns="${Strophe.NS.FORWARD}"]`, stanza).pop(); if (forwarded) { stanza = forwarded.querySelector('message'); } diff --git a/src/templates/message.html b/src/templates/message.html index 73e588c4f..892cc40d9 100644 --- a/src/templates/message.html +++ b/src/templates/message.html @@ -3,20 +3,19 @@ {[ if (o.type !== 'headline' && !o.is_me_message) { ]} {[ } ]} -
+
{[ if (o.is_me_message) { ]}{[ } ]} - {[ if (o.is_me_message) { ]}**{[ }; ]}{{{o.username}}} + {[ if (o.is_me_message) { ]}**{[ }; ]}{{{o.username}}} {[ if (!o.is_me_message) { ]} {[o.roles.forEach(function (role) { ]} {{{role}}} {[ }); ]} {[ } ]} {[ if (o.is_encrypted) { ]}{[ } ]} - {[ if (!o.is_me_message) { ]}
{[ } ]} - {[ if (o.received && !o.is_me_message) { ]} {[ } ]} - {[ if (o.edited) { ]} {[ } ]} - {[ if (!o.is_me_message) { ]}
{[ } ]} +
+ +
{[ if (o.is_spoiler) { ]}
{{{o.spoiler_hint}}} @@ -30,13 +29,14 @@ {[ if (o.is_single_emoji) { ]} chat-msg__text--larger{[ } ]} {[ if (o.is_spoiler) { ]} spoiler collapsed{[ } ]}">
- {[ if (!o.is_me_message) { ]}
{[ } ]} - {[ if (o.type !== 'headline' && !o.is_me_message && o.sender === 'me') { ]} -
-
+ {[ if (o.received && !o.is_me_message && !o.is_groupchat_message) { ]} {[ } ]} + {[ if (o.edited) { ]} {[ } ]} + {[ if (o.type !== 'headline' && o.sender === 'me') { ]} +
+ +
{[ } ]} - - {[ if (!o.is_me_message) { ]}
{[ } ]} +