| import {MDCTooltip} from '@material/tooltip'; |
| |
| import {createPlainTooltip} from '../../../common/tooltip.js'; |
| import {createExtBadge} from '../utils/common.js'; |
| |
| export const kColorThemeMode = Object.freeze({ |
| Auto: Symbol('auto'), |
| Light: Symbol('light'), |
| Dark: Symbol('dark'), |
| }); |
| |
| export function injectDarkThemeButton(rightControl, previousDarkThemeOption) { |
| var darkThemeSwitch = document.createElement('material-button'); |
| darkThemeSwitch.classList.add('TWPT-dark-theme', 'TWPT-btn--with-badge'); |
| darkThemeSwitch.setAttribute('button', ''); |
| |
| darkThemeSwitch.addEventListener('click', () => { |
| chrome.storage.sync.get(null, currentOptions => { |
| currentOptions.ccdarktheme_switch_status = !previousDarkThemeOption; |
| chrome.storage.sync.set(currentOptions, () => { |
| location.reload(); |
| }); |
| }); |
| }); |
| |
| var switchContent = document.createElement('div'); |
| switchContent.classList.add('content'); |
| |
| var icon = document.createElement('material-icon'); |
| |
| var i = document.createElement('i'); |
| i.classList.add('material-icon-i', 'material-icons-extended'); |
| i.textContent = 'brightness_4'; |
| |
| icon.appendChild(i); |
| switchContent.appendChild(icon); |
| darkThemeSwitch.appendChild(switchContent); |
| |
| let badgeContent, badgeTooltip; |
| [badgeContent, badgeTooltip] = createExtBadge(); |
| |
| darkThemeSwitch.appendChild(badgeContent); |
| |
| rightControl.style.width = |
| (parseInt(window.getComputedStyle(rightControl).width) + 58) + 'px'; |
| rightControl.insertAdjacentElement('afterbegin', darkThemeSwitch); |
| |
| createPlainTooltip( |
| switchContent, chrome.i18n.getMessage('inject_ccdarktheme_helper')); |
| new MDCTooltip(badgeTooltip); |
| } |
| |
| export function getCurrentColorTheme(options) { |
| if (!options.ccdarktheme) { |
| return kColorThemeMode.Light; |
| } else { |
| if (options.ccdarktheme_mode == 'switch') { |
| return options.ccdarktheme_switch_status ? kColorThemeMode.Dark : |
| kColorThemeMode.Light; |
| } else { |
| return kColorThemeMode.Auto; |
| } |
| } |
| } |
| |
| export function isDarkThemeOn(options) { |
| const activeColorTheme = getCurrentColorTheme(options); |
| |
| switch (activeColorTheme) { |
| case kColorThemeMode.Auto: |
| return window.matchMedia && |
| window.matchMedia('(prefers-color-scheme: dark)').matches; |
| |
| case kColorThemeMode.Light: |
| return false; |
| |
| case kColorThemeMode.Dark: |
| return true; |
| } |
| } |