Skip to content

Commit dfd2209

Browse files
committed
Add spacing for author change messages and update message element creation to support different balloon corner raduis depending on the position of the balloon.
1 parent 4ba81e3 commit dfd2209

File tree

1 file changed

+76
-2
lines changed

1 file changed

+76
-2
lines changed

Resources/Views/main.leaf

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,14 +240,18 @@
240240

241241
.message {
242242
display: flex;
243-
margin-bottom: 3px;
243+
margin-bottom: 2px;
244244
align-items: flex-start;
245245
}
246246

247247
.message.own {
248248
flex-direction: row-reverse;
249249
}
250250

251+
.message.author-change {
252+
margin-top: 10px;
253+
}
254+
251255
.message-avatar {
252256
width: 32px;
253257
height: 32px;
@@ -312,6 +316,41 @@
312316
color: white;
313317
}
314318

319+
/* Message grouping styles - inward corners always 16px */
320+
/* Regular messages (left side) - top-right, bottom-right always 16px */
321+
.message.group-first .message-content {
322+
border-radius: 16px 16px 16px 3px;
323+
}
324+
325+
.message.group-middle .message-content {
326+
border-radius: 3px 16px 16px 3px;
327+
}
328+
329+
.message.group-last .message-content {
330+
border-radius: 3px 16px 16px 16px;
331+
}
332+
333+
.message.group-single .message-content {
334+
border-radius: 16px;
335+
}
336+
337+
/* Own messages (right side) - top-left, bottom-left always 16px */
338+
.message.own.group-first .message-content {
339+
border-radius: 16px 16px 3px 16px;
340+
}
341+
342+
.message.own.group-middle .message-content {
343+
border-radius: 16px 3px 3px 16px;
344+
}
345+
346+
.message.own.group-last .message-content {
347+
border-radius: 16px 3px 16px 16px;
348+
}
349+
350+
.message.own.group-single .message-content {
351+
border-radius: 16px;
352+
}
353+
315354
.message-text {
316355
font-size: 0.9rem;
317356
line-height: 1.4;
@@ -674,7 +713,32 @@
674713
}
675714

676715
// Reverse messages to show oldest first
677-
messages.reverse().forEach(message => {
716+
messages.reverse();
717+
718+
// Group messages by author and determine position in group
719+
const messagesWithGrouping = messages.map((message, index) => {
720+
const prevMessage = index > 0 ? messages[index - 1] : null;
721+
const nextMessage = index < messages.length - 1 ? messages[index + 1] : null;
722+
723+
const sameAsPrev = prevMessage && prevMessage.authorId === message.authorId;
724+
const sameAsNext = nextMessage && nextMessage.authorId === message.authorId;
725+
const isAuthorChange = !sameAsPrev;
726+
727+
let groupPosition;
728+
if (!sameAsPrev && !sameAsNext) {
729+
groupPosition = 'single';
730+
} else if (!sameAsPrev && sameAsNext) {
731+
groupPosition = 'first';
732+
} else if (sameAsPrev && sameAsNext) {
733+
groupPosition = 'middle';
734+
} else if (sameAsPrev && !sameAsNext) {
735+
groupPosition = 'last';
736+
}
737+
738+
return { ...message, groupPosition, isAuthorChange };
739+
});
740+
741+
messagesWithGrouping.forEach(message => {
678742
const messageElement = createMessageElement(message);
679743
messagesContainer.appendChild(messageElement);
680744
});
@@ -693,6 +757,16 @@
693757
messageDiv.classList.add('own');
694758
}
695759

760+
// Add grouping class for corner radius styling
761+
if (message.groupPosition) {
762+
messageDiv.classList.add(`group-${message.groupPosition}`);
763+
}
764+
765+
// Add author-change class for additional spacing
766+
if (message.isAuthorChange) {
767+
messageDiv.classList.add('author-change');
768+
}
769+
696770
// Find author info
697771
const chat = chats.find(c => c.id === currentChatId);
698772
const author = chat?.allUsers.find(user => user.id === message.authorId);

0 commit comments

Comments
 (0)