From b5ae68b0c519f10e4771af7bb76c7409c8f45657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=9C=CE=AC=CF=81=CE=B9=CE=BF=CF=82?= Date: Fri, 12 Sep 2025 17:12:13 +0300 Subject: [PATCH] Add "Better Daily Draw" module for sorting raffle tickets by oldest first Closes #334 --- docs/better-daily-draw.md | 13 +++ src/modules/better-daily-draw/index.js | 82 +++++++++++++++++++ .../better-daily-draw/settings/index.js | 18 ++++ 3 files changed, 113 insertions(+) create mode 100644 docs/better-daily-draw.md create mode 100644 src/modules/better-daily-draw/index.js create mode 100644 src/modules/better-daily-draw/settings/index.js diff --git a/docs/better-daily-draw.md b/docs/better-daily-draw.md new file mode 100644 index 00000000..1cf9142a --- /dev/null +++ b/docs/better-daily-draw.md @@ -0,0 +1,13 @@ +# [Better Daily Draw](https://www.mousehuntgame.com/preferences.php?tab=mousehunt-improved-settings#mousehunt-improved-settings-better-better-daily-draw) + +Improves the Daily Draw experience. + +## Features + +- **Reverse Ticket Order**: Changes the default display order from newest-first to oldest-first for Daily Draw raffle + tickets. + +## Options + +- **Sort Daily Draw raffle tickets by the oldest first**: Toggle to sort Daily Draw raffle tickets by the oldest first + instead of the default newest first order. diff --git a/src/modules/better-daily-draw/index.js b/src/modules/better-daily-draw/index.js new file mode 100644 index 00000000..461b3680 --- /dev/null +++ b/src/modules/better-daily-draw/index.js @@ -0,0 +1,82 @@ +import { getSetting, onDeactivation } from '@utils'; + +import settings from './settings'; + +/** + * Reverse daily_draw elements. + */ +const reverseDailyDrawElements = () => { + const firstDailyDraw = document.querySelector('.daily_draw'); + + if (! firstDailyDraw) { + return; + } + + const container = firstDailyDraw.parentElement; + + const dailyDrawDivs = container.querySelectorAll('.daily_draw'); + + if (dailyDrawDivs.length > 0) { + const reversedDivs = [...dailyDrawDivs].reverse(); + + dailyDrawDivs.forEach((div) => div.remove()); + + const emptyDiv = container.querySelector('.empty'); + + reversedDivs.forEach((div) => { + if (emptyDiv) { + emptyDiv.before(div); + } else { + container.append(div); + } + }); + } +}; + +/** + * Main function to set up the daily draw sorting. + */ +const main = () => { + const sortOldestFirst = getSetting('better-daily-draw.sort-oldest-first', false); + + if (! sortOldestFirst) { + return; + } + + if (messenger?.UI?.notification) { + const originalTogglePopup = messenger.UI.notification.togglePopup; + + messenger.UI.notification.togglePopup = function (...args) { + const result = originalTogglePopup.apply(this, args); + setTimeout(reverseDailyDrawElements, 555); + + return result; + }; + } +}; + +/** + * Initialize the module. + */ +const init = async () => { + main(); + + onDeactivation('better-daily-draw', () => { + if (messenger?.UI?.notification?.originalTogglePopup) { + messenger.UI.notification.togglePopup = messenger.UI.notification.originalTogglePopup; + } + }); +}; + +/** + * Initialize the module. + */ +export default { + id: 'better-daily-draw', + name: 'Better Daily Draw', + type: 'better', + default: false, + description: 'Daily Draw options.', + load: init, + settings, +}; diff --git a/src/modules/better-daily-draw/settings/index.js b/src/modules/better-daily-draw/settings/index.js new file mode 100644 index 00000000..7e02d840 --- /dev/null +++ b/src/modules/better-daily-draw/settings/index.js @@ -0,0 +1,18 @@ +/** + * Add settings for the module. + * + * @return {Array} The settings for the module. + */ +export default async () => { + return [ + { + id: 'better-daily-draw.sort-oldest-first', + title: 'Sort by oldest first', + default: false, + description: 'Sort Daily Draw raffle tickets by oldest first instead of newest first.', + settings: { + type: 'boolean', + } + } + ]; +};