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;