import {Component, html} from 'htm/preact'; import ExternalAnchor from '../components/external-anchor.js'; import SharedFooter from '../components/shared-footer.js'; import {isDebugEnabled} from '../utilities/debug.js'; import { defaultTheme, getThemeByCssClass, setTheme, themes, } from '../utilities/themes.js'; type Props = Record; type State = { debugChecked: boolean; selectedTheme: string; }; export default class SettingsPage extends Component { constructor(props: Props) { super(props); this.state = { debugChecked: isDebugEnabled(), selectedTheme: window.localStorage.getItem('theme') ?? defaultTheme.cssClass, }; } onDebugChange = (event: Event) => { const checked = (event.target as HTMLInputElement).checked; window.localStorage.setItem('debug', checked.toString()); }; onThemeChange = (event: Event) => { const theme = getThemeByCssClass((event.target as HTMLSelectElement).value); setTheme(theme); this.setState({selectedTheme: theme.cssClass}); }; render() { document.title = 'Settings'; const {selectedTheme} = this.state; const themeOptions = themes.map( (theme) => html``, ); const moreThemesLink = html` <${ExternalAnchor} text="more themes issue" url="https://github.com/Bauke/href-plus/issues/17" /> `; return html`

Settings

Theme

If your favorite theme isn't in the list here, please make a request for it in the ${moreThemesLink}!

Debug

<${SharedFooter} page="settings" />
`; } }