Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'web/html/xui/component/themeSwitch.html')
-rw-r--r--web/html/xui/component/themeSwitch.html58
1 files changed, 58 insertions, 0 deletions
diff --git a/web/html/xui/component/themeSwitch.html b/web/html/xui/component/themeSwitch.html
new file mode 100644
index 00000000..1966d079
--- /dev/null
+++ b/web/html/xui/component/themeSwitch.html
@@ -0,0 +1,58 @@
+{{define "component/themeSwitchTemplate"}}
+<template>
+ <a-switch :default-checked="themeSwitcher.isDarkTheme"
+ checked-children="☀"
+ un-checked-children="🌙"
+ @change="themeSwitcher.toggleTheme()">
+ </a-switch>
+</template>
+{{end}}
+
+{{define "component/themeSwitcher"}}
+<script>
+ const colors = {
+ dark: {
+ bg: "#242c3a",
+ text: "hsla(0,0%,100%,.65)"
+ },
+ light: {
+ bg: '#fff',
+ text: "rgba(0, 0, 0, 0.7)",
+ }
+ }
+
+ function createThemeSwitcher() {
+ const isDarkTheme = localStorage.getItem('dark-mode') === 'true';
+ const theme = isDarkTheme ? 'dark' : 'light';
+ return {
+ isDarkTheme,
+ bgStyle: `background: ${colors[theme].bg};`,
+ textStyle: `color: ${colors[theme].text};`,
+ darkClass: isDarkTheme ? 'ant-card-dark' : '',
+ darkCardClass: isDarkTheme ? 'ant-card-dark' : '',
+ darkDrawerClass: isDarkTheme ? 'ant-drawer-dark' : '',
+ get currentTheme() {
+ return this.isDarkTheme ? 'dark' : 'light';
+ },
+ toggleTheme() {
+ this.isDarkTheme = !this.isDarkTheme;
+ this.theme = this.isDarkTheme ? 'dark' : 'light';
+ localStorage.setItem('dark-mode', this.isDarkTheme);
+ this.bgStyle = `background: ${colors[this.theme].bg};`;
+ this.textStyle = `color: ${colors[this.theme].text};`;
+ this.darkClass = this.isDarkTheme ? 'ant-card-dark' : '';
+ this.darkCardClass = this.isDarkTheme ? 'ant-card-dark' : '';
+ this.darkDrawerClass = this.isDarkTheme ? 'ant-drawer-dark' : '';
+ },
+ };
+ }
+
+ const themeSwitcher = createThemeSwitcher();
+
+ Vue.component('theme-switch', {
+ props: [],
+ template: `{{template "component/themeSwitchTemplate"}}`,
+ data: () => ({ themeSwitcher }),
+ });
+</script>
+{{end}} \ No newline at end of file