195 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| {% load django_htmx %}
 | |
| <!DOCTYPE html>
 | |
| <html lang="en">
 | |
|     {% load static %}
 | |
|     <head>
 | |
|         <meta charset="utf-8" />
 | |
|         <meta name="description" content="Self-hosted time-tracker." />
 | |
|         <meta name="keywords" content="time, tracking, video games, self-hosted" />
 | |
|         <meta name="viewport" content="width=device-width, initial-scale=1" />
 | |
|         <title>Timetracker -
 | |
|             {% block title %}
 | |
|                 Untitled
 | |
|             {% endblock title %}
 | |
|         </title>
 | |
|         <script src="{% static 'js/htmx.min.js' %}"></script>
 | |
|         {% django_htmx_script %}
 | |
|         <link rel="stylesheet" href="{% static 'base.css' %}" />
 | |
|         <script src="https://cdn.jsdelivr.net/npm/flowbite@2.4.1/dist/flowbite.min.js"></script>
 | |
|         <script>
 | |
|         // On page load or when changing themes, best to add inline in `head` to avoid FOUC
 | |
|         if (localStorage.getItem('color-theme') === 'dark' || (!('color-theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
 | |
|             document.documentElement.classList.add('dark');
 | |
|         } else {
 | |
|             document.documentElement.classList.remove('dark')
 | |
|         }
 | |
|         </script>
 | |
|     </head>
 | |
|     <body hx-indicator="#indicator">
 | |
|         <img id="indicator"
 | |
|              src="{% static 'icons/loading.png' %}"
 | |
|              class="absolute right-3 top-3 animate-spin htmx-indicator"
 | |
|              height="24"
 | |
|              width="24"
 | |
|              alt="loading indicator" />
 | |
|         <div class="flex flex-col min-h-screen">
 | |
|             <nav class="dark:bg-gray-900 border-gray-200 h-24 flex items-center">
 | |
|                 <div class="container flex flex-wrap items-center justify-between mx-auto">
 | |
|                     <a href="{% url 'list_sessions_recent' %}" class="flex items-center">
 | |
|                         <span class="text-4xl">
 | |
|                             <img src="{% static 'icons/schedule.png' %}"
 | |
|                                  height="48"
 | |
|                                  width="48"
 | |
|                                  alt="Timetracker Logo"
 | |
|                                  class="mr-4" />
 | |
|                         </span>
 | |
|                         <span class="self-center text-xl font-semibold whitespace-nowrap text-white">Timetracker</span>
 | |
|                     </a>
 | |
|                     <div class="w-full md:block md:w-auto">
 | |
|                         <ul class="flex flex-col md:flex-row p-4 mt-4 dark:text-white">
 | |
|                             <button id="theme-toggle"
 | |
|                                     type="button"
 | |
|                                     class="text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-700 rounded-lg text-sm p-2.5">
 | |
|                                 <svg id="theme-toggle-dark-icon"
 | |
|                                      class="hidden w-5 h-5"
 | |
|                                      fill="currentColor"
 | |
|                                      viewBox="0 0 20 20"
 | |
|                                      xmlns="http://www.w3.org/2000/svg">
 | |
|                                     <path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"></path>
 | |
|                                 </svg>
 | |
|                                 <svg id="theme-toggle-light-icon"
 | |
|                                      class="hidden w-5 h-5"
 | |
|                                      fill="currentColor"
 | |
|                                      viewBox="0 0 20 20"
 | |
|                                      xmlns="http://www.w3.org/2000/svg">
 | |
|                                     <path d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z" fill-rule="evenodd" clip-rule="evenodd">
 | |
|                                     </path>
 | |
|                                 </svg>
 | |
|                             </button>
 | |
|                             <li class="relative group">
 | |
|                                 {% if user.is_authenticated %}
 | |
|                                     <a class="block py-2 pl-3 pr-4 hover:underline"
 | |
|                                        href="{% url 'add_game' %}">New</a>
 | |
|                                     <ul class="absolute hidden text-gray-700 pt-1 group-hover:block  w-auto whitespace-nowrap">
 | |
|                                         {% if purchase_available %}
 | |
|                                             <li>
 | |
|                                                 <a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap"
 | |
|                                                    href="{% url 'add_device' %}">Device</a>
 | |
|                                             </li>
 | |
|                                         {% endif %}
 | |
|                                         <li>
 | |
|                                             <a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap"
 | |
|                                                href="{% url 'add_game' %}">Game</a>
 | |
|                                         </li>
 | |
|                                         {% if game_available and platform_available %}
 | |
|                                             <li>
 | |
|                                                 <a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap"
 | |
|                                                    href="{% url 'add_edition' %}">Edition</a>
 | |
|                                             </li>
 | |
|                                         {% endif %}
 | |
|                                         <li>
 | |
|                                             <a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap"
 | |
|                                                href="{% url 'add_platform' %}">Platform</a>
 | |
|                                         </li>
 | |
|                                         {% if edition_available %}
 | |
|                                             <li>
 | |
|                                                 <a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap"
 | |
|                                                    href="{% url 'add_purchase' %}">Purchase</a>
 | |
|                                             </li>
 | |
|                                         {% endif %}
 | |
|                                         {% if purchase_available %}
 | |
|                                             <li>
 | |
|                                                 <a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap"
 | |
|                                                    href="{% url 'add_session' %}">Session</a>
 | |
|                                             </li>
 | |
|                                         {% endif %}
 | |
|                                     </ul>
 | |
|                                 </li>
 | |
|                                 {% if session_count > 0 %}
 | |
|                                     <li class="relative group">
 | |
|                                         <a class="block py-2 pl-3 pr-4 hover:underline"
 | |
|                                            href="{% url 'stats_by_year' 0 %}">Stats</a>
 | |
|                                         <ul class="absolute hidden text-gray-700 pt-1 group-hover:block">
 | |
|                                             <li>
 | |
|                                                 <a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap"
 | |
|                                                    href="{% url 'stats_by_year' 0 %}">Overall</a>
 | |
|                                             </li>
 | |
|                                             {% for year in stats_dropdown_year_range %}
 | |
|                                                 <li>
 | |
|                                                     <a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap"
 | |
|                                                        href="{% url 'stats_by_year' year %}">{{ year }}</a>
 | |
|                                                 </li>
 | |
|                                             {% endfor %}
 | |
|                                         </ul>
 | |
|                                     </li>
 | |
|                                     <li>
 | |
|                                         <a class="block py-2 pl-3 pr-4 hover:underline"
 | |
|                                            href="{% url 'list_sessions' %}">All
 | |
|                                         Sessions</a>
 | |
|                                     </li>
 | |
|                                     <li>
 | |
|                                         <a class="block py-2 pl-3 pr-4 hover:underline"
 | |
|                                            href="{% url 'logout' %}">Log Out</a>
 | |
|                                     </li>
 | |
|                                 {% endif %}
 | |
|                             {% endif %}
 | |
|                         </ul>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </nav>
 | |
|             <div class="flex flex-1 flex-col dark:bg-gray-800 pt-8">
 | |
|                 {% block content %}
 | |
|                     No content here.
 | |
|                 {% endblock content %}
 | |
|             </div>
 | |
|             {% load version %}
 | |
|             <span class="fixed left-2 bottom-2 text-xs text-slate-300 dark:text-slate-600">{% version %} ({% version_date
 | |
|             %})</span>
 | |
|         </div>
 | |
|         {% block scripts %}
 | |
|         {% endblock scripts %}
 | |
|         <script>
 | |
|         var themeToggleDarkIcon = document.getElementById('theme-toggle-dark-icon');
 | |
|         var themeToggleLightIcon = document.getElementById('theme-toggle-light-icon');
 | |
| 
 | |
|         // Change the icons inside the button based on previous settings
 | |
|         if (localStorage.getItem('color-theme') === 'dark' || (!('color-theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
 | |
|             themeToggleLightIcon.classList.remove('hidden');
 | |
|         } else {
 | |
|             themeToggleDarkIcon.classList.remove('hidden');
 | |
|         }
 | |
| 
 | |
|         var themeToggleBtn = document.getElementById('theme-toggle');
 | |
| 
 | |
|         themeToggleBtn.addEventListener('click', function () {
 | |
| 
 | |
|             // toggle icons inside button
 | |
|             themeToggleDarkIcon.classList.toggle('hidden');
 | |
|             themeToggleLightIcon.classList.toggle('hidden');
 | |
| 
 | |
|             // if set via local storage previously
 | |
|             if (localStorage.getItem('color-theme')) {
 | |
|                 if (localStorage.getItem('color-theme') === 'light') {
 | |
|                     document.documentElement.classList.add('dark');
 | |
|                     localStorage.setItem('color-theme', 'dark');
 | |
|                 } else {
 | |
|                     document.documentElement.classList.remove('dark');
 | |
|                     localStorage.setItem('color-theme', 'light');
 | |
|                 }
 | |
| 
 | |
|                 // if NOT set via local storage previously
 | |
|             } else {
 | |
|                 if (document.documentElement.classList.contains('dark')) {
 | |
|                     document.documentElement.classList.remove('dark');
 | |
|                     localStorage.setItem('color-theme', 'light');
 | |
|                 } else {
 | |
|                     document.documentElement.classList.add('dark');
 | |
|                     localStorage.setItem('color-theme', 'dark');
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|         });
 | |
|         </script>
 | |
|     </body>
 | |
| </html>
 |