From 155ae3c52efecf5e567a7cab6ece7754352f6cae Mon Sep 17 00:00:00 2001 From: evelyn lo Date: Thu, 27 Feb 2025 22:11:01 -0500 Subject: [PATCH 1/2] implement dark mode feature with UI toggle and user settings persistence --- dump.rdb | Bin 54881 -> 61410 bytes nodebb-theme-harmony/public/darkmode.js | 0 nodebb-theme-harmony/public/harmony.js | 22 ++++++++++++++++++ .../templates/account/settings.tpl | 13 +++++++++++ .../templates/account/theme.tpl | 7 ++++++ .../templates/partials/topic/post.tpl | 6 ++++- src/user/settings.js | 7 +++++- 7 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 nodebb-theme-harmony/public/darkmode.js diff --git a/dump.rdb b/dump.rdb index d7dcdcaf5f345cbd8232a99d43532ef9ccc690f5..dd71bd815f0b643775a6aa4a135dc804c32faf2b 100644 GIT binary patch delta 12117 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 diff --git a/nodebb-theme-harmony/public/darkmode.js b/nodebb-theme-harmony/public/darkmode.js new file mode 100644 index 0000000..e69de29 diff --git a/nodebb-theme-harmony/public/harmony.js b/nodebb-theme-harmony/public/harmony.js index 6387055..bde9e94 100644 --- a/nodebb-theme-harmony/public/harmony.js +++ b/nodebb-theme-harmony/public/harmony.js @@ -11,6 +11,28 @@ $(document).ready(function () { fixPlaceholders(); fixSidebarOverflow(); + const darkModeToggle = document.getElementById("darkModeToggle"); + + if (darkModeToggle) { + // Apply stored preference + if (localStorage.getItem("darkMode") === "enabled") { + document.body.classList.add("dark-mode"); + darkModeToggle.checked = true; + } + + // Listen for changes + darkModeToggle.addEventListener("change", function () { + if (this.checked) { + document.body.classList.add("dark-mode"); + localStorage.setItem("darkMode", "enabled"); + } else { + document.body.classList.remove("dark-mode"); + localStorage.setItem("darkMode", "disabled"); + } + }); + } + + function setupSkinSwitcher() { $('[component="skinSwitcher"]').on('click', '.dropdown-item', function () { const skin = $(this).attr('data-value'); diff --git a/nodebb-theme-harmony/templates/account/settings.tpl b/nodebb-theme-harmony/templates/account/settings.tpl index c4c78a1..7ae1c8a 100644 --- a/nodebb-theme-harmony/templates/account/settings.tpl +++ b/nodebb-theme-harmony/templates/account/settings.tpl @@ -65,11 +65,19 @@
[[user:browsing]]
+
+
+ + +
+ + + {{{ if inTopicSearchAvailable }}}
@@ -92,6 +100,11 @@
[[global:pagination]]
+
+ + +
+
diff --git a/nodebb-theme-harmony/templates/account/theme.tpl b/nodebb-theme-harmony/templates/account/theme.tpl index 67fdbc7..5772006 100644 --- a/nodebb-theme-harmony/templates/account/theme.tpl +++ b/nodebb-theme-harmony/templates/account/theme.tpl @@ -59,6 +59,13 @@
+
+ + +
+ \ No newline at end of file diff --git a/nodebb-theme-harmony/templates/partials/topic/post.tpl b/nodebb-theme-harmony/templates/partials/topic/post.tpl index e2e92ad..512c7c3 100644 --- a/nodebb-theme-harmony/templates/partials/topic/post.tpl +++ b/nodebb-theme-harmony/templates/partials/topic/post.tpl @@ -39,7 +39,11 @@
{generateWroteReplied(@value, config.timeagoCutoff)} - + + + + + [[global:last-edited-by, {posts.editor.username}]]
diff --git a/src/user/settings.js b/src/user/settings.js index d85a712..c688e58 100644 --- a/src/user/settings.js +++ b/src/user/settings.js @@ -24,8 +24,10 @@ module.exports = function (User) { let settings = await db.getObject(`user:${uid}:settings`); settings = settings || {}; settings.uid = uid; + settings.darkMode = settings.darkMode || false; // Retrieve dark mode setting return await onSettingsLoaded(uid, settings); }; + User.getMultipleUserSettings = async function (uids) { if (!Array.isArray(uids) || !uids.length) { @@ -148,6 +150,7 @@ module.exports = function (User) { categoryWatchState: data.categoryWatchState, categoryTopicSort: data.categoryTopicSort, topicPostSort: data.topicPostSort, + darkMode: data.darkMode || false, // Save dark mode preference }; const notificationTypes = await notifications.getAllNotificationTypes(); notificationTypes.forEach((notificationType) => { @@ -172,7 +175,9 @@ module.exports = function (User) { if (parseInt(uid, 10) <= 0) { return; } - + if (key === 'darkMode') { + value = value ? true : false; // Ensure it's a boolean + } await db.setObjectField(`user:${uid}:settings`, key, value); }; }; From 5fe15bce0f04310001a2e954ec2bdf22a914b3ec Mon Sep 17 00:00:00 2001 From: evelyn lo Date: Thu, 13 Mar 2025 14:30:03 -0400 Subject: [PATCH 2/2] added stryker mutator for mutation testing, including reports --- .gitignore | 4 ++- .strykerignore | 3 ++ dump.rdb | Bin 61410 -> 61067 bytes nodebb-theme-harmony/plugin.json | 7 ++++- nodebb-theme-harmony/public/darkmode.js | 37 ++++++++++++++++++++++++ src/cli/index.js | 30 ++++++++++++++++--- stryker.config.json | 21 ++++++++++++++ stryker_output.txt | 23 +++++++++++++++ 8 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 .strykerignore create mode 100644 stryker.config.json create mode 100644 stryker_output.txt diff --git a/.gitignore b/.gitignore index 42a1b3c..8a0aca8 100644 --- a/.gitignore +++ b/.gitignore @@ -72,4 +72,6 @@ link-plugins.sh test.sh .docker/** -!**/.gitkeep \ No newline at end of file +!**/.gitkeep +# stryker temp files +.stryker-tmp diff --git a/.strykerignore b/.strykerignore new file mode 100644 index 0000000..d82c3c2 --- /dev/null +++ b/.strykerignore @@ -0,0 +1,3 @@ +build/ +public/ +plugins/ diff --git a/dump.rdb b/dump.rdb index dd71bd815f0b643775a6aa4a135dc804c32faf2b..4cd026c8531ad2d741e2d32353d0b75751e6661a 100644 GIT binary patch delta 121 zcmV-<0EYkK-vf)?1CTH$lN`}!`UrJ%Wn?XFWo^PxEg}H=2w`t#En;DFWxxRb0Q*5- z0T3dSq17IfkfQ{XPw5x2klG;uB9m((rx67T^tOuEh+sYdjo<(j1Uh1~9wRQ10T7dM bqaTxiN(qy0w;HqSweL9y8*pH<9JT3P&5SW_ delta 427 zcmWlV&1w`u6oq>-n?bX46(nLR#Dz@9x>bGar*{)U5*0NVP~2#B*X^X8%#TwY6O|#Z z+z1jKd;>wqPT~Woui#FR1Q$Mmt0=+tEYHU|9L~!h&7X(OJ-%>w;q&@&Yb%hCd(`_9 z&9dmY(ylju+9!PI1K<@{uN>FkHSZ*z^=NteB!Zl3ym`uR~5A2r@h9n8-! zz7~IfZGL_6wh=|qLZA@RzPP4ugwB=1V|=S$KD4g8vc3HD&g$~rM@yI2uXZj@PWESZ ziKQU8Rs6r&jCO|QhyqKQ-~wYVV}LcmQ*Kj$MT^Nj)@B=3HN4s1e8SRdv_)+;bk#Q;8$?XYp1 '/Users/evelynlo/nodebb-s25-puffers/.stryker-tmp/sandbox-oxK0Gt/build/public/plugins/nodebb-plugin-markdown/styles' + at async Object.copyFile (node:internal/fs/promises:621:10) + at async FileSystemAction.execute (file:///Users/evelynlo/nodebb-s25-puffers/node_modules/@stryker-mutator/core/dist/src/fs/file-system.js:16:28) + at async file:///Users/evelynlo/nodebb-s25-puffers/node_modules/@stryker-mutator/core/dist/src/fs/file-system.js:33:9 { + errno: -45, + code: 'ENOTSUP', + syscall: 'copyfile', + path: '/Users/evelynlo/nodebb-s25-puffers/build/public/plugins/nodebb-plugin-markdown/styles', + dest: '/Users/evelynlo/nodebb-s25-puffers/.stryker-tmp/sandbox-oxK0Gt/build/public/plugins/nodebb-plugin-markdown/styles' +} +14:23:40 (34493) INFO Stryker This might be a known problem with a solution documented in our troubleshooting guide. +14:23:40 (34493) INFO Stryker You can find it at https://stryker-mutator.io/docs/stryker-js/troubleshooting/ +14:23:40 (34493) INFO Stryker Still having trouble figuring out what went wrong? Try `npx stryker run --fileLogLevel trace --logLevel debug` to get some more info.