Merge branch 'master' into develop

This commit is contained in:
Barış Soner Uşaklı
2025-03-22 12:03:52 -04:00
8 changed files with 135 additions and 74 deletions

View File

@@ -1,3 +1,103 @@
#### v4.2.0 (2025-03-19)
##### Chores
* **deps:**
* update commitlint monorepo to v19.8.0 (#13244) (ee3c0bf4)
* update dependency lint-staged to v15.5.0 (#13245) (f4fe3f5f)
* update dependency sass-embedded to v1.86.0 (#13251) (3bb861ae)
* up widgets (ed57f896)
* incrementing version number - v4.1.1 (b2afbb16)
* update changelog for v4.1.1 (2c3f8561)
* add missing file to az lang (d7116adc)
* language labels for az/pl (61d17c95)
* alphabetize transifex config file languages (b7bb35f8)
* incrementing version number - v4.1.0 (36c80850)
* incrementing version number - v4.0.6 (4a52fb2e)
* incrementing version number - v4.0.5 (1792a62b)
* incrementing version number - v4.0.4 (b1125cce)
* incrementing version number - v4.0.3 (2b65c735)
* incrementing version number - v4.0.2 (73fe5fcf)
* incrementing version number - v4.0.1 (a461b758)
* incrementing version number - v4.0.0 (c1eaee45)
* **i18n:**
* fallback strings for new resources: nodebb.admin-settings-email (866cd539)
* fallback strings for new resources: nodebb.error (b4dfd7fe)
* fallback strings for new resources: nodebb.admin-settings-chat (2f957655)
* fallback strings for new resources: nodebb.user (78a2c087)
* fallback strings for new resources: nodebb.admin-manage-categories (c3993018)
* fallback strings for new resources: nodebb.admin-manage-categories (efdb416c)
* fallback strings for new resources: nodebb.category (8314d8ba)
##### Documentation Changes
* openapi schema for admin/extend/plugins (f2a16422)
* update openapi schema from 6c26d9f4a3c398b4d7add0a2d9c91685a0336a74 (128dd2d3)
##### New Features
* 1b12 category announce on post move to a new tid, #13236 (254f0738)
* add Azerbaijani localisations, təşəkkür edirəm! (825e4c70)
* if an incoming remote message is too long, don't create the room, but notify the local recipients instead (885b83e5)
* new ACP config for max length of remote chat messages, #13174 (81509b13)
* add `federatedDescription` property to a category. (dfabadbe)
* add link to category edit page in acp category sidebar (fa8216f2)
* add additional logic that checks whether a cid follows the activity actor, and asserts note into that category if so (3589c570)
* move category sidebar to ACP partial, add sidebar to category-federation (dc2dcaf1)
* add line to description exposing a category's handle if accessible by fediverse pseudo-user, closes #13126 (6c26d9f4)
* call announceObject on topic fork, #13215 (e3edfef8)
##### Bug Fixes
* wrong property name used (08796a0a)
* #13254, configurable ap content prune (80e03c85)
* only 1b12 announce topic fork if OP is local, fix race condition in tests (945617cb)
* bug where remote post was attempted to be announced on post move (291af926)
* handling of `href` in remote object attachments, #13169 (44354dac)
* #13100, direct access to a tag page no longer excludes cid -1 (14fd33ce)
* expose remote url in user object (78c9239b)
* hide disable and purge buttons from category-federation.tpl (43248578)
* show 'copy settings from' button in acp category sidebar only on category.tpl (1f6871e5)
* improper cc and object fields in announceObject (deb5ee5e)
* move AP send logging earlier (dca3c35d)
* #13224, handle note attributedTo when it is of type object (d9483347)
* allow actor assertion of loopback actors depending on ACP setting (73aaa990)
* **deps:**
* update dependency mongodb to v6.15.0 (#13253) (1c23d0cf)
* update dependency pg to v8.14.1 (#13247) (4d6d71d8)
* update dependency nodebb-widget-essentials to v7.0.36 (#13250) (dbd0fd22)
* update dependency sass to v1.86.0 (#13252) (a1465268)
* update dependency esbuild to v0.25.1 (#13243) (ce3bb8b5)
* update dependency ioredis to v5.6.0 (#13246) (b96f532b)
* update dependency connect-redis to v8.0.2 (#13242) (e90a8b26)
* update dependency autoprefixer to v10.4.21 (#13241) (4e69ed56)
* update dependency pg-cursor to v2.13.1 (#13248) (92727549)
* update fontsource monorepo to v5.2.5 (#13226) (8ca1d6e6)
* update dependency mongodb to v6.14.2 (#13229) (b39e4d19)
* update dependency terser-webpack-plugin to v5.3.14 (#13230) (7b40e210)
* update dependency mongodb to v6.14.1 (#13225) (a58af228)
* update dependency tough-cookie to v5.1.2 (#13217) (e19109ad)
* update dependency mongodb to v6.14.0 (#13214) (ad680d6a)
* update dependency terser-webpack-plugin to v5.3.12 (#13213) (4c22af8c)
* update dependency cron to v4.1.0 (#13200) (f56838a3)
##### Refactors
* remove announceObject in favour of feps.announce, added create activity mock to support (74443c3b)
* move all input note normalization into helper method, have assertPrivate mock a message object (with said normalization) before sending message (4ec7552c)
##### Tests
* add url/statusCode to failing test (8982923e)
* fix remoteUrl property generation, tests for topic moving (0e1006fb)
* fix actor tests (537880d2)
* openapi schema for remoteUrl (fc64e89f)
* add failing test for #13215 (feb94215)
* adjust test runner detection in AP code (7ceb6d69)
* new test file for feps (e510e826)
* log outgoing AP messages for local test runner (6e872b5f)
* allow ap/notes tests to be run in isolation (98aafaaf)
#### v4.1.1 (2025-03-12)
##### Chores

View File

@@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
"version": "4.1.1",
"version": "4.2.0",
"homepage": "https://www.nodebb.org",
"repository": {
"type": "git",
@@ -200,4 +200,4 @@
"url": "https://github.com/barisusakli"
}
]
}
}

View File

@@ -1,59 +1,17 @@
.picture-switcher {
h4 {
line-height: 46px;
margin: 0;
}
.modal-body .btn {
padding: 10px 5px;
font-size: 13px;
}
label {
vertical-align: top;
line-height: 26px;
> input[type="radio"] {
display: none;
&:checked {
+ span:before {
border-radius: 50%;
border: 2px solid $primary;
position: relative;
top: -4px;
left: -4px;
}
}
&[value="transparent"] {
&:checked + span:before {
padding-top: 2px;
padding-left: 2px;
}
+ span:before {
content: '\f05e';
font-family: FontAwesome;
color: $gray-200;
font-size: 28px;
}
}
}
span {
display: inline-block;
width: 24px;
height: 24px;
[data-bg-color] {
position: relative;
border-radius: 50%;
&.selected::after {
content: '';
position: absolute;
top: -2px; left: -2px;
right: -2px; bottom: -2px;
border-radius: 50%;
margin-right: .5em;
&:before {
content: '';
display: inline-block;
width: 32px;
height: 32px;
}
border: 2px solid $primary;
pointer-events: none;
z-index: 1;
}
}
}

View File

@@ -60,8 +60,10 @@ define('accounts/picture', [
modal.find('.list-group-item').removeClass('active');
$(this).addClass('active');
});
modal.on('change', 'input[type="radio"][name="icon:bgColor"]', (e) => {
const value = e.target.value;
modal.on('click', '[data-bg-color]', function () {
const value = $(this).attr('data-bg-color');
$(this).addClass('selected').siblings().removeClass('selected');
modal.find('[component="avatar/icon"]').css('background-color', value);
});
@@ -80,18 +82,17 @@ define('accounts/picture', [
}
// Update avatar background colour
const radioEl = document.querySelector(`.modal input[type="radio"][value="${ajaxify.data['icon:bgColor']}"]`);
if (radioEl) {
radioEl.checked = true;
const iconbgEl = modal.find(`[data-bg-color="${ajaxify.data['icon:bgColor']}"]`);
if (iconbgEl.length) {
iconbgEl.addClass('selected');
} else {
// Check the first one
document.querySelector('.modal input[type="radio"]').checked = true;
modal.find('[data-bg-color="transparent"]').addClass('selected');
}
}
function saveSelection() {
const type = modal.find('.list-group-item.active').attr('data-type');
const iconBgColor = document.querySelector('.modal.picture-switcher input[type="radio"]:checked').value || 'transparent';
const iconBgColor = modal.find('[data-bg-color].selected').attr('data-bg-color') || 'transparent';
changeUserPicture(type, iconBgColor).then(() => {
Picture.updateHeader(

View File

@@ -156,7 +156,7 @@ Categories.setUnread = async function (tree, cids, uid) {
if (category) {
category.unread = false;
if (unreadCids.includes(category.cid)) {
category.unread = category.topic_count > 0 && true;
category.unread = category.topic_count > 0;
} else if (category.children.length) {
category.children.forEach(setCategoryUnread);
category.unread = category.children.some(c => c && c.unread);

View File

@@ -28,12 +28,13 @@ dashboardController.get = async function (req, res) {
getPopularSearches(),
]);
const version = nconf.get('version');
const latestValidVersion = semver.valid(latestVersion);
res.render('admin/dashboard', {
version: version,
lookupFailed: latestVersion === null,
latestVersion: latestVersion,
upgradeAvailable: latestVersion && semver.gt(latestVersion, version),
lookupFailed: latestValidVersion === null,
latestVersion: latestValidVersion,
upgradeAvailable: latestValidVersion && semver.gt(latestValidVersion, version),
currentPrerelease: versions.isPrerelease.test(version),
notices: notices,
stats: stats,

View File

@@ -35,8 +35,9 @@
<hr />
<h4>[[user:avatar-background-colour]]</h4>
<label><input type="radio" name="icon:bgColor" value="transparent" /><span></span></label>
{{{ each iconBackgrounds }}}
<label><input type="radio" name="icon:bgColor" value="{@value}" /><span style="background-color: {@value};"></span></label>
{{{ end }}}
<div class="d-flex gap-2">
<a href="#" class="lh-1 p-1" data-bg-color="transparent"><i class="fa-solid fa-2x fa-ban text-secondary"></i></a>
{{{ each iconBackgrounds }}}
<a href="#" class="lh-1 p-1" data-bg-color="{@value}" style="color: {@value};"><i class="fa-solid fa-2x fa-circle"></i></a>
{{{ end }}}
</div>

View File

@@ -1,8 +1,8 @@
<div class="row">
<div class="col-12 col-sm-8 offset-sm-2">
<p class="lead text-center">
<h1 class="text-center fs-5">
{{{ if register }}}[[register:interstitial.intro-new]]{{{ else }}}[[register:interstitial.intro]]{{{ end }}}
</p>
</h1>
{{{ if errors.length }}}
<div class="alert alert-warning">