diff --git a/src/chatview_webkit.cpp b/src/chatview_webkit.cpp
index 4fd4d54f5..220307ea0 100644
--- a/src/chatview_webkit.cpp
+++ b/src/chatview_webkit.cpp
@@ -312,7 +312,12 @@ class ChatViewJSObject : public ChatViewThemeSession {
Q_INVOKABLE void deleteMessage(const QString &messageId) { qDebug() << "deleteMessage" << messageId; }
- Q_INVOKABLE void replyMessage(const QString &messageId) { qDebug() << "replyMessage" << messageId; }
+ Q_INVOKABLE void replyMessage(const QString &messageId, const QString "edHtml)
+ {
+ auto plainText = TextUtil::rich2plain(quotedHtml);
+ emit _view->quote(plainText);
+ qDebug() << "replyMessage" << messageId;
+ }
Q_INVOKABLE void copyMessage(const QString &messageId) { qDebug() << "copyMessage" << messageId; }
diff --git a/themes/chatview/psi/bubble/index.html b/themes/chatview/psi/bubble/index.html
index e247157da..a1e886485 100644
--- a/themes/chatview/psi/bubble/index.html
+++ b/themes/chatview/psi/bubble/index.html
@@ -29,7 +29,7 @@
%time%
%quoteTxt%
-%message%
+%message%
%next%`;
shared.initTheme({
@@ -47,7 +47,7 @@
dateFormat : "HH:mm",
proxy : function() { //optional
if (shared.cdata.mtype == "reactions") {
- render_reactions(shared.cdata);
+ renderReactions(shared.cdata);
return false;
}
},
@@ -62,6 +62,13 @@
}
return classes.join(" ");
},
+ msgtextClasses: function() {
+ let classes = ["msgtext"];
+ if (shared.cdata.alert) {
+ classes.push("alert");
+ }
+ return classes.join(" ");
+ },
nickControl: function() {
return shared.cdata.local? "": `
Reply
`;
},
@@ -86,10 +93,23 @@
bq.addEventListener("click", () => { quoteMsg.scrollIntoView({ "behavior": "smooth", "block": "center" }) });
}
}
+ var replyBtn = el.getElementsByClassName("reply").item(0);
+ if (replyBtn) {
+ replyBtn.addEventListener("click", ()=>{onReplyClicked(el);});
+ }
+ var nickEl = el.getElementsByClassName("nick").item(0);
+ if (nickEl) {
+ nickEl.addEventListener("click", ()=>{shared.session.nickInsertClick(nickEl.textContent);});
+ }
}
});
-function setup_context_menu() {
+function onReplyClicked(el) {
+ var textEl = el.getElementsByClassName("msgtext").item(0);
+ shared.session.replyMessage(el.id, textEl.innerHTML);
+}
+
+function setupContextMenu() {
chatMenu.addItemProvider((event) => {
const isNick = event.target.className == "nick";
let msgNode;
@@ -113,7 +133,7 @@
} else {
items = [
{ text: "Delete", action: ()=>{ shared.session.deleteMessage(msgNode.id); } },
- { text: "Reply", action: ()=>{ shared.session.replyMessage(msgNode.id); } },
+ { text: "Reply", action: ()=>{ onReplyClicked(msgNode); } },
{ text: "Forward", action: ()=>{ shared.session.forwardMessage(msgNode.id); } },
{ text: "Copy", action: ()=>{ shared.session.copyMessage(msgNode.id); } }
]
@@ -125,7 +145,7 @@
}
-function render_reactions(event) {
+function renderReactions(event) {
const msg = document.getElementById(event.messageid);
if (!msg) {
return;
@@ -154,7 +174,9 @@
const nicks = value.nicks.sort().filter((x, i, a) => !i || x != a[i-1]);
const reaction = document.createElement("span");
reaction.innerHTML = `${nicks.length} ${value.text}`;
- reaction.title = nicks.join("\n");
+ if (shared.isMuc) {
+ reaction.title = nicks.join("\n");
+ }
reaction.addEventListener("click", (event)=>{
if (event.target.nodeName == "EM") {
shared.session.react(msg.id, event.target.textContent);
@@ -166,7 +188,7 @@
}
}
-setup_context_menu();
+setupContextMenu();
applyPsiSettings();
@@ -262,6 +284,10 @@
clip: rect(0.6rem, 3rem, 1.5rem, 2rem);
}
+.msg:hover::before {
+ border-color: #ffffff;
+}
+
.mymsg {
margin-left: 0.5rem;
margin-right: 3rem;