From 52e42685e8c87ae8be88488b6f1e15c3a7881099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 23 Mar 2026 11:24:05 -0400 Subject: [PATCH 1/5] fix: key name --- src/user/delete.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user/delete.js b/src/user/delete.js index 3de2127ed0..5c15c5c660 100644 --- a/src/user/delete.js +++ b/src/user/delete.js @@ -134,7 +134,7 @@ module.exports = function (User) { `uid:${uid}:flag:pids`, `uid:${uid}:sessions`, `uid:${uid}:shares`, - `uid:${uid}:profile:images`, + `uid:${uid}:profile:pictures`, `invitation:uid:${uid}`, ]; From bd0157c3ebca8e6fa4573f89e2dc4747c510d28d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 24 Mar 2026 10:05:52 -0400 Subject: [PATCH 2/5] allow different clam-fade-xx values like clamp-fade-4 vs clamp-fade-sm-4 --- public/src/client/category.js | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/public/src/client/category.js b/public/src/client/category.js index 1e950e8983..3e86df0ae0 100644 --- a/public/src/client/category.js +++ b/public/src/client/category.js @@ -115,14 +115,9 @@ define('forum/category', [ } function handleDescription() { - const fadeEl = document.querySelector(`.description.clamp-fade-sm-4`); - if (!fadeEl) { - return; - } - - fadeEl.addEventListener('click', () => { - const state = fadeEl.classList.contains('line-clamp-4'); - fadeEl.classList.toggle('line-clamp-4', !state); + const fadeEl = $(`.description[class*="clamp-fade-"]`); + fadeEl.on('click', function () { + fadeEl.toggleClass('line-clamp-4'); }); } From 9b885162508249e726dec31b730adf70932abf41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 24 Mar 2026 10:17:19 -0400 Subject: [PATCH 3/5] refactor: work with different line-clamp values --- public/src/client/category.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/public/src/client/category.js b/public/src/client/category.js index 3e86df0ae0..abcaed35a6 100644 --- a/public/src/client/category.js +++ b/public/src/client/category.js @@ -117,7 +117,18 @@ define('forum/category', [ function handleDescription() { const fadeEl = $(`.description[class*="clamp-fade-"]`); fadeEl.on('click', function () { - fadeEl.toggleClass('line-clamp-4'); + const $this = $(this); + let clampClass = $this.data('clampClass'); + if (!clampClass) { + const match = $this.attr('class').match(/line-clamp-(\S+)/); + if (match && match[1]) { + clampClass = `line-clamp-${match[1]}`; + fadeEl.data('clampClass', clampClass); + } + } + if (clampClass) { + fadeEl.toggleClass(clampClass); + } }); } From a10471fce766c3c070a60b3d2290ada3dcf66281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Tue, 24 Mar 2026 12:43:57 -0400 Subject: [PATCH 4/5] fix: #14121, use normalizedPath when uploading add test for normalize --- src/user/picture.js | 2 +- test/user.js | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/user/picture.js b/src/user/picture.js index db135b463f..fe8a99c9a8 100644 --- a/src/user/picture.js +++ b/src/user/picture.js @@ -143,7 +143,7 @@ module.exports = function (User) { const filename = generateProfileImageFilename(updateUid, extension); const uploadedImage = await image.uploadImage(filename, `profile/uid-${updateUid}`, { uid: updateUid, - path: picture.path, + path: normalizedPath, name: 'profileAvatar', }); diff --git a/test/user.js b/test/user.js index f6619bd651..cd0ba94e57 100644 --- a/test/user.js +++ b/test/user.js @@ -1144,6 +1144,30 @@ describe('User', () => { }); }); + it('should normalize uploaded image to png', async () => { + const oldValue = meta.config['profile:convertProfileImageToPNG']; + meta.config['profile:convertProfileImageToPNG'] = 1; + + const uid = await User.create({ username: 'pngnormalize', password: '123456' }); + const { jar, csrf_token } = await helpers.loginUser('pngnormalize', '123456'); + const pathToJpeg = path.join(__dirname, '../test/files/normalise.jpg'); + + const { response } = await helpers.uploadFile( + `${nconf.get('url')}/api/user/pngnormalize/uploadpicture`, + pathToJpeg, { }, jar, csrf_token + ); + assert.strictEqual(response.statusCode, 200); + const picture = await db.getObjectField(`user:${uid}`, 'picture'); + const uploadedPath = path.join( + nconf.get('upload_path'), `${picture.replace(nconf.get('upload_url'), '')}` + ); + const sharp = require('sharp'); + const metadata = await sharp(uploadedPath).metadata(); + assert.strictEqual(metadata.format, 'png'); + + meta.config['profile:convertProfileImageToPNG'] = oldValue; + }); + it('should not allow image data with bad MIME type to be passed in', (done) => { User.uploadCroppedPicture({ callerUid: uid, From 72f48fd9c47eaddfacd85d5ad963236190270278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 25 Mar 2026 10:21:24 -0400 Subject: [PATCH 5/5] fix: #14123, aria-hidden fixes add aria-labels --- install/package.json | 2 +- src/views/admin/extend/plugins.tpl | 2 +- src/views/admin/footer.tpl | 2 +- src/views/admin/manage/tags.tpl | 4 ++-- src/views/admin/partials/create_group_modal.tpl | 4 ++-- src/views/chat.tpl | 4 ++-- src/views/modals/crop_picture.tpl | 6 +++--- src/views/modals/flag.tpl | 4 ++-- src/views/modals/upload-file.tpl | 6 +++--- src/views/modals/upload-picture-from-url.tpl | 6 +++--- src/views/partials/reconnect-alert.tpl | 2 +- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/install/package.json b/install/package.json index 9e90dc0dac..47294dcd3e 100644 --- a/install/package.json +++ b/install/package.json @@ -108,7 +108,7 @@ "nodebb-plugin-spam-be-gone": "2.3.2", "nodebb-plugin-web-push": "0.7.7", "nodebb-rewards-essentials": "1.0.2", - "nodebb-theme-harmony": "2.2.61", + "nodebb-theme-harmony": "2.2.62", "nodebb-theme-lavender": "7.1.21", "nodebb-theme-peace": "2.2.57", "nodebb-theme-persona": "14.2.33", diff --git a/src/views/admin/extend/plugins.tpl b/src/views/admin/extend/plugins.tpl index c43e286411..34f2de1bfe 100644 --- a/src/views/admin/extend/plugins.tpl +++ b/src/views/admin/extend/plugins.tpl @@ -125,7 +125,7 @@