diff --git a/install/package.json b/install/package.json
index ce15106ad3..757acc7b0e 100644
--- a/install/package.json
+++ b/install/package.json
@@ -97,13 +97,13 @@
"multer": "2.0.2",
"nconf": "0.13.0",
"nodebb-plugin-2factor": "7.6.1",
- "nodebb-plugin-composer-default": "10.3.5",
+ "nodebb-plugin-composer-default": "10.3.6",
"nodebb-plugin-dbsearch": "6.3.5",
"nodebb-plugin-emoji": "6.0.5",
"nodebb-plugin-emoji-android": "4.1.1",
"nodebb-plugin-link-preview": "2.2.2",
"nodebb-plugin-markdown": "13.2.3",
- "nodebb-plugin-mentions": "4.8.6",
+ "nodebb-plugin-mentions": "4.8.7",
"nodebb-plugin-spam-be-gone": "2.3.2",
"nodebb-plugin-web-push": "0.7.6",
"nodebb-rewards-essentials": "1.0.2",
diff --git a/public/language/en-GB/modules.json b/public/language/en-GB/modules.json
index f4b473992a..44e435ae33 100644
--- a/public/language/en-GB/modules.json
+++ b/public/language/en-GB/modules.json
@@ -84,7 +84,7 @@
"composer.hide-preview": "Hide Preview",
"composer.help": "Help",
"composer.user-said-in": "%1 said in %2:",
- "composer.user-said": "%1 said:",
+ "composer.user-said": "%1 [said](%2):",
"composer.discard": "Are you sure you wish to discard this post?",
"composer.submit-and-lock": "Submit and Lock",
"composer.toggle-dropdown": "Toggle Dropdown",
diff --git a/public/language/en-GB/notifications.json b/public/language/en-GB/notifications.json
index 065cd6aeed..1a14907ee0 100644
--- a/public/language/en-GB/notifications.json
+++ b/public/language/en-GB/notifications.json
@@ -36,33 +36,33 @@
"user-posted-in-public-room-dual": "%1 and %2 wrote in %4",
"user-posted-in-public-room-triple": "%1, %2 and %3 wrote in %5",
"user-posted-in-public-room-multiple": "%1, %2 and %3 others wrote in %5",
- "upvoted-your-post-in": "%1 has upvoted your post in %2.",
- "upvoted-your-post-in-dual": "%1 and %2 have upvoted your post in %3.",
- "upvoted-your-post-in-triple": "%1, %2 and %3 have upvoted your post in %4.",
- "upvoted-your-post-in-multiple": "%1, %2 and %3 others have upvoted your post in %4.",
+ "upvoted-your-post-in": "%1 upvoted
%2",
+ "upvoted-your-post-in-dual": "%1 and %2 upvoted
%3",
+ "upvoted-your-post-in-triple": "%1, %2 and %3 upvoted
%4",
+ "upvoted-your-post-in-multiple": "%1, %2 and %3 others upvoted
%4.",
"moved-your-post": "%1 has moved your post to %2",
"moved-your-topic": "%1 has moved %2",
- "user-flagged-post-in": "%1 flagged a post in %2",
- "user-flagged-post-in-dual": "%1 and %2 flagged a post in %3",
- "user-flagged-post-in-triple": "%1, %2 and %3 flagged a post in %4",
- "user-flagged-post-in-multiple": "%1, %2 and %3 others flagged a post in %4",
+ "user-flagged-post-in": "%1 flagged a post
%2",
+ "user-flagged-post-in-dual": "%1 and %2 flagged a post
%3",
+ "user-flagged-post-in-triple": "%1, %2 and %3 flagged a post
%4",
+ "user-flagged-post-in-multiple": "%1, %2 and %3 others flagged a post
%4",
"user-flagged-user": "%1 flagged a user profile (%2)",
"user-flagged-user-dual": "%1 and %2 flagged a user profile (%3)",
"user-flagged-user-triple": "%1, %2 and %3 flagged a user profile (%4)",
"user-flagged-user-multiple": "%1, %2 and %3 others flagged a user profile (%4)",
- "user-posted-to" : "%1 has posted a reply to: %2",
- "user-posted-to-dual" : "%1 and %2 have posted replies to: %3",
- "user-posted-to-triple" : "%1, %2 and %3 have posted replies to: %4",
- "user-posted-to-multiple" : "%1, %2 and %3 others have posted replies to: %4",
- "user-posted-topic": "%1 has posted a new topic: %2",
- "user-edited-post" : "%1 has edited a post in %2",
+ "user-posted-to" : "%1 replied in
%2",
+ "user-posted-to-dual" : "%1 and %2 replied in
%3",
+ "user-posted-to-triple" : "%1, %2 and %3 replied in
%4",
+ "user-posted-to-multiple" : "%1, %2 and %3 others replied in
%4",
+ "user-posted-topic": "%1 posted
%2",
+ "user-edited-post" : "%1 edited a post in
%2",
- "user-posted-topic-with-tag": "%1 has posted %2 (tagged %3)",
- "user-posted-topic-with-tag-dual": "%1 has posted %2 (tagged %3 and %4)",
- "user-posted-topic-with-tag-triple": "%1 has posted %2 (tagged %3, %4, and %5)",
- "user-posted-topic-with-tag-multiple": "%1 has posted %2 (tagged %3)",
+ "user-posted-topic-with-tag": "%1 posted
%2 (tagged %3)",
+ "user-posted-topic-with-tag-dual": "%1 posted
%2 (tagged %3 and %4)",
+ "user-posted-topic-with-tag-triple": "%1 posted
%2 (tagged %3, %4, and %5)",
+ "user-posted-topic-with-tag-multiple": "%1 posted
%2 (tagged %3)",
- "user-posted-topic-in-category": "%1 has posted a new topic in %2",
+ "user-posted-topic-in-category": "%1 posted
%2 (category %3)",
"user-started-following-you": "%1 started following you.",
"user-started-following-you-dual": "%1 and %2 started following you.",
diff --git a/public/scss/generics.scss b/public/scss/generics.scss
index 0938613ec9..0e8d33371b 100644
--- a/public/scss/generics.scss
+++ b/public/scss/generics.scss
@@ -145,6 +145,18 @@ blockquote {
}
}
+.hidden-blockquote {
+ blockquote {
+ display: none;
+ }
+}
+
+.hidden-leading-br {
+ > br:first-child {
+ display: none;
+ }
+}
+
// some classes that are used commonly in themes from bs3
.hidden, .hide {
display: none!important;
diff --git a/src/categories/topics.js b/src/categories/topics.js
index 5169998910..633779ef89 100644
--- a/src/categories/topics.js
+++ b/src/categories/topics.js
@@ -237,10 +237,14 @@ module.exports = function (Categories) {
}
const { displayname } = postData.user;
- const categoryName = await Categories.getCategoryField(cid, 'name');
+ const [categoryName, title] = await Promise.all([
+ Categories.getCategoryField(cid, 'name'),
+ topics.getTopicField(postData.topic.tid, 'title'),
+ ]);
+
const notifBase = 'notifications:user-posted-topic-in-category';
- const bodyShort = translator.compile(notifBase, displayname, categoryName);
+ const bodyShort = translator.compile(notifBase, displayname, title, categoryName);
const notification = await notifications.create({
type: 'new-topic-in-category',
diff --git a/src/flags.js b/src/flags.js
index 435bc10c42..0ff9152978 100644
--- a/src/flags.js
+++ b/src/flags.js
@@ -934,7 +934,7 @@ Flags.notify = async function (flagObj, uid, notifySelf = false) {
notifObj = await notifications.create({
type: 'new-post-flag',
bodyShort: `[[notifications:user-flagged-post-in, ${displayname}, ${titleEscaped}]]`,
- bodyLong: await plugins.hooks.fire('filter:parse.raw', String(flagObj.description || '')),
+ bodyLong: String(flagObj.target?.content || ''),
pid: flagObj.targetId,
path: `/flags/${flagObj.flagId}`,
nid: `flag:post:${flagObj.targetId}:${uid}`,
diff --git a/src/posts/edit.js b/src/posts/edit.js
index 0b8b6ff009..3d6d729351 100644
--- a/src/posts/edit.js
+++ b/src/posts/edit.js
@@ -84,20 +84,25 @@ module.exports = function (Posts) {
returnPostData.oldContent = oldContent;
returnPostData.newContent = data.content;
- await topics.notifyFollowers(returnPostData, data.uid, {
- type: 'post-edit',
- bodyShort: translator.compile('notifications:user-edited-post', editor.username, topic.title),
- nid: `edit_post:${data.pid}:uid:${data.uid}`,
- });
await topics.syncBacklinks(returnPostData);
- plugins.hooks.fire('action:post.edit', { post: { ...returnPostData, _activitypub }, data: data, uid: data.uid });
+ plugins.hooks.fire('action:post.edit', {
+ post: { ...returnPostData, _activitypub },
+ data: data,
+ uid: data.uid,
+ });
Posts.clearCachedPost(String(postData.pid));
pubsub.publish('post:edit', String(postData.pid));
await Posts.parsePost(returnPostData);
+ await topics.notifyFollowers(returnPostData, data.uid, {
+ type: 'post-edit',
+ bodyShort: translator.compile('notifications:user-edited-post', editor.username, topic.title),
+ nid: `edit_post:${data.pid}:uid:${data.uid}`,
+ });
+
return {
topic: topic,
editor: editor,