update
This commit is contained in:
		
							
								
								
									
										163
									
								
								app/templates/colors.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								app/templates/colors.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| :root { | ||||
|     {% for mode, mode_colors in colors.items() %} | ||||
|         {% for name, value in mode_colors.items() %} | ||||
|             --{{ mode }}-{{ name }}: {{ value }}; | ||||
|         {% endfor %} | ||||
|     {% endfor %} | ||||
| } | ||||
|  | ||||
| /* Body */ | ||||
| body { | ||||
|     background-color: var(--light-background); | ||||
|     color: var(--light-title-text); | ||||
| } | ||||
|  | ||||
| .dark-mode { | ||||
|     background-color: var(--dark-background); | ||||
|     color: var(--dark-title-text); | ||||
| } | ||||
|  | ||||
| /* Header */ | ||||
| .header { | ||||
|     background-color: var(--light-header-bg, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .header { | ||||
|     background-color: var(--dark-header-bg, var(--dark-accent)); | ||||
| } | ||||
|  | ||||
| /* Icon Button */ | ||||
| .icon-button { | ||||
|     background-color: var(--light-icon-bg); | ||||
|     border: 1px solid var(--light-border, var(--light-accent)); | ||||
|     color: var(--light-icons); | ||||
| } | ||||
|  | ||||
| .icon-button:hover { | ||||
|     background-color: var(--light-icon-hover-bg); | ||||
| } | ||||
|  | ||||
| .dark-mode .icon-button { | ||||
|     background-color: var(--dark-icon-bg); | ||||
|     border: 1px solid var(--dark-border, var(--dark-accent)); | ||||
|     color: var(--dark-icons); | ||||
| } | ||||
|  | ||||
| .dark-mode .icon-button:hover { | ||||
|     background-color: var(--dark-icon-hover-bg); | ||||
| } | ||||
|  | ||||
| /* Group Title */ | ||||
| .group h2 { | ||||
|     color: var(--light-group-text, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .group h2 { | ||||
|     color: var(--dark-group-text, var(--dark-accent)); | ||||
| } | ||||
|  | ||||
| /* Router */ | ||||
| .router { | ||||
|     background-color: var(--light-router-bg); | ||||
|     color: var(--light-router-text); | ||||
| } | ||||
|  | ||||
| .router:hover { | ||||
|     box-shadow: 0 4px 8px var(--light-router-hover-shadow); | ||||
| } | ||||
|  | ||||
| .router h2 { | ||||
|     color: var(--light-router-title, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .router h2 { | ||||
|     color: var(--dark-router-title, var(--dark-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .router { | ||||
|     background-color: var(--dark-router-bg); | ||||
|     color: var(--dark-router-text); | ||||
| } | ||||
|  | ||||
| .dark-mode .router:hover { | ||||
|     box-shadow: 0 4px 8px var(--dark-router-hover-shadow); | ||||
| } | ||||
|  | ||||
| /* Group Title Icon */ | ||||
| .group-title .fa { | ||||
|     color: var(--light-group-text, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .group-title .fa { | ||||
|     color: var(--dark-group-text, var(--dark-accent)); | ||||
| } | ||||
|  | ||||
| /* Settings Menu Icon */ | ||||
| .settings-menu .fa { | ||||
|     color: var(--light-icons); | ||||
| } | ||||
|  | ||||
| .dark-mode .settings-menu .fa { | ||||
|     color: var(--dark-icons); | ||||
| } | ||||
|  | ||||
| /* Router Icon */ | ||||
| .router svg { | ||||
|     font-size: 26px; | ||||
|     color: var(--light-router-title, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .router svg { | ||||
|     color: var(--dark-router-title, var(--dark-accent)); | ||||
| } | ||||
|  | ||||
| /* Footer */ | ||||
| .footer { | ||||
|     background-color: var(--light-footer-bg, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .footer { | ||||
|     background-color: var(--dark-footer-bg); | ||||
| } | ||||
|  | ||||
| /* Search Bar */ | ||||
| .search-bar { | ||||
|     background-color: var(--light-search-bar-bg); | ||||
| } | ||||
|  | ||||
| .dark-mode .search-bar { | ||||
|     background-color: var(--dark-search-bar-bg); | ||||
| } | ||||
|  | ||||
| .search-bar i { | ||||
|     color: var(--light-search-bar-icon, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .search-bar svg { | ||||
|     color: var(--light-search-bar-icon, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .search-bar svg { | ||||
|     color: var(--dark-search-bar-icon, var(--dark-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .search-bar i { | ||||
|     color: var(--dark-search-bar-icon, var(--dark-accent)); | ||||
| } | ||||
|  | ||||
| .search-bar input { | ||||
|     color: var(--light-search-bar-input, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .search-bar input { | ||||
|     color: var(--dark-search-bar-input, var(--dark-accent)); | ||||
| } | ||||
|  | ||||
| /* Selected Router */ | ||||
| .router.selected { | ||||
|     border: 2px solid var(--light-selected-router-border, var(--light-accent)); | ||||
| } | ||||
|  | ||||
| .dark-mode .router.selected { | ||||
|     border: 2px solid var(--dark-selected-router-border, var(--dark-accent)); | ||||
| } | ||||
							
								
								
									
										55
									
								
								app/templates/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								app/templates/index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="UTF-8"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||
|     <title>{{ title }}</title> | ||||
|     <link rel="stylesheet" href="{{ url_for('static', filename='css/colors.css') }}"> | ||||
|     <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}"> | ||||
|     <link rel="stylesheet" href="{{ url_for('static', filename='css/components.css') }}"> | ||||
|     <link rel="icon" href="{{ url_for('static', filename='tf.png')  }}" type="image/png">  | ||||
|     <script src="{{ url_for('static', filename='js/fontawesome.js') }}" defer></script> | ||||
|     <script src="{{ url_for('static', filename='js/scripts.js') }}" defer></script> | ||||
| </head> | ||||
| <body> | ||||
|     <div id="header" class="header"> | ||||
|         <h1>{{ title }}</h1> | ||||
|         <div class="settings"> | ||||
|             <button class="icon-button" onclick="toggleSettings()"><i class="fas fa-cog"></i></button> | ||||
|             <div id="settings-menu" class="settings-menu"> | ||||
|                 <button class="icon-button" onclick="toggleDarkMode()"><i id="theme-icon" class="fas fa-moon"></i></button> | ||||
|                 <button class="icon-button" onclick="refreshData()"><i class="fas fa-sync-alt"></i></button> | ||||
|                 <button class="icon-button" onclick="toggleViewMode()"><i class="fas fa-list" id="view-mode-icon"></i></button> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="content" id="content"> | ||||
|         {% for group, data in groups.items() %} | ||||
|             <div class="group {% if data.collapsed %}collapsed{% endif %}" id="{{ group }}" data-collapsed="{{ data.collapsed }}"> | ||||
|                 <h2 class="group-title" onclick="toggleGroup('{{ group }}')"><i class="{{ data.icon }}"></i> {{ group }}</h2> | ||||
|                 <div class="router-container"> | ||||
|                     {% for router in data.routers %} | ||||
|                         <div class="router" onclick="window.open('{{ router['protocol'] }}://{{ router['rule'].split('`')[1] }}', '{{ router['target'] }}')"> | ||||
|                             <i class="{{ router['icon'] }}"></i> | ||||
|                             <div> | ||||
|                                 <h2>{{ router['display_name'] }}</h2> | ||||
|                                 {% if router['description'] %} | ||||
|                                     <p>{{ router['description'] }}</p> | ||||
|                                 {% endif %} | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     {% endfor %} | ||||
|                 </div> | ||||
|             </div> | ||||
|         {% endfor %} | ||||
|     </div> | ||||
|     <div class="footer"> | ||||
|         <div class="search-bar"> | ||||
|             <i class="fas fa-search" id="start-search" onclick="searchFocus()"></i> | ||||
|             <input type="text" id="search-input" placeholder="Search..."> | ||||
|             <i class="fas fa-times" id="clear-search" onclick="clearSearch()"></i> | ||||
|         </div> | ||||
|     </div> | ||||
| </body> | ||||
| </html> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user