Compare commits

...

3 commits

Author SHA1 Message Date
a4aabeaa14
Merge branch 'main' into highlight-reply
All checks were successful
ci/woodpecker/push/build-and-publish Pipeline was successful
ci/woodpecker/pr/build-and-publish Pipeline was successful
ci/woodpecker/pull_request_closed/build-and-publish Pipeline was successful
2025-08-04 03:58:23 +02:00
e92e1cde01
feat: highlight message user is actively replying to
All checks were successful
ci/woodpecker/push/build-and-publish Pipeline was successful
ci/woodpecker/pr/build-and-publish Pipeline was successful
2025-08-03 20:58:11 +02:00
c4a31276be
feat: add highlighting of reply when scrolled to 2025-08-03 20:57:55 +02:00
4 changed files with 29 additions and 2 deletions

View file

@ -290,3 +290,11 @@ function getDayDifference(date1: Date, date2: Date) {
padding-left: 1em;
}
</style>
<style>
.replying-to {
background-color: var(--primary-highlighted-color);
}
</style>

View file

@ -221,6 +221,10 @@ function sendMessage(e: Event) {
if (messageReply && messageReply.dataset.messageId) {
console.log("[MSG] message is a reply");
message.reply_to = messageReply.dataset.messageId;
const replyToMessage = document.querySelector(`.message[data-message-id='${message.reply_to}']`);
if (replyToMessage) {
replyToMessage.classList.remove("replying-to");
}
}
console.log("[MSG] sent message:", message);

View file

@ -46,11 +46,22 @@ onMounted(async () => {
function scrollToReply(e: MouseEvent) {
e.preventDefault();
console.log("clicked on reply box");
const reply = document.querySelector(`.message[data-message-id="${props.replyId}"]`);
if (reply) {
let replyId: string;
if (props.maxWidth == "reply") {
replyId = props.replyId;
} else {
replyId = props.id;
}
const reply = document.querySelector(`.message[data-message-id="${replyId}"]`);
if (reply instanceof HTMLDivElement) {
console.log("reply:", reply);
console.log("scrolling into view");
reply.scrollIntoView({ behavior: "smooth", block: "center" });
reply.style.transition = "background-color .3s";
reply.style.backgroundColor = "var(--primary-highlighted-color)";
setTimeout(() => {
reply.style.backgroundColor = "";
}, 1000);
}
}

View file

@ -10,5 +10,9 @@ export default (element: HTMLDivElement, props: MessageProps) => {
const messageReply = h(MessageReply, { author: getDisplayName(props.author), text: props.text || "", id: props.message.uuid, replyId: props.replyMessage?.uuid || element.dataset.messageId!, maxWidth: "full" });
messageBox.prepend(div);
render(messageReply, div);
const message = document.querySelector(`.message[data-message-id='${props.message.uuid}']`);
if (message) {
message.classList.add("replying-to");
}
}
}