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', + } + } + ]; +};