mirror of
				https://github.com/MHSanaei/3x-ui.git
				synced 2025-10-30 20:02:51 +00:00 
			
		
		
		
	 db24d21621
			
		
	
	
		db24d21621
		
			
		
	
	
	
	
		
			
			* UI Improvements Better Table Update QR Code Modal Better Info Modal Compression HTML files Better Dropdown Menu Better Calendar and more .. Remove files Minor Fixes
		
			
				
	
	
		
			113 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| {{define "component/themeSwitchTemplate"}}
 | |
| <template>
 | |
|   <a-menu :theme="themeSwitcher.currentTheme" mode="inline" selected-keys="">
 | |
|     <a-sub-menu>
 | |
|       <span slot="title">
 | |
|         <a-icon type="bulb" :theme="themeSwitcher.isDarkTheme ? 'filled' : 'outlined'"></a-icon>
 | |
|         <span>Theme</span>
 | |
|       </span>
 | |
|       <a-menu-item id="change-theme" class="ant-menu-theme-switch" @mousedown="themeSwitcher.animationsOff()"> Dark <a-switch style="margin-left: 2px;" size="small" :default-checked="themeSwitcher.isDarkTheme" @change="themeSwitcher.toggleTheme()"></a-switch>
 | |
|       </a-menu-item>
 | |
|       <a-menu-item id="change-theme-ultra" v-if="themeSwitcher.isDarkTheme" class="ant-menu-theme-switch" @mousedown="themeSwitcher.animationsOffUltra()"> Ultra <a-checkbox style="margin-left: 2px;" :checked="themeSwitcher.isUltra" @click="themeSwitcher.toggleUltra()"></a-checkbox>
 | |
|       </a-menu-item>
 | |
|     </a-sub-menu>
 | |
|   </a-menu>
 | |
| </template>
 | |
| {{end}}
 | |
| 
 | |
| {{define "component/themeSwitchTemplateLogin"}}
 | |
| <template>
 | |
|   <a-menu @mousedown="themeSwitcher.animationsOff()" id="change-theme" :theme="themeSwitcher.currentTheme" mode="inline" selected-keys="">
 | |
|     <a-menu-item mode="inline" class="ant-menu-theme-switch">
 | |
|       <a-icon type="bulb" :theme="themeSwitcher.isDarkTheme ? 'filled' : 'outlined'"></a-icon>
 | |
|       <a-switch size="small" :default-checked="themeSwitcher.isDarkTheme" @change="themeSwitcher.toggleTheme()"></a-switch>
 | |
|       <template v-if="themeSwitcher.isDarkTheme">
 | |
|         <a-checkbox style="margin-left: 1rem; vertical-align: middle;" :checked="themeSwitcher.isUltra" @click="themeSwitcher.toggleUltra()">Ultra</a-checkbox>
 | |
|       </template>
 | |
|     </a-menu-item>
 | |
|   </a-menu>
 | |
| </template>
 | |
| {{end}}
 | |
| 
 | |
| {{define "component/themeSwitcher"}}
 | |
| <script>
 | |
|   function createThemeSwitcher() {
 | |
|     const isDarkTheme = localStorage.getItem('dark-mode') === 'true';
 | |
|     const isUltra = localStorage.getItem('isUltraDarkThemeEnabled') === 'true';
 | |
|     if (isUltra) {
 | |
|       document.documentElement.setAttribute('data-theme', 'ultra-dark');
 | |
|     }
 | |
|     const theme = isDarkTheme ? 'dark' : 'light';
 | |
|     document.querySelector('body').setAttribute('class', theme);
 | |
|     return {
 | |
|       animationsOff() {
 | |
|         document.documentElement.setAttribute('data-theme-animations', 'off');
 | |
|         const themeAnimations = document.querySelector('#change-theme');
 | |
|         themeAnimations.addEventListener('mouseleave', () => {
 | |
|           document.documentElement.removeAttribute('data-theme-animations');
 | |
|         });
 | |
|         themeAnimations.addEventListener('touchend', () => {
 | |
|           document.documentElement.removeAttribute('data-theme-animations');
 | |
|         });
 | |
|       },
 | |
|       animationsOffUltra() {
 | |
|         document.documentElement.setAttribute('data-theme-animations', 'off');
 | |
|         const themeAnimationsUltra = document.querySelector('#change-theme-ultra');
 | |
|         themeAnimationsUltra.addEventListener('mouseleave', () => {
 | |
|           document.documentElement.removeAttribute('data-theme-animations');
 | |
|         });
 | |
|         themeAnimationsUltra.addEventListener('touchend', () => {
 | |
|           document.documentElement.removeAttribute('data-theme-animations');
 | |
|         });
 | |
|       },
 | |
|       isDarkTheme,
 | |
|       isUltra,
 | |
|       get currentTheme() {
 | |
|         return this.isDarkTheme ? 'dark' : 'light';
 | |
|       },
 | |
|       toggleTheme() {
 | |
|         this.isDarkTheme = !this.isDarkTheme;
 | |
|         localStorage.setItem('dark-mode', this.isDarkTheme);
 | |
|         document.querySelector('body').setAttribute('class', this.isDarkTheme ? 'dark' : 'light');
 | |
|         document.getElementById('message').className = themeSwitcher.currentTheme;
 | |
|       },
 | |
|       toggleUltra() {
 | |
|         this.isUltra = !this.isUltra;
 | |
|         if (this.isUltra) {
 | |
|           document.documentElement.setAttribute('data-theme', 'ultra-dark');
 | |
|         } else {
 | |
|           document.documentElement.removeAttribute('data-theme');
 | |
|         }
 | |
|         localStorage.setItem('isUltraDarkThemeEnabled', this.isUltra.toString());
 | |
|       }
 | |
|     };
 | |
|   }
 | |
|   const themeSwitcher = createThemeSwitcher();
 | |
|   Vue.component('theme-switch', {
 | |
|     props: [],
 | |
|     template: `{{template "component/themeSwitchTemplate"}}`,
 | |
|     data: () => ({
 | |
|       themeSwitcher
 | |
|     }),
 | |
|     mounted() {
 | |
|       this.$message.config({
 | |
|         getContainer: () => document.getElementById('message')
 | |
|       });
 | |
|       document.getElementById('message').className = themeSwitcher.currentTheme;
 | |
|     }
 | |
|   });
 | |
|   Vue.component('theme-switch-login', {
 | |
|     props: [],
 | |
|     template: `{{template "component/themeSwitchTemplateLogin"}}`,
 | |
|     data: () => ({
 | |
|       themeSwitcher
 | |
|     }),
 | |
|     mounted() {
 | |
|       this.$message.config({
 | |
|         getContainer: () => document.getElementById('message')
 | |
|       });
 | |
|       document.getElementById('message').className = themeSwitcher.currentTheme;
 | |
|     }
 | |
|   });
 | |
| </script>
 | |
| {{end}}
 |