From b17ee0f09e8e0e4ccd7bb3bd7c25c64df64af702 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Wed, 25 Oct 2023 14:34:02 +0000 Subject: [PATCH 1/8] chore: incrementing version number - v3.5.0 --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 86fb694c8a..bbca2003b0 100644 --- a/install/package.json +++ b/install/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "3.4.3", + "version": "3.5.0", "homepage": "https://www.nodebb.org", "repository": { "type": "git", From 5d7c10f12850b79681399a7fd7cd412e3bf45827 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Wed, 25 Oct 2023 14:34:04 +0000 Subject: [PATCH 2/8] chore: update changelog for v3.5.0 --- CHANGELOG.md | 282 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 282 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fc1496142..7659c82e8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,285 @@ +#### v3.5.0 (2023-10-25) + +##### Chores + +* up persona (8428cc8d) +* up harmony (bd9eebd7) +* up harmony (574f95f5) +* up harmony (2c996606) +* up harmony (f619696b) +* up harmony (0d2e0752) +* up persona (75170693) +* up themes (36fe90dd) +* up themes (4d6a6ff5) +* up rewards (35d9a78d) +* up harmony (e09b0332) +* up harmony (ad72f653) +* up persona (215ac672) +* up harmony (560403a9) +* up harmony (a5a33db7) +* up harmony (732af96f) +* up harmony (2af856d8) +* up harmony (05a9dd4e) +* up harmony (15a0a196) +* up deps for lang key change (96c9ccc4) +* up harmony (cddfdae0) +* up harmony (90692d95) +* up harmony (7e75cfaf) +* up harmony (a5c1b2a0) +* up harmony (3a108cab) +* up persona (cc5e9d9c) +* up harmony (769f879e) +* up themes (46530337) +* incrementing version number - v3.4.3 (5c984250) +* update changelog for v3.4.3 (08949be9) +* up themes (e0b29ba9) +* up emoji (00dd0cb3) +* up emoji (86de8cb2) +* up emoji (5081ff48) +* up emoji (805aaa5e) +* up emoji (7568be3c) +* up themes (b7d8fd1e) +* up themes (d0682905) +* incrementing version number - v3.4.2 (3f0dac38) +* up deps (f1021542) +* up composer (45b9803a) +* up composer (7e5d9b71) +* up harmony (13ea14f1) +* up engines (0f9f875b) +* incrementing version number - v3.4.1 (01e69574) +* up dbsearch (b4775b18) +* incrementing version number - v3.4.0 (fd9247c5) +* incrementing version number - v3.3.9 (5805e770) +* incrementing version number - v3.3.8 (a5603565) +* incrementing version number - v3.3.7 (b26f1744) +* incrementing version number - v3.3.6 (7fb38792) +* incrementing version number - v3.3.4 (a67f84ea) +* incrementing version number - v3.3.3 (f94d239b) +* incrementing version number - v3.3.2 (ec9dac97) +* incrementing version number - v3.3.1 (151cc68f) +* incrementing version number - v3.3.0 (fc1ad70f) +* incrementing version number - v3.2.3 (b06d3e63) +* incrementing version number - v3.2.2 (758ecfcd) +* incrementing version number - v3.2.1 (20145074) +* incrementing version number - v3.2.0 (9ecac38e) +* incrementing version number - v3.1.7 (0b4e81ab) +* incrementing version number - v3.1.6 (b3a3b130) +* incrementing version number - v3.1.5 (ec19343a) +* incrementing version number - v3.1.4 (2452783c) +* incrementing version number - v3.1.3 (3b4e9d3f) +* incrementing version number - v3.1.2 (40fa3489) +* incrementing version number - v3.1.1 (40250733) +* incrementing version number - v3.1.0 (0cb386bd) +* incrementing version number - v3.0.1 (26f6ea49) +* incrementing version number - v3.0.0 (224e08cd) +* **deps:** + * update actions/setup-node action to v4 (#12114) (762ad161) + * update dependency eslint-plugin-import to v2.29.0 (#12112) (2ae031ed) + * update redis docker tag to v7.2.2 (#12097) (bb812937) + * update dependency eslint to v8.52.0 (#12106) (8acdd355) + * update commitlint monorepo to v17.8.1 (#12104) (022e2a10) + * update dependency lint-staged to v15.0.2 (#12099) (8549d7de) + * update dependency sass-embedded to v1.69.4 (#12093) (f5f1679c) + * update dependency lint-staged to v15 (#12086) (d1cd625d) + * update commitlint monorepo to v17.8.0 (#12084) (225acb2e) + * update dependency sass-embedded to v1.69.2 (#12073) (9967ae6b) + * update dependency sass-embedded to v1.69.1 (#12071) (7fe72085) + * update dependency eslint to v8.51.0 (#12063) (6c01148e) + * update dependency @commitlint/cli to v17.7.2 (#12047) (d10a09a0) + * update dependency eslint to v8.50.0 (#12029) (65051066) + * update postgres docker tag to v16 (#12012) (6fa6f73b) + * update actions/checkout action to v4 (#11978) (b4233366) + * update docker/build-push-action action to v5 (#11997) (4ecfe40e) + * update docker/login-action action to v3 (#11998) (478f7c74) + * update docker/metadata-action action to v5 (#11999) (21b280d2) + * update docker/setup-buildx-action action to v3 (#12000) (95f7112a) + * update docker/setup-qemu-action action to v3 (#12001) (f286d7fa) + * update dependency sass-embedded to v1.67.0 (#12003) (b9d04e2f) + * update dependency eslint to v8.49.0 (#11993) (ceed4327) + * update coverallsapp/github-action action to v2.2.3 (#11988) (a473b515) + * update redis docker tag to v7.2.1 (#11987) (0b231fd3) +* **i18n:** + * fallback strings for new resources: nodebb.admin-extend-widgets (990bbd8c) + * fallback strings for new resources: nodebb.admin-manage-privileges (3cb6881c) + * fallback strings for new resources: nodebb.themes-harmony (67fec93d) + * fallback strings for new resources: nodebb.notifications (ed77a0b1) + * fallback strings for new resources: nodebb.admin-advanced-database (b517645f) + * fallback strings for new resources: nodebb.error, nodebb.flags (19cfd89f) + * fallback strings for new resources: nodebb.admin-extend-widgets (8b5f0334) + * fallback strings for new resources: nodebb.email (fc8a6b31) + * fallback strings for new resources: nodebb.admin-settings-post (8cb2c270) + * fallback strings for new resources: nodebb.email, nodebb.notifications (a71378cb) + * fallback strings for new resources: nodebb.topic (8df56d60) + * fallback strings for new resources: nodebb.notifications, nodebb.pages, nodebb.tags, nodebb.user (2627e974) + * fallback strings for new resources: nodebb.modules (ec3ab986) + * fallback strings for new resources: nodebb.admin-settings-chat (968ee0c7) + +##### New Features + +* show # of widgets on templates (2ca5192b) +* #12101, dont return rssFeedUrl if feeds are disabled (2955fdb5) +* add sidebar setting lang key (97a86ba4) +* award notif filter (9e9046bf) +* update to mongodb 6.1 (#12087) (e542b27d) +* add category canonical url (f96b0b7a) +* update error handler to check for pseudo-standard no-* prefix and route to 404 handler instead (db5b0f47) +* flag rescinding logic + api method (e012edea) +* backend methods for rescinding a report, supplemental adds and removing a report now adds to the flag history (bc0f362c) +* use homePageTitle in breadcrumbs if its set (1a745201) +* 3 column layout for widgets (db9279eb) +* update all language keys to use - instead of _ (#12059) (844cb91b) +* closes #12052, ability to disable stale topic warning (f8a3aceb) +* add .has() method in cache/ttl lib (d478de16) +* upgrade chartjs to 4.x (fe192b92) +* closes #11553, add forked from message like merged into (be14f6cc) +* add workerpool for password, closes #10326 (#12038) (8b25aff7) +* add new hook action:chat.onMessagesAddedToDom (a7517d88) +* add composerActions for chat rooms (d906097a) +* add heading strings (8c977f4c) +* introduce new ACP setting for newbie chat message delay, defaults to 2 minutes (223e7656) + +##### Bug Fixes + +* **deps:** + * update dependency cron to v3.1.4 (#12117) (3e45788f) + * update dependency ace-builds to v1.31.0 (#12113) (aba7eb0f) + * update dependency nconf to v0.12.1 (#12111) (91d00979) + * update dependency @fontsource/inter to v5.0.15 (#12108) (99c3c874) + * update dependency nodemailer to v6.9.7 (#12109) (e546adaa) + * update dependency mongodb to v6.2.0 (#11965) (7302e769) + * update dependency @fontsource/inter to v5.0.14 (#12103) (c9c6175a) + * update dependency cron to v3.1.3 (#12100) (bad9198e) + * update dependency sass to v1.69.4 (#12094) (2adc96c2) + * update dependency esbuild to v0.19.5 (#12091) (94434125) + * update dependency webpack-merge to v5.10.0 (#12088) (d45f506f) + * update dependency webpack to v5.89.0 (#12083) (1ebdfaea) + * update dependency connect-mongo to v5.1.0 (#12085) (212a3415) + * update dependency ace-builds to v1.30.0 (#12082) (8456682c) + * update dependency cron to v3.1.1 (#12078) (24d6b73f) + * update dependency commander to v11.1.0 (#12079) (7d38e9ed) + * update dependency sass to v1.69.3 (#12076) (193e54e2) + * update dependency workerpool to v6.5.1 (#12077) (14eede15) + * update dependency sass to v1.69.2 (#12074) (0dd4cedf) + * update dependency nodemailer to v6.9.6 (#12068) (6c59d72a) + * update dependency winston to v3.11.0 (#12064) (fdf279a3) + * update dependency cron to v3 (#12049) (f2fad2d3) + * update dependency @fontsource/inter to v5.0.13 (#12065) (512ac525) + * update dependency ace-builds to v1.29.0 (#12067) (b04fbf89) + * update dependency sass to v1.69.1 (#12070) (a5d2871c) + * update dependency @fontsource/inter to v5.0.12 (#12053) (1033218c) + * update dependency sass to v1.69.0 (#12060) (ecb847fc) + * update dependency nodebb-plugin-2factor to v7.4.0 (6c5c1afd) + * update dependency nodebb-plugin-ntfy to v1.7.3 (98e58252) + * update dependency postcss to v8.4.31 (#12048) (eaa7aff3) + * update dependency esbuild to v0.19.4 (#12046) (4289230f) + * update dependency rimraf to v5.0.5 (#12036) (3549fbdd) + * update dependency nodebb-theme-persona to v13.2.34 (#12043) (339481ca) + * update dependency nodebb-plugin-spam-be-gone to v2.2.0 (#12039) (84648db2) + * update dependency cron to v2.4.4 (#12033) (c1f873b3) + * update dependency ace-builds to v1.28.0 (#12028) (3262923a) + * update dependency nodebb-plugin-2factor to v7.3.1 (#12026) (d29ea026) + * update dependency nodebb-plugin-ntfy to v1.7.2 (#12024) (360d3257) + * update dependency sass to v1.68.0 (#12023) (be600a84) + * update dependency autoprefixer to v10.4.16 (#12022) (f6b6e6c7) + * update dependency nodebb-plugin-2factor to v7.3.0 (#12021) (639fb33f) + * update dependency bootswatch to v5.3.2 (#12020) (5dc368a9) + * update dependency ace-builds to v1.27.0 (#12019) (f73ed6dd) + * update dependency nodebb-plugin-emoji to v5.1.10 (#12018) (16fe4fde) + * update dependency sharp to v0.32.6 (#12016) (f838498b) + * update dependency postcss to v8.4.30 (#12015) (7dbc6668) + * update dependency rtlcss to v4.1.1 (#12014) (ba894a04) + * update dependency nodebb-plugin-ntfy to v1.7.1 (#12011) (4e834a2e) + * update dependency ace-builds to v1.26.0 (#12010) (5a003acb) + * update dependency mongodb to v5.9.0 (#12008) (5bfcd34c) + * update dependency cropperjs to v1.6.1 (#12013) (9f5362c8) + * update dependency ace-builds to v1.25.1 (#12006) (1558d7a2) + * update dependency bootstrap to v5.3.2 (#12005) (44d120df) + * update dependency esbuild to v0.19.3 (#12002) (ef41b8bc) + * update dependency sass to v1.67.0 (#12004) (d2e49472) + * update dependency ace-builds to v1.24.2 (#11991) (447b7954) +* closes #12115 , toggle hasmore as well (728d63f9) +* #10276, only move widgets if area doesn't exist (1739f5a9) +* #12090, dont award disabled rewards (c1ae879d) +* rewards fixes (347a43f4) +* use template name instead of component (f6120ebb) +* incorrect data passed to api.flags.get (cc8fe435) +* missing body classes on error pages (54a810dd) +* edit notification key (bda37ac2) +* lang key (bffa7880) +* #12062, relax blockquote selector (99bdad80) +* allowing forward slash in language keys, temporarily allowing upper case characters (d25a24fc) +* rename filter-perPage to filter-per-page (872ddc26) +* upgrade script date (6f5a965a) +* add upgrade script for notifications (6c3ff86b) +* lang key, type has _, lang keys changed to use - (1072b38b) +* #12017, unreliable forum updated messaging (715bdac3) +* #12057, allow gmods to change user email (344ece8d) +* only show emailChanged alert for self (56794cf8) +* closes #12054 handle negative start/stop in psql (0f4e6648) +* make socket errors and static hook errors less noisy (2a1be01a) +* restore notificationSendDelay back to 60 (5fe1ad95) +* breaking tests (857433d1) +* #12044, only load notifications when opening dropdown (dbd0a715) +* change `notificationSendDelay` to default to 10 seconds instead of 60, #11445 (cf50b0fe) +* clear interstitial data if there are no additional interstitials on abort (bdc221eb) +* #11808, reduce zeal of middleware.registrationComplete (74902e4a) +* pass in missing uid (d50473df) +* #12025, validity checking on user-provided toPid value (fe42fd4e) +* #12032, truncate long category names (b518e036) +* field name importance (8041f4d1) +* closes #12007, parseInt notification fields (b8e43143) +* on shutdown clear locks (615b2f0f) +* remaining text, when sending with send button (6553e454) +* nodebb/nodebb-plugin-link-preview#18, remove sup from allowedTags, add source + source attributes (f09f4105) +* use isPrivileged instead of isAdmin (b9c3cdb6) +* failing test due to increased chat message delay (ff07fc44) +* better labels in ACP chat settings, #11983 (88dd21e2) +* bump chat message delay by 10x to 2000ms, re: #11983 (9b0b33cc) +* #11981, post immediately when canceling scheduling (aa797f23) +* **i18n:** + * added rewards resource and fallbacks (47910d70) + * fallbacks for new language keys (2b3d2055) + * push fallbacks for modules resource (9b384b98) + +##### Other Changes + +* fix quotes (b8705380) +* fix lint (3b46ad42) + +##### Performance Improvements + +* no need to count on every call (130815c7) + +##### Refactors + +* get rid of util.promisify on async function (b1ff93f8) +* fix comment (ff6bfeb8) +* get rid of async.series (c7c6e8ff) +* shorter timeago (6149252b) +* shorter code for pinned topics (ff952e59) +* change private message email subject (f9fb3c3a) +* use helpers.isAllowedTo (47c16e90) +* add email notification delay to chat message notifications (a47b4805) +* remove chat message notification queue, implement merge IDs for chat message notifications, so they can be grouped together (3ba371f6) +* update buildCategoryLabel (82ea9192) +* use esm only import used chart types/plugins (56b31674) +* get rid of exists db call, use promise.parallel (8895b152) +* get rid of some async.waterfall/series/parallel calls (e452c097) +* get rid of async.waterfall/series (8bc2ef22) +* reduce socket.emits for typing (4d1b8e76) + +##### Tests + +* add spec for new notif type (90e10b9c) +* worked with chatgpt to restrict the i18n test a bit to match requirements (99364427) +* fix flag tests (6606d96a) +* added test cases for .addReport and .rescindReport() (da239059) +* added i18n test to enforce kebab casing (69dde2b9) +* add reverse list test (66be9826) +* additional tests for #12034 (d7e9f324) +* added tests for new logic paths (toPid validation on post creation) (ce740301) +* 💥 i18n tests (8202c555) + #### v3.4.3 (2023-09-27) ##### Chores From b1b3dcb660df7a275607eb9e8f05e1974b49a466 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 Oct 2023 15:53:41 -0400 Subject: [PATCH 3/8] chore: up mentions --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index bbca2003b0..bb3014c057 100644 --- a/install/package.json +++ b/install/package.json @@ -98,7 +98,7 @@ "nodebb-plugin-emoji": "5.1.13", "nodebb-plugin-emoji-android": "4.0.0", "nodebb-plugin-markdown": "12.2.5", - "nodebb-plugin-mentions": "4.3.6", + "nodebb-plugin-mentions": "4.3.7", "nodebb-plugin-ntfy": "1.7.3", "nodebb-plugin-spam-be-gone": "2.2.0", "nodebb-rewards-essentials": "1.0.0", From 668a355afe163c64aff61351ad7995187ff341b2 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 Oct 2023 19:06:29 -0400 Subject: [PATCH 4/8] fix: closes #12126, fix language keys --- src/controllers/admin/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/admin/settings.js b/src/controllers/admin/settings.js index 9ecf08548d..61ccd6a091 100644 --- a/src/controllers/admin/settings.js +++ b/src/controllers/admin/settings.js @@ -49,7 +49,7 @@ settingsController.user = async (req, res) => { const notificationTypes = await notifications.getAllNotificationTypes(); const notificationSettings = notificationTypes.map(type => ({ name: type, - label: `[[notifications:${type}]]`, + label: `[[notifications:${type.replace(/_/g, '-')}]]`, })); res.render('admin/settings/user', { title: '[[admin/menu:settings/user]]', From 1f8007476cb360885fe21834925ca666b646a789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 26 Oct 2023 11:14:58 -0400 Subject: [PATCH 5/8] feat: closes #12123, allow setting hh:mm for pin expiry use locale for pin expiry and use short form --- install/package.json | 2 +- public/src/client/topic/threadTools.js | 21 ++++++++++----------- public/src/modules/helpers.common.js | 7 +++++-- src/views/modals/set-pin-expiry.tpl | 5 ++++- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/install/package.json b/install/package.json index bb3014c057..f6d8338d96 100644 --- a/install/package.json +++ b/install/package.json @@ -102,7 +102,7 @@ "nodebb-plugin-ntfy": "1.7.3", "nodebb-plugin-spam-be-gone": "2.2.0", "nodebb-rewards-essentials": "1.0.0", - "nodebb-theme-harmony": "1.1.90", + "nodebb-theme-harmony": "1.1.91", "nodebb-theme-lavender": "7.1.5", "nodebb-theme-peace": "2.1.23", "nodebb-theme-persona": "13.2.42", diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js index 715af804d2..60dfd8b766 100644 --- a/public/src/client/topic/threadTools.js +++ b/public/src/client/topic/threadTools.js @@ -257,7 +257,6 @@ define('forum/topic/threadTools', [ title: '[[topic:thread-tools.pin]]', message: html, onEscape: true, - size: 'small', buttons: { cancel: { label: '[[modules:bootbox.cancel]]', @@ -267,19 +266,19 @@ define('forum/topic/threadTools', [ label: '[[global:save]]', className: 'btn-primary', callback: function () { - const expiryEl = modal.get(0).querySelector('#expiry'); - let expiry = expiryEl.value; - + const expiryDateEl = modal.get(0).querySelector('#expiry-date'); + const expiryTimeEl = modal.get(0).querySelector('#expiry-time'); + let expiryDate = expiryDateEl.value; + let expiryTime = expiryTimeEl.value; // No expiry set - if (expiry === '') { + if (expiryDate === '' && expiryTime === '') { return onSuccess(); } - - // Expiration date set - expiry = new Date(expiry); - - if (expiry && expiry.getTime() > Date.now()) { - body.expiry = expiry.getTime(); + expiryDate = expiryDate || new Date().toDateString(); + expiryTime = expiryTime || new Date().toTimeString(); + const date = new Date(`${expiryDate} ${expiryTime}`); + if (date.getTime() > Date.now()) { + body.expiry = date.getTime(); onSuccess(); } else { alerts.error('[[error:invalid-date]]'); diff --git a/public/src/modules/helpers.common.js b/public/src/modules/helpers.common.js index 07ab724963..ab61734efa 100644 --- a/public/src/modules/helpers.common.js +++ b/public/src/modules/helpers.common.js @@ -343,8 +343,11 @@ module.exports = function (utils, Benchpress, relative_path) { return `[[topic:wrote-${langSuffix}, ${relative_path}/post/${post.pid}, ${post.timestampISO}]]`; } - function isoTimeToLocaleString(isoTime) { - return new Date(isoTime).toLocaleString().replace(/,/g, ','); + function isoTimeToLocaleString(isoTime, locale = 'en-GB') { + return new Date(isoTime).toLocaleString([locale], { + dateStyle: 'short', + timeStyle: 'short', + }).replace(/,/g, ','); } function shouldHideReplyContainer(post) { diff --git a/src/views/modals/set-pin-expiry.tpl b/src/views/modals/set-pin-expiry.tpl index 523723011e..75fb877cd2 100644 --- a/src/views/modals/set-pin-expiry.tpl +++ b/src/views/modals/set-pin-expiry.tpl @@ -1,5 +1,8 @@
- +
+ + +

[[topic:pin-modal-help]]

\ No newline at end of file From 46f6f9eff03321d5cfb1dc4bc242b768b64fdf4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sat, 28 Oct 2023 13:42:06 -0400 Subject: [PATCH 6/8] fix: thumb width --- src/views/modals/topic-thumbs-view.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/modals/topic-thumbs-view.tpl b/src/views/modals/topic-thumbs-view.tpl index 82265b47e1..5ef4c3c19d 100644 --- a/src/views/modals/topic-thumbs-view.tpl +++ b/src/views/modals/topic-thumbs-view.tpl @@ -1,6 +1,6 @@
- +
{{{ if (thumbs.length != "1") }}}
From 21e595388845f8be203e64be4d1fe4200f899c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 8 Nov 2023 15:38:02 -0500 Subject: [PATCH 7/8] fix: closes #12156, missing data for privilege tables also fix js crash when adding group/user on admin privileges, --- public/src/admin/manage/privileges.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/public/src/admin/manage/privileges.js b/public/src/admin/manage/privileges.js index 7e9e644acb..1c4f829f3f 100644 --- a/public/src/admin/manage/privileges.js +++ b/public/src/admin/manage/privileges.js @@ -413,8 +413,10 @@ define('admin/manage/privileges', [ return cb(); } // Generate data for new row - const privilegeSet = ajaxify.data.privileges.keys.groups.reduce(function (memo, cur) { + const typesMap = {}; + const privilegeSet = ajaxify.data.privileges.keys.groups.reduce(function (memo, cur, index) { memo[cur] = false; + typesMap[cur] = ajaxify.data.privileges.labelData[index].type; return memo; }, {}); @@ -425,6 +427,7 @@ define('admin/manage/privileges', [ name: group, nameEscaped: translator.escape(group), privileges: privilegeSet, + types: typesMap, }, ], }, @@ -434,7 +437,9 @@ define('admin/manage/privileges', [ tbodyEl.append(html.get(0)); Privileges.exposeAssumedPrivileges(); hightlightRowByDataAttr('data-group-name', group); - document.querySelector('.privilege-filters').querySelectorAll('button')[btnIdx].click(); + if (btnIdx >= 0) { + document.querySelector('.privilege-filters').querySelectorAll('button')[btnIdx].click(); + } cb(); }); } @@ -447,8 +452,10 @@ define('admin/manage/privileges', [ return cb(); } // Generate data for new row - const privilegeSet = ajaxify.data.privileges.keys.users.reduce(function (memo, cur) { + const typesMap = {}; + const privilegeSet = ajaxify.data.privileges.keys.users.reduce(function (memo, cur, index) { memo[cur] = false; + typesMap[cur] = ajaxify.data.privileges.labelData[index].type; return memo; }, {}); @@ -463,6 +470,7 @@ define('admin/manage/privileges', [ 'icon:text': user['icon:text'], 'icon:bgColor': user['icon:bgColor'], privileges: privilegeSet, + types: typesMap, }, ], }, @@ -473,7 +481,9 @@ define('admin/manage/privileges', [ tbodyEl[1].append(html.get(0)); Privileges.exposeAssumedPrivileges(); hightlightRowByDataAttr('data-uid', user.uid); - document.querySelectorAll('.privilege-filters')[1].querySelectorAll('button')[btnIdx].click(); + if (btnIdx >= 0) { + document.querySelectorAll('.privilege-filters')[1].querySelectorAll('button')[btnIdx].click(); + } cb(); } From dcb0c4dbb0c65664088ad88003f8e84f2bbe2821 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 1 Nov 2023 10:54:41 -0400 Subject: [PATCH 8/8] fix: update ajaxifyTimer logic to only drop the request if the URL is the same as the one it's already processing re: #12133 --- public/src/ajaxify.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index bff7a330f2..8423f27fd8 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -17,6 +17,7 @@ ajaxify.widgets = { render: render }; ajaxify.count = 0; ajaxify.currentPage = null; + ajaxify.requestedPage = null; // disables scroll to top when back button is clicked // https://developer.chrome.com/blog/history-api-scroll-restoration/ if ('scrollRestoration' in history) { @@ -38,10 +39,11 @@ ajaxify.widgets = { render: render }; } // Abort subsequent requests if clicked multiple times within a short window of time - if (ajaxifyTimer && (Date.now() - ajaxifyTimer) < 500) { + if (ajaxify.requestedPage === url && ajaxifyTimer && (Date.now() - ajaxifyTimer) < 500) { return true; } ajaxifyTimer = Date.now(); + ajaxify.requestedPage = url; if (ajaxify.handleRedirects(url)) { return true; @@ -134,6 +136,7 @@ ajaxify.widgets = { render: render }; ajaxify.updateHistory = function (url, quiet) { ajaxify.currentPage = url.split(/[?#]/)[0]; + ajaxify.requestedPage = null; if (window.history && window.history.pushState) { window.history[!quiet ? 'pushState' : 'replaceState']({ url: url,