/** * @name BetterThemeToggle * @author akpi * @description Add a hotkey to toggle between light and dark theme * @version 1.0.0 * @authorId 817214551740776479 * @authorLink https://akpi.is-a.dev * @website https://github.com/akpi816218/BetterThemeToggle * @source https://github.com/akpi816218/BetterThemeToggle/blob/gitmaster/BetterThemeToggle.plugin.ts */ module.exports = class { /** @type {string} */ hotkey; /** @type {'light' | 'dark'} */ theme; constructor() { this.theme = BdApi.Data.load('BetterThemeToggle', 'theme') ?? document.documentElement.classList.contains('theme-dark') ? 'dark' : 'light'; this.update(); this.hotkey = BdApi.Data.load('BetterThemeToggle', 'hotkey') || 'Alt+Shift+T'; BdApi.Data.save('BetterThemeToggle', 'hotkey', this.hotkey); } start() { document.addEventListener('keydown', (e) => { if ( e.key.toLowerCase() === this.hotkey.split('+').pop().toLowerCase() && e.ctrlKey === this.hotkey.includes('Control') && e.shiftKey === this.hotkey.includes('Shift') && e.altKey === this.hotkey.includes('Alt') ) { this.toggle(); } }); } stop() {} // getSettingsPanel() { // const settingsPanel = document.createElement('div'); // settingsPanel.id = 'BetterThemeToggleSettingsPanel'; // settingsPanel.innerHTML = ` // // // // `; // } toggle() { this.theme = this.theme === 'light' ? 'dark' : 'light'; this.update(); } update() { if (this.theme === 'light') { document.documentElement.classList.remove('theme-dark'); document.documentElement.classList.add('theme-light'); } else { document.documentElement.classList.remove('theme-light'); document.documentElement.classList.add('theme-dark'); } BdApi.Data.save('BetterThemeToggle', 'theme', this.theme); } };