From c0c3ee0189b807ab09a217a1c7482518c5ffd5ea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 09:36:25 -0400 Subject: [PATCH 01/47] fix(deps): update dependency ace-builds to v1.10.1 (#10840) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index fb2e2f8d1d..9c963160a0 100644 --- a/install/package.json +++ b/install/package.json @@ -30,7 +30,7 @@ "dependencies": { "@adactive/bootstrap-tagsinput": "0.8.2", "@isaacs/ttlcache": "1.2.0", - "ace-builds": "1.9.5", + "ace-builds": "1.10.1", "archiver": "5.3.1", "async": "3.2.4", "autoprefixer": "10.4.8", From 6687f49bda30b55742506e4efcb1b3178d22a85b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 09:51:49 -0400 Subject: [PATCH 02/47] fix(deps): update dependency jquery to v3.6.1 (#10868) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 9c963160a0..59c1ca9145 100644 --- a/install/package.json +++ b/install/package.json @@ -67,7 +67,7 @@ "helmet": "5.1.1", "html-to-text": "8.2.1", "ipaddr.js": "2.0.1", - "jquery": "3.6.0", + "jquery": "3.6.1", "jquery-deserialize": "2.0.0", "jquery-form": "4.3.0", "jquery-serializeobject": "1.0.0", From 8c680db5bd50d2f259e07aab8df93563535038d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 10:21:55 -0400 Subject: [PATCH 03/47] fix(deps): update dependency postcss to v8.4.16 (#10824) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 59c1ca9145..a4b8036269 100644 --- a/install/package.json +++ b/install/package.json @@ -109,7 +109,7 @@ "passport-local": "1.0.0", "pg": "8.7.3", "pg-cursor": "2.7.3", - "postcss": "8.4.14", + "postcss": "8.4.16", "postcss-clean": "1.2.0", "prompt": "1.3.0", "ioredis": "5.2.2", From cc6798bb1165b0047e2d20b90eb06686439cf1b0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 10:22:11 -0400 Subject: [PATCH 04/47] fix(deps): update dependency autoprefixer to v10.4.9 (#10879) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index a4b8036269..9abfd61c2c 100644 --- a/install/package.json +++ b/install/package.json @@ -33,7 +33,7 @@ "ace-builds": "1.10.1", "archiver": "5.3.1", "async": "3.2.4", - "autoprefixer": "10.4.8", + "autoprefixer": "10.4.9", "bcryptjs": "2.4.3", "benchpressjs": "2.4.3", "body-parser": "1.20.0", From 5583ab95622b5c3120d7f23c3d51fac7f28b5149 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 10:45:03 -0400 Subject: [PATCH 05/47] fix(deps): update dependency mongodb to v4.9.1 (#10880) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 9abfd61c2c..f7765d2730 100644 --- a/install/package.json +++ b/install/package.json @@ -82,7 +82,7 @@ "material-design-lite": "1.3.0", "mime": "3.0.0", "mkdirp": "1.0.4", - "mongodb": "4.9.0", + "mongodb": "4.9.1", "morgan": "1.10.0", "mousetrap": "1.6.5", "multiparty": "4.2.3", From 86b63fab9d3a785536506a957ef00c5ffac317a3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 10:46:09 -0400 Subject: [PATCH 06/47] fix(deps): update dependency pg-cursor to v2.7.4 (#10862) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index f7765d2730..e5ed4b442b 100644 --- a/install/package.json +++ b/install/package.json @@ -108,7 +108,7 @@ "passport-http-bearer": "1.0.1", "passport-local": "1.0.0", "pg": "8.7.3", - "pg-cursor": "2.7.3", + "pg-cursor": "2.7.4", "postcss": "8.4.16", "postcss-clean": "1.2.0", "prompt": "1.3.0", From 5e375e4af52dffe64106d5ac3da472002bbc3c35 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 10:49:07 -0400 Subject: [PATCH 07/47] fix(deps): update dependency ioredis to v5.2.3 (#10861) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index e5ed4b442b..adb435014f 100644 --- a/install/package.json +++ b/install/package.json @@ -112,7 +112,7 @@ "postcss": "8.4.16", "postcss-clean": "1.2.0", "prompt": "1.3.0", - "ioredis": "5.2.2", + "ioredis": "5.2.3", "request": "2.88.2", "request-promise-native": "1.0.9", "rimraf": "3.0.2", From 34d243e49b62ca2c08092b8c987664d4bd96eb18 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 10:49:30 -0400 Subject: [PATCH 08/47] fix(deps): update dependency nodebb-plugin-emoji to v4.0.5 (#10881) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index adb435014f..ebce07f59a 100644 --- a/install/package.json +++ b/install/package.json @@ -91,7 +91,7 @@ "nodebb-plugin-2factor": "5.0.2", "nodebb-plugin-composer-default": "9.2.0", "nodebb-plugin-dbsearch": "5.1.5", - "nodebb-plugin-emoji": "4.0.4", + "nodebb-plugin-emoji": "4.0.5", "nodebb-plugin-emoji-android": "3.0.0", "nodebb-plugin-markdown": "10.1.0", "nodebb-plugin-mentions": "3.0.11", From 01129a3994f7bd7ad32b0469f325590505f82774 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:11:31 -0400 Subject: [PATCH 09/47] fix(deps): update dependency pg to v8.8.0 (#10863) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index ebce07f59a..4ac19f7c0c 100644 --- a/install/package.json +++ b/install/package.json @@ -107,7 +107,7 @@ "passport": "0.6.0", "passport-http-bearer": "1.0.1", "passport-local": "1.0.0", - "pg": "8.7.3", + "pg": "8.8.0", "pg-cursor": "2.7.4", "postcss": "8.4.16", "postcss-clean": "1.2.0", From d911a1bfb666d77ef5f4c02858bd0e4e4978b9fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:11:49 -0400 Subject: [PATCH 10/47] fix(deps): update dependency winston to v3.8.2 (#10882) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 4ac19f7c0c..4e0ca3a2d9 100644 --- a/install/package.json +++ b/install/package.json @@ -138,7 +138,7 @@ "validator": "13.7.0", "webpack": "5.74.0", "webpack-merge": "5.8.0", - "winston": "3.8.1", + "winston": "3.8.2", "xml": "1.0.1", "xregexp": "5.1.1", "yargs": "17.5.1", From 0c2a88de06d192c038777e226b1fbd11f9618f7b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 11:38:41 -0400 Subject: [PATCH 11/47] fix(deps): update dependency autoprefixer to v10.4.10 (#10883) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 4e0ca3a2d9..e4cd3d1a6d 100644 --- a/install/package.json +++ b/install/package.json @@ -33,7 +33,7 @@ "ace-builds": "1.10.1", "archiver": "5.3.1", "async": "3.2.4", - "autoprefixer": "10.4.9", + "autoprefixer": "10.4.10", "bcryptjs": "2.4.3", "benchpressjs": "2.4.3", "body-parser": "1.20.0", From 0c6fb6e351d2acddf4f4520c50508a60f530df6b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 12:25:21 -0400 Subject: [PATCH 12/47] chore(deps): update dependency eslint to v8.23.1 (#10885) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index e4cd3d1a6d..237aa06cd8 100644 --- a/install/package.json +++ b/install/package.json @@ -149,7 +149,7 @@ "@commitlint/cli": "17.0.3", "@commitlint/config-angular": "17.0.3", "coveralls": "3.1.1", - "eslint": "8.22.0", + "eslint": "8.23.1", "eslint-config-nodebb": "0.1.1", "eslint-plugin-import": "2.26.0", "grunt": "1.5.3", From 335990beaeee14a74ce1a93c376e20e72f4d91e9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 12:26:18 -0400 Subject: [PATCH 13/47] fix(deps): update dependency nodebb-plugin-2factor to v5.1.0 (#10886) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 237aa06cd8..76e19cda19 100644 --- a/install/package.json +++ b/install/package.json @@ -88,7 +88,7 @@ "multiparty": "4.2.3", "@nodebb/bootswatch": "3.4.2", "nconf": "0.12.0", - "nodebb-plugin-2factor": "5.0.2", + "nodebb-plugin-2factor": "5.1.0", "nodebb-plugin-composer-default": "9.2.0", "nodebb-plugin-dbsearch": "5.1.5", "nodebb-plugin-emoji": "4.0.5", From 22f3d0bb4b73f57b931fcaaf7319a72aa3ffaa25 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 12:30:47 -0400 Subject: [PATCH 14/47] fix(deps): update socket.io packages to v4.5.2 (#10884) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 76e19cda19..b0d5832680 100644 --- a/install/package.json +++ b/install/package.json @@ -123,8 +123,8 @@ "sharp": "0.30.7", "sitemap": "7.1.1", "slideout": "1.0.1", - "socket.io": "4.5.1", - "socket.io-client": "4.5.1", + "socket.io": "4.5.2", + "socket.io-client": "4.5.2", "@socket.io/redis-adapter": "7.2.0", "sortablejs": "1.15.0", "spdx-license-list": "6.6.0", From c039a699bd7778a1e53a2fcf5af71be68dedd1ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 13 Sep 2022 12:36:13 -0400 Subject: [PATCH 15/47] sharp test fix --- test/uploads.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/uploads.js b/test/uploads.js index 8e851d153d..5be0818b5e 100644 --- a/test/uploads.js +++ b/test/uploads.js @@ -212,7 +212,7 @@ describe('Upload Controllers', () => { assert.ifError(err); assert.strictEqual(res.statusCode, 500); assert(body && body.status && body.status.message); - assert(body.status.message.startsWith('Input file has corrupt header: pngload: end of stream')); + assert.strictEqual(body.status.message, 'Input file contains unsupported image format'); done(); }); }); From 2836be5cfaa383c66fe80a12c044efe24f81d21b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Sep 2022 13:21:34 -0400 Subject: [PATCH 16/47] fix(deps): update dependency sharp to v0.31.0 (#10887) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index b0d5832680..22bf579efd 100644 --- a/install/package.json +++ b/install/package.json @@ -120,7 +120,7 @@ "sanitize-html": "2.7.1", "semver": "7.3.7", "serve-favicon": "2.5.0", - "sharp": "0.30.7", + "sharp": "0.31.0", "sitemap": "7.1.1", "slideout": "1.0.1", "socket.io": "4.5.2", From ebd7c05c4cc1e6c016e504e78dde71a9bf70527f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 14 Sep 2022 09:27:08 -0400 Subject: [PATCH 17/47] feat: paginate recentposts.rss and category/1/recentposts.rss --- src/categories/recentreplies.js | 12 ++++++++---- src/routes/feeds.js | 13 ++++++++++--- src/socket.io/categories.js | 2 +- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/categories/recentreplies.js b/src/categories/recentreplies.js index 0e5618b4fe..c7ab8e2fa7 100644 --- a/src/categories/recentreplies.js +++ b/src/categories/recentreplies.js @@ -1,6 +1,7 @@ 'use strict'; +const winston = require('winston'); const _ = require('lodash'); const db = require('../database'); @@ -11,11 +12,14 @@ const plugins = require('../plugins'); const batch = require('../batch'); module.exports = function (Categories) { - Categories.getRecentReplies = async function (cid, uid, count) { - if (!parseInt(count, 10)) { - return []; + Categories.getRecentReplies = async function (cid, uid, start, stop) { + // backwards compatibility, treat start as count + if (stop === undefined && start > 0) { + winston.warn('[Categories.getRecentReplies] 3 params deprecated please use Categories.getRecentReplies(cid, uid, start, stop)'); + stop = start - 1; + start = 0; } - let pids = await db.getSortedSetRevRange(`cid:${cid}:pids`, 0, count - 1); + let pids = await db.getSortedSetRevRange(`cid:${cid}:pids`, start, stop); pids = await privileges.posts.filter('topics:read', pids, uid); return await posts.getPostSummaryByPids(pids, uid, { stripTags: true }); }; diff --git a/src/routes/feeds.js b/src/routes/feeds.js index c3bda30473..fbd8de7072 100644 --- a/src/routes/feeds.js +++ b/src/routes/feeds.js @@ -307,7 +307,11 @@ async function generateForRecentPosts(req, res, next) { if (meta.config['feeds:disableRSS']) { return next(); } - const postData = await posts.getRecentPosts(req.uid, 0, 19, 'month'); + const page = parseInt(req.query.page, 10) || 1; + const postsPerPage = 20; + const start = Math.max(0, (page - 1) * postsPerPage); + const stop = start + postsPerPage - 1; + const postData = await posts.getRecentPosts(req.uid, start, stop, 'month'); const feed = generateForPostsFeed({ title: 'Recent Posts', description: 'A list of recent posts', @@ -323,11 +327,14 @@ async function generateForCategoryRecentPosts(req, res) { return controllers404.handle404(req, res); } const cid = req.params.category_id; - + const page = parseInt(req.query.page, 10) || 1; + const topicsPerPage = 20; + const start = Math.max(0, (page - 1) * topicsPerPage); + const stop = start + topicsPerPage - 1; const [userPrivileges, category, postData] = await Promise.all([ privileges.categories.get(cid, req.uid), categories.getCategoryData(cid), - categories.getRecentReplies(cid, req.uid || req.query.uid || 0, 20), + categories.getRecentReplies(cid, req.uid || req.query.uid || 0, start, stop), ]); if (!category) { diff --git a/src/socket.io/categories.js b/src/socket.io/categories.js index ad72658f70..0a90698115 100644 --- a/src/socket.io/categories.js +++ b/src/socket.io/categories.js @@ -10,7 +10,7 @@ const SocketCategories = module.exports; require('./categories/search')(SocketCategories); SocketCategories.getRecentReplies = async function (socket, cid) { - return await categories.getRecentReplies(cid, socket.uid, 4); + return await categories.getRecentReplies(cid, socket.uid, 0, 4); }; SocketCategories.get = async function (socket) { From d3e38df8ea7904ac5cbdf04e24ffcecc6104c91f Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 14 Sep 2022 13:19:06 -0400 Subject: [PATCH 18/47] fix: add back timeago to post history modal --- public/src/client/topic/diffs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/src/client/topic/diffs.js b/public/src/client/topic/diffs.js index f75375b195..ea492348cb 100644 --- a/public/src/client/topic/diffs.js +++ b/public/src/client/topic/diffs.js @@ -58,6 +58,7 @@ define('forum/topic/diffs', ['api', 'bootbox', 'alerts', 'forum/topic/images'], posts: [data], }, function ($html) { $postContainer.empty().append($html); + $postContainer.find('.timeago').timeago(); }); }).catch(alerts.error); }; From 0758655a36745385fd8d2093e6b8c106e00e4f31 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Sep 2022 15:33:15 -0400 Subject: [PATCH 19/47] fix(deps): update dependency autoprefixer to v10.4.11 (#10892) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 22bf579efd..fec6773bc1 100644 --- a/install/package.json +++ b/install/package.json @@ -33,7 +33,7 @@ "ace-builds": "1.10.1", "archiver": "5.3.1", "async": "3.2.4", - "autoprefixer": "10.4.10", + "autoprefixer": "10.4.11", "bcryptjs": "2.4.3", "benchpressjs": "2.4.3", "body-parser": "1.20.0", From ca92345c480de8be75355e25a5f1acd86062b719 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Thu, 15 Sep 2022 09:06:37 +0000 Subject: [PATCH 20/47] Latest translations and fallbacks --- public/language/zh-CN/admin/menu.json | 2 +- public/language/zh-CN/admin/settings/pagination.json | 2 +- public/language/zh-CN/global.json | 2 +- public/language/zh-CN/modules.json | 4 ++-- public/language/zh-CN/notifications.json | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index 8857255b41..2e456615c0 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -76,7 +76,7 @@ "logout": "登出", "view-forum": "查看论坛", - "search.placeholder": "Search settings", + "search.placeholder": "搜索设置", "search.no-results": "没有可用结果…", "search.search-forum": "搜索论坛为", "search.keep-typing": "输入更多以查看结果...", diff --git a/public/language/zh-CN/admin/settings/pagination.json b/public/language/zh-CN/admin/settings/pagination.json index 8269cbc4be..f3565fb555 100644 --- a/public/language/zh-CN/admin/settings/pagination.json +++ b/public/language/zh-CN/admin/settings/pagination.json @@ -1,7 +1,7 @@ { "pagination": "分页设置", "enable": "在主题和帖子使用分页替代无限滚动浏览。", - "posts": "Post Pagination", + "posts": "帖子分页", "topics": "话题分页", "posts-per-page": "每页帖子数", "max-posts-per-page": "每页最多帖子数", diff --git a/public/language/zh-CN/global.json b/public/language/zh-CN/global.json index f032d779d1..cd05e59b55 100644 --- a/public/language/zh-CN/global.json +++ b/public/language/zh-CN/global.json @@ -23,7 +23,7 @@ "close": "关闭", "pagination": "分页", "pagination.out_of": "%1 / %2", - "pagination.enter_index": "Go to post index", + "pagination.enter_index": "跳转到帖子", "header.admin": "管理", "header.categories": "版块", "header.recent": "最新", diff --git a/public/language/zh-CN/modules.json b/public/language/zh-CN/modules.json index d7684e6794..3dff397d9d 100644 --- a/public/language/zh-CN/modules.json +++ b/public/language/zh-CN/modules.json @@ -6,8 +6,8 @@ "chat.no_active": "暂无聊天", "chat.user_typing": "%1 正在输入……", "chat.user_has_messaged_you": "%1 向您发送了消息。", - "chat.see_all": "All chats", - "chat.mark_all_read": "Mark all read", + "chat.see_all": "全部对话", + "chat.mark_all_read": "标记全部已读", "chat.no-messages": "请选择接收人,以查看聊天消息历史", "chat.no-users-in-room": "此聊天室中没有用户", "chat.recent-chats": "最近聊天", diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json index ebb702d8ff..cfd4b7fd3d 100644 --- a/public/language/zh-CN/notifications.json +++ b/public/language/zh-CN/notifications.json @@ -1,8 +1,8 @@ { "title": "通知", "no_notifs": "您没有新的通知", - "see_all": "All notifications", - "mark_all_read": "Mark all read", + "see_all": "全部通知", + "mark_all_read": "标记全部已读", "back_to_home": "返回 %1", "outgoing_link": "站外链接", "outgoing_link_message": "您正在离开 %1", From bfeb03680a65254eaf2f39ada1f726e4f5686b3a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 09:58:04 -0400 Subject: [PATCH 21/47] fix(deps): update dependency sanitize-html to v2.7.2 (#10893) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index fec6773bc1..351628fd36 100644 --- a/install/package.json +++ b/install/package.json @@ -117,7 +117,7 @@ "request-promise-native": "1.0.9", "rimraf": "3.0.2", "rss": "1.2.2", - "sanitize-html": "2.7.1", + "sanitize-html": "2.7.2", "semver": "7.3.7", "serve-favicon": "2.5.0", "sharp": "0.31.0", From 5aa55d29f3bad686c7b3e8f2cff6d03ee42c42f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 10:11:47 -0400 Subject: [PATCH 22/47] chore(deps): update postgres docker tag to v14 (#10829) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 225615aa72..7254f19515 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -42,7 +42,7 @@ jobs: services: postgres: - image: 'postgres:10-alpine' + image: 'postgres:14-alpine' env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres From 3f30056a71c782dacc27a69d59aae6ece2a3f8a0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 11:06:32 -0400 Subject: [PATCH 23/47] chore(deps): update commitlint monorepo (#10888) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 351628fd36..dec986509d 100644 --- a/install/package.json +++ b/install/package.json @@ -146,8 +146,8 @@ }, "devDependencies": { "@apidevtools/swagger-parser": "10.0.3", - "@commitlint/cli": "17.0.3", - "@commitlint/config-angular": "17.0.3", + "@commitlint/cli": "17.1.2", + "@commitlint/config-angular": "17.1.0", "coveralls": "3.1.1", "eslint": "8.23.1", "eslint-config-nodebb": "0.1.1", From 8e2129f858052f0ba963f5eda10cb7eb771d6767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 15 Sep 2022 19:32:37 -0400 Subject: [PATCH 24/47] fix: #10896, unescape / in taskbar --- public/src/modules/taskbar.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/modules/taskbar.js b/public/src/modules/taskbar.js index 67b36d8156..9fa8fd0fb8 100644 --- a/public/src/modules/taskbar.js +++ b/public/src/modules/taskbar.js @@ -151,7 +151,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t const taskbarEl = $('
  • ') .addClass(data.options.className) - .html('' + + .html('' + (data.options.icon ? ' ' : '') + '' + title + '' + '') @@ -186,7 +186,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t element.find('i').attr('class', 'fa fa-' + value); break; case 'image': - element.find('a').css('background-image', value ? 'url("' + value + '")' : ''); + element.find('a').css('background-image', value ? 'url("' + value.replace(///g, '/') + '")' : ''); break; case 'background-color': element.find('a').css('background-color', value); From fe249fa57761fc3779d0869effde2b05b5682503 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 16 Sep 2022 11:44:34 -0400 Subject: [PATCH 25/47] fix: listen to -d flag on cli upgrade --- src/cli/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cli/index.js b/src/cli/index.js index 5c3c01fd88..81ad5c0b37 100644 --- a/src/cli/index.js +++ b/src/cli/index.js @@ -266,6 +266,10 @@ program ].join('\n')}`); }) .action((scripts, options) => { + if (program.opts().dev) { + process.env.NODE_ENV = 'development'; + global.env = 'development'; + } require('./upgrade').upgrade(scripts.length ? scripts : true, options); }); From 425bf87b075471d88aa8d0efdc06c58a689b6193 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Sep 2022 19:18:34 +0000 Subject: [PATCH 26/47] fix(deps): update dependency nodebb-theme-persona to v12.1.2 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index dec986509d..08f2f54be5 100644 --- a/install/package.json +++ b/install/package.json @@ -98,7 +98,7 @@ "nodebb-plugin-spam-be-gone": "1.0.0", "nodebb-rewards-essentials": "0.2.1", "nodebb-theme-lavender": "6.0.0", - "nodebb-theme-persona": "12.1.1", + "nodebb-theme-persona": "12.1.2", "nodebb-theme-slick": "2.0.2", "nodebb-theme-vanilla": "12.1.18", "nodebb-widget-essentials": "6.0.0", From 02fe6875034ab97ac4788c170f9fcf4058c3d7fa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Sep 2022 01:46:17 +0000 Subject: [PATCH 27/47] fix(deps): update dependency nodebb-plugin-2factor to v5.1.1 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 08f2f54be5..ec3a82838a 100644 --- a/install/package.json +++ b/install/package.json @@ -88,7 +88,7 @@ "multiparty": "4.2.3", "@nodebb/bootswatch": "3.4.2", "nconf": "0.12.0", - "nodebb-plugin-2factor": "5.1.0", + "nodebb-plugin-2factor": "5.1.1", "nodebb-plugin-composer-default": "9.2.0", "nodebb-plugin-dbsearch": "5.1.5", "nodebb-plugin-emoji": "4.0.5", From b5dd89e1c06c5d54afddd9f4e2b3c62e12dd6ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 16 Sep 2022 22:16:08 -0400 Subject: [PATCH 28/47] feat: store topic title and tags in diffs (#10900) * feat: store topic title and tags in diffs allow restoring post diff if tags didn't change * test: fix tests, fast computer problems --- public/src/client/topic/events.js | 15 +--------- src/posts/diffs.js | 47 +++++++++++++++++++++++-------- src/posts/edit.js | 28 ++++++++++++------ src/posts/summary.js | 10 +++++-- test/api.js | 3 ++ test/posts.js | 1 + 6 files changed, 68 insertions(+), 36 deletions(-) diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js index fe08787232..53037e8bfa 100644 --- a/public/src/client/topic/events.js +++ b/public/src/client/topic/events.js @@ -158,7 +158,7 @@ define('forum/topic/events', [ hooks.fire('action:posts.edited', data); } - if (data.topic.tags && tagsUpdated(data.topic.tags)) { + if (data.topic.tags && data.topic.tagsupdated) { Benchpress.render('partials/topic/tags', { tags: data.topic.tags }).then(function (html) { const tags = $('.tags'); @@ -171,19 +171,6 @@ define('forum/topic/events', [ postTools.removeMenu(components.get('post', 'pid', data.post.pid)); } - function tagsUpdated(tags) { - if (tags.length !== $('.tags').first().children().length) { - return true; - } - - for (let i = 0; i < tags.length; i += 1) { - if (!$('.tags .tag-item[data-tag="' + tags[i].value + '"]').length) { - return true; - } - } - return false; - } - function onPostPurged(postData) { if (!postData || parseInt(postData.tid, 10) !== parseInt(ajaxify.data.tid, 10)) { return; diff --git a/src/posts/diffs.js b/src/posts/diffs.js index 9d541fe0aa..eb687195d3 100644 --- a/src/posts/diffs.js +++ b/src/posts/diffs.js @@ -7,7 +7,7 @@ const db = require('../database'); const meta = require('../meta'); const plugins = require('../plugins'); const translator = require('../translator'); - +const topics = require('../topics'); module.exports = function (Posts) { const Diffs = {}; @@ -38,16 +38,24 @@ module.exports = function (Posts) { }; Diffs.save = async function (data) { - const { pid, uid, oldContent, newContent, edited } = data; + const { pid, uid, oldContent, newContent, edited, topic } = data; const editTimestamp = edited || Date.now(); - const patch = diff.createPatch('', newContent, oldContent); + const diffData = { + uid: uid, + pid: pid, + }; + if (oldContent !== newContent) { + diffData.patch = diff.createPatch('', newContent, oldContent); + } + if (topic.renamed) { + diffData.title = topic.oldTitle; + } + if (topic.tagsupdated && Array.isArray(topic.oldTags)) { + diffData.tags = topic.oldTags.map(tag => tag && tag.value).filter(Boolean).join(','); + } await Promise.all([ db.listPrepend(`post:${pid}:diffs`, editTimestamp), - db.setObject(`diff:${pid}.${editTimestamp}`, { - uid: uid, - pid: pid, - patch: patch, - }), + db.setObject(`diff:${pid}.${editTimestamp}`, diffData), ]); }; @@ -71,6 +79,8 @@ module.exports = function (Posts) { content: post.content, req: req, timestamp: since, + title: post.topic.title, + tags: post.topic.tags.map(tag => tag.value), }); }; @@ -130,6 +140,16 @@ module.exports = function (Posts) { // Replace content with re-constructed content from that point in time post[0].content = diffs.reduce(applyPatch, validator.unescape(post[0].content)); + const titleDiffs = diffs.filter(d => d.hasOwnProperty('title') && d.title); + if (titleDiffs.length && post[0].topic) { + post[0].topic.title = validator.unescape(String(titleDiffs[titleDiffs.length - 1].title)); + } + const tagDiffs = diffs.filter(d => d.hasOwnProperty('tags') && d.tags); + if (tagDiffs.length && post[0].topic) { + const tags = tagDiffs[tagDiffs.length - 1].tags.split(',').map(tag => ({ value: tag })); + post[0].topic.tags = await topics.getTagData(tags); + } + return post[0]; } @@ -144,9 +164,12 @@ module.exports = function (Posts) { } function applyPatch(content, aDiff) { - const result = diff.applyPatch(content, aDiff.patch, { - fuzzFactor: 1, - }); - return typeof result === 'string' ? result : content; + if (aDiff && aDiff.patch) { + const result = diff.applyPatch(content, aDiff.patch, { + fuzzFactor: 1, + }); + return typeof result === 'string' ? result : content; + } + return content; } }; diff --git a/src/posts/edit.js b/src/posts/edit.js index f325e23269..453a10e9dd 100644 --- a/src/posts/edit.js +++ b/src/posts/edit.js @@ -29,7 +29,9 @@ module.exports = function (Posts) { throw new Error('[[error:no-post]]'); } - const topicData = await topics.getTopicFields(postData.tid, ['cid', 'mainPid', 'title', 'timestamp', 'scheduled', 'slug']); + const topicData = await topics.getTopicFields(postData.tid, [ + 'cid', 'mainPid', 'title', 'timestamp', 'scheduled', 'slug', 'tags', + ]); await scheduledTopicCheck(data, topicData); @@ -53,7 +55,10 @@ module.exports = function (Posts) { ]); await Posts.setPostFields(data.pid, result.post); - const contentChanged = data.content !== oldContent; + const contentChanged = data.content !== oldContent || + topic.renamed || + topic.tagsupdated; + if (meta.config.enablePostHistory === 1 && contentChanged) { await Posts.diffs.save({ pid: data.pid, @@ -61,6 +66,7 @@ module.exports = function (Posts) { oldContent: oldContent, newContent: data.content, edited: editPostData.edited, + topic, }); } await Posts.uploads.sync(data.pid); @@ -109,6 +115,7 @@ module.exports = function (Posts) { title: validator.escape(String(topicData.title)), isMainPost: false, renamed: false, + tagsupdated: false, }; } @@ -124,15 +131,16 @@ module.exports = function (Posts) { newTopicData.slug = `${tid}/${slugify(title) || 'topic'}`; } - data.tags = data.tags || []; + const tagsupdated = Array.isArray(data.tags) && + !_.isEqual(data.tags, topicData.tags.map(tag => tag.value)); - if (data.tags.length) { + if (tagsupdated) { const canTag = await privileges.categories.can('topics:tag', topicData.cid, data.uid); if (!canTag) { throw new Error('[[error:no-privileges]]'); } + await topics.validateTags(data.tags, topicData.cid, data.uid, tid); } - await topics.validateTags(data.tags, topicData.cid, data.uid, tid); const results = await plugins.hooks.fire('filter:topic.edit', { req: data.req, @@ -140,7 +148,9 @@ module.exports = function (Posts) { data: data, }); await db.setObject(`topic:${tid}`, results.topic); - await topics.updateTopicTags(tid, data.tags); + if (tagsupdated) { + await topics.updateTopicTags(tid, data.tags); + } const tags = await topics.getTopicTagsObjects(tid); if (rescheduling(data, topicData)) { @@ -149,7 +159,7 @@ module.exports = function (Posts) { newTopicData.tags = data.tags; newTopicData.oldTitle = topicData.title; - const renamed = translator.escape(validator.escape(String(title))) !== topicData.title; + const renamed = title && translator.escape(validator.escape(String(title))) !== topicData.title; plugins.hooks.fire('action:topic.edit', { topic: newTopicData, uid: data.uid }); return { tid: tid, @@ -160,8 +170,10 @@ module.exports = function (Posts) { slug: newTopicData.slug || topicData.slug, isMainPost: true, renamed: renamed, - rescheduled: rescheduling(data, topicData), + tagsupdated: tagsupdated, tags: tags, + oldTags: topicData.tags, + rescheduled: rescheduling(data, topicData), }; } diff --git a/src/posts/summary.js b/src/posts/summary.js index cefbb8cc15..82468a17d5 100644 --- a/src/posts/summary.js +++ b/src/posts/summary.js @@ -76,9 +76,15 @@ module.exports = function (Posts) { } async function getTopicAndCategories(tids) { - const topicsData = await topics.getTopicsFields(tids, ['uid', 'tid', 'title', 'cid', 'slug', 'deleted', 'scheduled', 'postcount', 'mainPid', 'teaserPid']); + const topicsData = await topics.getTopicsFields(tids, [ + 'uid', 'tid', 'title', 'cid', 'tags', 'slug', + 'deleted', 'scheduled', 'postcount', 'mainPid', 'teaserPid', + ]); const cids = _.uniq(topicsData.map(topic => topic && topic.cid)); - const categoriesData = await categories.getCategoriesFields(cids, ['cid', 'name', 'icon', 'slug', 'parentCid', 'bgColor', 'color', 'backgroundImage', 'imageClass']); + const categoriesData = await categories.getCategoriesFields(cids, [ + 'cid', 'name', 'icon', 'slug', 'parentCid', + 'bgColor', 'color', 'backgroundImage', 'imageClass', + ]); return { topics: topicsData, categories: categoriesData }; } diff --git a/test/api.js b/test/api.js index ad3bcadfad..ab8094cc76 100644 --- a/test/api.js +++ b/test/api.js @@ -194,8 +194,11 @@ describe('API', async () => { const socketAdmin = require('../src/socket.io/admin'); // export data for admin user await socketUser.exportProfile({ uid: adminUid }, { uid: adminUid }); + await wait(2000); await socketUser.exportPosts({ uid: adminUid }, { uid: adminUid }); + await wait(2000); await socketUser.exportUploads({ uid: adminUid }, { uid: adminUid }); + await wait(2000); await socketAdmin.user.exportUsersCSV({ uid: adminUid }, {}); // wait for export child process to complete await wait(5000); diff --git a/test/posts.js b/test/posts.js index 4858167336..f40af0c0d8 100644 --- a/test/posts.js +++ b/test/posts.js @@ -425,6 +425,7 @@ describe('Post\'s', () => { cid: cid, title: 'topic to edit', content: 'A post to edit', + tags: ['nodebb'], }, (err, data) => { assert.ifError(err); pid = data.postData.pid; From 0debc51b8fe7a55a02f1120bbc2ba2c2b243b57f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Sep 2022 01:41:53 -0400 Subject: [PATCH 29/47] fix(deps): update dependency nodebb-theme-persona to v12.1.3 (#10903) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index ec3a82838a..c787d1fb43 100644 --- a/install/package.json +++ b/install/package.json @@ -98,7 +98,7 @@ "nodebb-plugin-spam-be-gone": "1.0.0", "nodebb-rewards-essentials": "0.2.1", "nodebb-theme-lavender": "6.0.0", - "nodebb-theme-persona": "12.1.2", + "nodebb-theme-persona": "12.1.3", "nodebb-theme-slick": "2.0.2", "nodebb-theme-vanilla": "12.1.18", "nodebb-widget-essentials": "6.0.0", From 3700174c628786a4e9d828adb6c37c889451be6b Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 15 Sep 2022 15:18:46 -0400 Subject: [PATCH 30/47] refactor: added new ajaxify method .cleanup, called before ajaxify.start. --- public/src/ajaxify.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 1ae52a9cb1..d7fcac6eb5 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -44,9 +44,7 @@ ajaxify.widgets = { render: render }; quiet = true; } - app.leaveCurrentRoom(); - - $(window).off('scroll'); + ajaxify.cleanup(url, ajaxify.data.template.name); if ($('#content').hasClass('ajaxifying') && apiXHR) { apiXHR.abort(); @@ -456,6 +454,12 @@ ajaxify.widgets = { render: render }; }); }; + ajaxify.cleanup = (url, tpl_url) => { + app.leaveCurrentRoom(); + $(window).off('scroll'); + hooks.fire('action:ajaxify.cleanup', { url, tpl_url }); + }; + require(['translator', 'benchpress'], function (translator, Benchpress) { translator.translate('[[error:no-connection]]'); translator.translate('[[error:socket-reconnect-failed]]'); From 5b9de0e5215e0ea0276a11786120660963a68810 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 15 Sep 2022 15:27:02 -0400 Subject: [PATCH 31/47] fix: be tidier and explicitly clean up ctrl-f hotkey on topic page --- public/src/client/topic.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index f9a8ca05b3..8f052bab2b 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -76,11 +76,13 @@ define('forum/topic', [ if (config.topicSearchEnabled) { require(['mousetrap', 'search'], function (mousetrap, search) { mousetrap.bind(['command+f', 'ctrl+f'], function (e) { - if (ajaxify.data.template.topic) { - e.preventDefault(); - $('#search-fields input').val('in:topic-' + ajaxify.data.tid + ' '); - search.showAndFocusInput(); - } + e.preventDefault(); + $('#search-fields input').val('in:topic-' + ajaxify.data.tid + ' '); + search.showAndFocusInput(); + }); + + hooks.onPage('action:ajaxify.cleanup', () => { + mousetrap.unbind(['command+f', 'ctrl+f']); }); }); } From cf4f5447bb168b9bac32ac7ddbe567f273966b88 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 10:08:18 -0400 Subject: [PATCH 32/47] fix: #10906, allow `middleware.checkAccountPermissions` to be called with either uid or userslug in params Previously, the middleware only worked with userslug params --- src/middleware/user.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/middleware/user.js b/src/middleware/user.js index db3a97ef08..c3871bd023 100644 --- a/src/middleware/user.js +++ b/src/middleware/user.js @@ -165,7 +165,11 @@ module.exports = function (middleware) { return controllers.helpers.notAllowed(req, res); } - const uid = await user.getUidByUserslug(req.params.userslug); + if (!['uid', 'userslug'].some(param => req.params.hasOwnProperty(param))) { + return controllers.helpers.notAllowed(req, res); + } + + const uid = req.params.uid || await user.getUidByUserslug(req.params.userslug); let allowed = await privileges.users.canEdit(req.uid, uid); if (allowed) { return next(); From cf6e8101e86e0d5f91b491421e6477a2b74d3a81 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Mon, 19 Sep 2022 16:23:58 +0000 Subject: [PATCH 33/47] chore: incrementing version number - v2.5.3 --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 3a1c865b5e..18bc65668e 100644 --- a/install/package.json +++ b/install/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "2.5.2", + "version": "2.5.3", "homepage": "http://www.nodebb.org", "repository": { "type": "git", @@ -186,4 +186,4 @@ "url": "https://github.com/barisusakli" } ] -} +} \ No newline at end of file From fdf240f6516a0b4a72ca0de24e143c316bcf0184 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Mon, 19 Sep 2022 16:23:59 +0000 Subject: [PATCH 34/47] chore: update changelog for v2.5.3 --- CHANGELOG.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 312cd0d726..fd4ac1c692 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,45 @@ +#### v2.5.3 (2022-09-19) + +##### Chores + +* remove duplicate version increment lines in changelog (5dbcfef9) +* bring back treding plugins (8aa1596d) +* incrementing version number - v2.5.2 (babcd17e) +* update changelog for v2.5.2 (84b6a7c7) +* incrementing version number - v2.5.1 (ce3aa950) +* incrementing version number - v2.5.0 (01d276cb) +* incrementing version number - v2.4.5 (dd3e1a28) +* incrementing version number - v2.4.4 (d5525c87) +* incrementing version number - v2.4.3 (9c647c6c) +* incrementing version number - v2.4.2 (3aa7b855) +* incrementing version number - v2.4.1 (60cbd148) +* incrementing version number - v2.4.0 (4834cde3) +* incrementing version number - v2.3.1 (d2425942) +* incrementing version number - v2.3.0 (046ea120) + +##### New Features + +* store topic title and tags in diffs (#10900) (b5dd89e1) + +##### Bug Fixes + +* #10906, allow `middleware.checkAccountPermissions` to be called with either uid or userslug in params (cf4f5447) +* #10896, unescape / in taskbar (8e2129f8) +* add back timeago to post history modal (d3e38df8) +* **deps:** bump composer-default to v9.1.1 (1d80a07e) + +##### Other Changes + +* fix lint (3d5a6b39) + +##### Performance Improvements + +* disable trending plugins, too slow due to nbbpm (b392450c) + +##### Tests + +* add back /admin/extend/plugins test (1c9c39a8) + #### v2.5.2 (2022-09-04) ##### Chores From bbe7f7795f75ef752eb46c3934d674adf99c1694 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Sep 2022 13:00:03 -0400 Subject: [PATCH 35/47] fix(deps): update dependency mongodb to v4.10.0 (#10908) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index c787d1fb43..5b2d631e6d 100644 --- a/install/package.json +++ b/install/package.json @@ -82,7 +82,7 @@ "material-design-lite": "1.3.0", "mime": "3.0.0", "mkdirp": "1.0.4", - "mongodb": "4.9.1", + "mongodb": "4.10.0", "morgan": "1.10.0", "mousetrap": "1.6.5", "multiparty": "4.2.3", From 9f9a835fcbc5310582aa46b68f001568aab8da62 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 11:06:16 -0400 Subject: [PATCH 36/47] feat: a couple utility methods in navigator module to get and set count and index --- public/src/modules/navigator.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 824f55434a..2dcbdb6aec 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -47,7 +47,6 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct thumb = $('.scroller-thumb'); thumbText = thumb.find('.thumb-text'); - $(window).off('scroll', navigator.delayedUpdate).on('scroll', navigator.delayedUpdate); paginationBlockEl.find('.dropdown-menu').off('click').on('click', function (e) { @@ -331,6 +330,8 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct return parts[1] + '/' + parts[2] + '/' + parts[3] + (index ? '/' + index : ''); } + navigator.getCount = () => count; + navigator.setCount = function (value) { value = parseInt(value, 10); if (value === count) { @@ -440,6 +441,13 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct toggle(!!count); }; + navigator.getIndex = () => index; + + navigator.setIndex = (newIndex) => { + index = newIndex + 1; + navigator.updateTextAndProgressBar(); + }; + navigator.updateTextAndProgressBar = function () { if (!utils.isNumber(index)) { return; From fa643eb80893e3e5d51dab8eea8f06f9c9c7e93d Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 11:09:22 -0400 Subject: [PATCH 37/47] fix: race condition where `navigator.update` was called when it should not be --- public/src/modules/navigator.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 2dcbdb6aec..e6933999c7 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -581,9 +581,9 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct function animateScroll() { function reenableScroll() { // Re-enable onScroll behaviour - $(window).on('scroll', navigator.delayedUpdate); - const scrollToRect = scrollTo.get(0).getBoundingClientRect(); - navigator.update(scrollToRect.top); + setTimeout(() => { // fixes race condition from jQuery — onAnimateComplete called too quickly + $(window).on('scroll', navigator.delayedUpdate); + }, 50); } function onAnimateComplete() { if (done) { From b7287c1eb8aa5175ac065cf3f957579508454715 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 11:10:35 -0400 Subject: [PATCH 38/47] fix: do not call `navigator.update()` when `scrollToElement` is explicitly passed a new index value --- public/src/modules/navigator.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index e6933999c7..2fe68c1d2b 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -552,15 +552,15 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct navigator.scrollToPostIndex = function (postIndex, highlight, duration) { const scrollTo = components.get('post', 'index', postIndex); - navigator.scrollToElement(scrollTo, highlight, duration); + navigator.scrollToElement(scrollTo, highlight, duration, postIndex); }; navigator.scrollToTopicIndex = function (topicIndex, highlight, duration) { const scrollTo = $('[component="category/topic"][data-index="' + topicIndex + '"]'); - navigator.scrollToElement(scrollTo, highlight, duration); + navigator.scrollToElement(scrollTo, highlight, duration, topicIndex); }; - navigator.scrollToElement = function (scrollTo, highlight, duration) { + navigator.scrollToElement = function (scrollTo, highlight, duration, newIndex = null) { if (!scrollTo.length) { navigator.scrollActive = false; return; @@ -594,8 +594,13 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct navigator.scrollActive = false; highlightPost(); - $('body').scrollTop($('body').scrollTop() - 1); - $('html').scrollTop($('html').scrollTop() - 1); + + const scrollToRect = scrollTo.get(0).getBoundingClientRect(); + if (!newIndex) { + navigator.update(scrollToRect.top); + } else { + navigator.setIndex(newIndex); + } } let scrollTop = 0; From aeb94c32b939d467e8c315c14bec5c9826452009 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 11:11:27 -0400 Subject: [PATCH 39/47] feat: j and k hotkeys in topic to navigate through it quickly --- public/src/client/topic.js | 40 ++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 8f052bab2b..961fcd74c3 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -73,19 +73,39 @@ define('forum/topic', [ }; function handleTopicSearch() { - if (config.topicSearchEnabled) { - require(['mousetrap', 'search'], function (mousetrap, search) { - mousetrap.bind(['command+f', 'ctrl+f'], function (e) { - e.preventDefault(); - $('#search-fields input').val('in:topic-' + ajaxify.data.tid + ' '); - search.showAndFocusInput(); - }); + require(['mousetrap'], (mousetrap) => { + if (config.topicSearchEnabled) { + require(['search'], function (search) { + mousetrap.bind(['command+f', 'ctrl+f'], function (e) { + e.preventDefault(); + $('#search-fields input').val('in:topic-' + ajaxify.data.tid + ' '); + search.showAndFocusInput(); + }); - hooks.onPage('action:ajaxify.cleanup', () => { - mousetrap.unbind(['command+f', 'ctrl+f']); + hooks.onPage('action:ajaxify.cleanup', () => { + mousetrap.unbind(['command+f', 'ctrl+f']); + }); }); + } + + mousetrap.bind('j', () => { + const index = navigator.getIndex(); + const count = navigator.getCount(); + if (index === count) { + return; + } + + navigator.scrollToIndex(index, true, 0); }); - } + + mousetrap.bind('k', () => { + const index = navigator.getIndex(); + if (index === 1) { + return; + } + navigator.scrollToIndex(index - 2, true, 0); + }); + }); } Topic.toTop = function () { From 664bc5f54de79fb71ba9f4026c0be5b376231ecf Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 13:57:25 -0400 Subject: [PATCH 40/47] fix: update nav thumb on setIndex call (thx @barisusakli) --- public/src/modules/navigator.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 2fe68c1d2b..0b55e8ee4b 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -446,6 +446,7 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct navigator.setIndex = (newIndex) => { index = newIndex + 1; navigator.updateTextAndProgressBar(); + setThumbToIndex(index); }; navigator.updateTextAndProgressBar = function () { From 135fe55bed88eab8d6caba7495879d859f397708 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 14:27:35 -0400 Subject: [PATCH 41/47] feat: client-side hooks for navigator scroll action --- public/src/modules/navigator.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 0b55e8ee4b..3d3e904c7f 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -561,12 +561,14 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct navigator.scrollToElement(scrollTo, highlight, duration, topicIndex); }; - navigator.scrollToElement = function (scrollTo, highlight, duration, newIndex = null) { + navigator.scrollToElement = async (scrollTo, highlight, duration, newIndex = null) => { if (!scrollTo.length) { navigator.scrollActive = false; return; } + await hooks.fire('filter:navigator.scroll', { scrollTo, highlight, duration, newIndex }); + const postHeight = scrollTo.outerHeight(true); const navbarHeight = components.get('navbar').outerHeight(true); const topicHeaderHeight = $('.topic-header').outerHeight(true) || 0; @@ -584,6 +586,8 @@ define('navigator', ['forum/pagination', 'components', 'hooks', 'alerts'], funct // Re-enable onScroll behaviour setTimeout(() => { // fixes race condition from jQuery — onAnimateComplete called too quickly $(window).on('scroll', navigator.delayedUpdate); + + hooks.fire('action:navigator.scrolled', { scrollTo, highlight, duration, newIndex }); }, 50); } function onAnimateComplete() { From 27c80d3945c58ce7084796f78647f39bf8553953 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 14:30:21 -0400 Subject: [PATCH 42/47] fix(deps): bump persona, #10907 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 5b2d631e6d..0632a8ca99 100644 --- a/install/package.json +++ b/install/package.json @@ -98,7 +98,7 @@ "nodebb-plugin-spam-be-gone": "1.0.0", "nodebb-rewards-essentials": "0.2.1", "nodebb-theme-lavender": "6.0.0", - "nodebb-theme-persona": "12.1.3", + "nodebb-theme-persona": "12.1.4", "nodebb-theme-slick": "2.0.2", "nodebb-theme-vanilla": "12.1.18", "nodebb-widget-essentials": "6.0.0", From 846eda0af6b977b7bbd99010782286c56cc6a60d Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 19 Sep 2022 14:55:55 -0400 Subject: [PATCH 43/47] fix(deps): bump persona #10907 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 0632a8ca99..8a971950d2 100644 --- a/install/package.json +++ b/install/package.json @@ -98,7 +98,7 @@ "nodebb-plugin-spam-be-gone": "1.0.0", "nodebb-rewards-essentials": "0.2.1", "nodebb-theme-lavender": "6.0.0", - "nodebb-theme-persona": "12.1.4", + "nodebb-theme-persona": "12.1.5", "nodebb-theme-slick": "2.0.2", "nodebb-theme-vanilla": "12.1.18", "nodebb-widget-essentials": "6.0.0", From f971385bbc5a020158443b2a3549585172d46953 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Sep 2022 13:20:15 -0400 Subject: [PATCH 44/47] fix(deps): update dependency compare-versions to v5 (#10890) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 8a971950d2..1089bdb509 100644 --- a/install/package.json +++ b/install/package.json @@ -45,7 +45,7 @@ "clipboard": "2.0.11", "colors": "1.4.0", "commander": "9.4.0", - "compare-versions": "4.1.4", + "compare-versions": "5.0.1", "compression": "1.7.4", "connect-flash": "0.1.1", "connect-mongo": "4.6.0", From 5429487110a6d22c502b0237716787d239ad2099 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Sep 2022 20:38:54 -0400 Subject: [PATCH 45/47] fix(deps): update dependency autoprefixer to v10.4.12 (#10911) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index c6a6bd716f..fb2fcb61a0 100644 --- a/install/package.json +++ b/install/package.json @@ -33,7 +33,7 @@ "ace-builds": "1.10.1", "archiver": "5.3.1", "async": "3.2.4", - "autoprefixer": "10.4.11", + "autoprefixer": "10.4.12", "bcryptjs": "2.4.3", "benchpressjs": "2.4.3", "body-parser": "1.20.0", From d900fd1718ced495f6562037456c19ad95aa653d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Sep 2022 20:39:12 -0400 Subject: [PATCH 46/47] fix(deps): update dependency ace-builds to v1.11.0 (#10909) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index fb2fcb61a0..83024982db 100644 --- a/install/package.json +++ b/install/package.json @@ -30,7 +30,7 @@ "dependencies": { "@adactive/bootstrap-tagsinput": "0.8.2", "@isaacs/ttlcache": "1.2.0", - "ace-builds": "1.10.1", + "ace-builds": "1.11.0", "archiver": "5.3.1", "async": "3.2.4", "autoprefixer": "10.4.12", From 53d47a58f6e79c87d2aa81cf887782ee6e80c7d1 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 21 Sep 2022 11:56:58 -0400 Subject: [PATCH 47/47] fix: use `--omit=dev` flag for npm instead of `--production` --- src/cli/package-install.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/package-install.js b/src/cli/package-install.js index b3b5544bb4..eea93e5d9e 100644 --- a/src/cli/package-install.js +++ b/src/cli/package-install.js @@ -120,7 +120,7 @@ pkgInstall.installAll = () => { command = `cnpm install ${prod ? ' --production' : ''}`; break; default: - command += prod ? ' --production' : ''; + command += prod ? ' --omit=dev' : ''; break; } }