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,