192 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| {% extends "base.html" %}
 | |
| {% block title %}
 | |
|     {{ title }}
 | |
| {% endblock title %}
 | |
| {% load static %}
 | |
| {% load markdown_extras %}
 | |
| {% block content %}
 | |
|     <div class="dark:text-white max-w-sm sm:max-w-xl lg:max-w-3xl mx-auto">
 | |
|         <div id="game-info" class="mb-10">
 | |
|             <div class="flex gap-5 mb-3">
 | |
|                 <span class="text-wrap max-w-80 text-4xl">
 | |
|                     <span class="font-bold font-serif">{{ game.name }}</span> <span data-popover-target="popover-year" class="text-slate-500 text-2xl">{{ game.year_released }}</span>
 | |
|                     {% #popover id="popover-year" %}
 | |
|                     Original release year
 | |
|                     {% /popover %}
 | |
|                 </span>
 | |
|             </div>
 | |
|             <div class="flex gap-4 dark:text-slate-400 mb-3">
 | |
|                 <span data-popover-target="popover-hours" class="flex gap-2 items-center">
 | |
|                     <svg xmlns="http://www.w3.org/2000/svg"
 | |
|                          fill="none"
 | |
|                          viewBox="0 0 24 24"
 | |
|                          stroke-width="1.5"
 | |
|                          stroke="currentColor"
 | |
|                          class="size-6">
 | |
|                         <path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
 | |
|                     </svg>
 | |
|                     {{ hours_sum }}
 | |
|                     {% #popover id="popover-hours" %}
 | |
|                     Total hours played
 | |
|                     {% /popover %}
 | |
|                 </span>
 | |
|                 <span data-popover-target="popover-sessions"
 | |
|                       class="flex gap-2 items-center">
 | |
|                     <svg xmlns="http://www.w3.org/2000/svg"
 | |
|                          fill="none"
 | |
|                          viewBox="0 0 24 24"
 | |
|                          stroke-width="1.5"
 | |
|                          stroke="currentColor"
 | |
|                          class="size-6">
 | |
|                         <path stroke-linecap="round" stroke-linejoin="round" d="M5.25 8.25h15m-16.5 7.5h15m-1.8-13.5-3.9 19.5m-2.1-19.5-3.9 19.5" />
 | |
|                     </svg>
 | |
|                     {{ session_count }}
 | |
|                     {% #popover id="popover-sessions" %}
 | |
|                     Number of sessions
 | |
|                     {% /popover %}
 | |
|                 </span>
 | |
|                 <span data-popover-target="popover-average" class="flex gap-2 items-center">
 | |
|                     <svg xmlns="http://www.w3.org/2000/svg"
 | |
|                          fill="none"
 | |
|                          viewBox="0 0 24 24"
 | |
|                          stroke-width="1.5"
 | |
|                          stroke="currentColor"
 | |
|                          class="size-6">
 | |
|                         <path stroke-linecap="round" stroke-linejoin="round" d="M7.5 14.25v2.25m3-4.5v4.5m3-6.75v6.75m3-9v9M6 20.25h12A2.25 2.25 0 0 0 20.25 18V6A2.25 2.25 0 0 0 18 3.75H6A2.25 2.25 0 0 0 3.75 6v12A2.25 2.25 0 0 0 6 20.25Z" />
 | |
|                     </svg>
 | |
|                     {{ session_average_without_manual }}
 | |
|                     {% #popover id="popover-average" %}
 | |
|                     Average playtime per session
 | |
|                     {% /popover %}
 | |
|                 </span>
 | |
|                 <span data-popover-target="popover-playrange"
 | |
|                       class="flex gap-2 items-center">
 | |
|                     <svg xmlns="http://www.w3.org/2000/svg"
 | |
|                          fill="none"
 | |
|                          viewBox="0 0 24 24"
 | |
|                          stroke-width="1.5"
 | |
|                          stroke="currentColor"
 | |
|                          class="size-6">
 | |
|                         <path stroke-linecap="round" stroke-linejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5m-9-6h.008v.008H12v-.008ZM12 15h.008v.008H12V15Zm0 2.25h.008v.008H12v-.008ZM9.75 15h.008v.008H9.75V15Zm0 2.25h.008v.008H9.75v-.008ZM7.5 15h.008v.008H7.5V15Zm0 2.25h.008v.008H7.5v-.008Zm6.75-4.5h.008v.008h-.008v-.008Zm0 2.25h.008v.008h-.008V15Zm0 2.25h.008v.008h-.008v-.008Zm2.25-4.5h.008v.008H16.5v-.008Zm0 2.25h.008v.008H16.5V15Z" />
 | |
|                     </svg>
 | |
|                     {{ playrange }}
 | |
|                     {% #popover id="popover-playrange" %}
 | |
|                     Earliest and latest dates played
 | |
|                     {% /popover %}
 | |
|                 </span>
 | |
|             </div>
 | |
|             <div class="inline-flex rounded-md shadow-sm mb-3" role="group">
 | |
|                 <a href="{% url 'edit_game' game.id %}">
 | |
|                     <button type="button"
 | |
|                             class="px-4 py-2 text-sm font-medium text-gray-900 bg-white border border-gray-200 rounded-s-lg hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:bg-gray-800 dark:border-gray-700 dark:text-white dark:hover:text-white dark:hover:bg-gray-700 dark:focus:ring-blue-500 dark:focus:text-white">
 | |
|                         Edit
 | |
|                     </button>
 | |
|                 </a>
 | |
|                 <a href="{% url 'delete_game' game.id %}">
 | |
|                     <button type="button"
 | |
|                             class="px-4 py-2 text-sm font-medium text-gray-900 bg-white border border-gray-200 rounded-e-lg hover:bg-red-100 hover:text-blue-700 focus:z-10 focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:bg-gray-800 dark:border-gray-700 dark:text-white dark:hover:text-white dark:hover:bg-red-700 dark:focus:ring-blue-500 dark:focus:text-white">
 | |
|                         Delete
 | |
|                     </button>
 | |
|                 </a>
 | |
|             </div>
 | |
|         </div>
 | |
|         <h1 class="text-3xl mt-4 mb-1 font-condensed">
 | |
|             Editions <span class="dark:text-slate-500">({{ edition_count }})</span> and Purchases <span class="dark:text-slate-500">({{ purchase_count }})</span>
 | |
|         </h1>
 | |
|         <ul>
 | |
|             {% for edition in editions %}
 | |
|                 <li class="sm:pl-2 flex items-center">
 | |
|                     {{ edition.name }} ({{ edition.platform }}, {{ edition.year_released }})
 | |
|                     {% if edition.wikidata %}
 | |
|                         <span class="hidden sm:inline">
 | |
|                             <a href="https://www.wikidata.org/wiki/{{ edition.wikidata }}">
 | |
|                                 <img class="inline mx-2 w-6"
 | |
|                                      width="48"
 | |
|                                      height="48"
 | |
|                                      alt="Wikidata Icon"
 | |
|                                      src="{% static 'icons/wikidata.png' %}" />
 | |
|                             </a>
 | |
|                         </span>
 | |
|                     {% endif %}
 | |
|                     {% url 'edit_edition' edition.id as edit_url %}
 | |
|                     {% include "components/edit_button.html" with edit_url=edit_url %}
 | |
|                 </li>
 | |
|                 <ul>
 | |
|                     {% for purchase in edition.game_purchases %}
 | |
|                         <li class="sm:pl-6 flex items-center {% if purchase.date_refunded %}text-red-600{% endif %}">
 | |
|                             {{ purchase.get_ownership_type_display }}, {{ purchase.date_purchased | date:"Y" }}
 | |
|                             {% if purchase.price != 0 %}({{ purchase.price }} {{ purchase.price_currency }}){% endif %}
 | |
|                             {% url 'edit_purchase' purchase.id as edit_url %}
 | |
|                             {% include "components/edit_button.html" with edit_url=edit_url %}
 | |
|                         </li>
 | |
|                         <ul>
 | |
|                             {% for related_purchase in purchase.nongame_related_purchases %}
 | |
|                                 <li class="sm:pl-12 flex items-center">
 | |
|                                     {{ related_purchase.name }} ({{ related_purchase.get_type_display }}, {{ purchase.platform }}, {{ related_purchase.date_purchased | date:"Y" }}, {{ related_purchase.price }} {{ related_purchase.price_currency }})
 | |
|                                     {% url 'edit_purchase' related_purchase.id as edit_url %}
 | |
|                                     {% include "components/edit_button.html" with edit_url=edit_url %}
 | |
|                                 </li>
 | |
|                             {% endfor %}
 | |
|                         </ul>
 | |
|                     {% endfor %}
 | |
|                 </ul>
 | |
|             {% endfor %}
 | |
|         </ul>
 | |
|         <h1 class="text-3xl mt-4 mb-1 flex gap-2 items-center font-condensed">
 | |
|             Sessions
 | |
|             <span class="dark:text-slate-500" id="session-count">({{ session_count }})</span>
 | |
|             {% if latest_session_id %}
 | |
|                 {% url 'view_game_start_session_from_session' latest_session_id as add_session_link %}
 | |
|                 <a class="truncate max-w-xs py-1 px-2 text-xs bg-green-600 hover:bg-green-700 focus:ring-green-500 focus:ring-offset-blue-200 text-white transition ease-in duration-200 text-center font-semibold shadow-md focus:outline-none focus:ring-2 focus:ring-offset-2 rounded-sm"
 | |
|                    title="Start new session"
 | |
|                    href="{{ add_session_link }}"
 | |
|                    hx-get="{{ add_session_link }}"
 | |
|                    hx-vals="js:{session_count:getSessionCount()}"
 | |
|                    hx-target="#session-list"
 | |
|                    hx-swap="afterbegin">New</a>
 | |
|             {% endif %}
 | |
|             and Notes <span class="dark:text-slate-500">({{ sessions_with_notes_count }})</span>
 | |
|         </h1>
 | |
|         <ul id="session-list">
 | |
|             {% for session in sessions %}
 | |
|                 {% partialdef session-info inline=True %}
 | |
|                 <li class="sm:pl-2 mt-4 mb-2 dark:text-slate-400 flex items-center space-x-1">
 | |
|                     {{ session.timestamp_start | date:"d/m/Y H:i" }}
 | |
|                     {% if session.timestamp_end %}-{{ session.timestamp_end | date:"H:i" }}{% endif %}
 | |
|                     ({{ session.device.get_type_display | default:"Unknown" }}, {{ session.duration_formatted }})
 | |
|                     {% url 'edit_session' session.id as edit_url %}
 | |
|                     {% include "components/edit_button.html" with edit_url=edit_url %}
 | |
|                     {% if not session.timestamp_end %}
 | |
|                         {% url 'view_game_end_session' session.id as end_session_url %}
 | |
|                         <a class="flex bg-green-600 rounded-full px-2 w-7 h-4 text-white justify-center items-center"
 | |
|                            href="{{ end_session_url }}"
 | |
|                            hx-get="{{ end_session_url }}"
 | |
|                            hx-target="closest li"
 | |
|                            hx-swap="outerHTML"
 | |
|                            hx-vals="js:{session_count:getSessionCount()}"
 | |
|                            hx-indicator="#indicator">
 | |
|                             <svg xmlns="http://www.w3.org/2000/svg"
 | |
|                                  fill="#ffffff"
 | |
|                                  class="h-3"
 | |
|                                  x="0px"
 | |
|                                  y="0px"
 | |
|                                  viewBox="0 0 24 24">
 | |
|                                 <path d="M 12 2 C 6.486 2 2 6.486 2 12 C 2 17.514 6.486 22 12 22 C 17.514 22 22 17.514 22 12 C 22 10.874 21.803984 9.7942031 21.458984 8.7832031 L 19.839844 10.402344 C 19.944844 10.918344 20 11.453 20 12 C 20 16.411 16.411 20 12 20 C 7.589 20 4 16.411 4 12 C 4 7.589 7.589 4 12 4 C 13.633 4 15.151922 4.4938906 16.419922 5.3378906 L 17.851562 3.90625 C 16.203562 2.71225 14.185 2 12 2 z M 21.292969 3.2929688 L 11 13.585938 L 7.7070312 10.292969 L 6.2929688 11.707031 L 11 16.414062 L 22.707031 4.7070312 L 21.292969 3.2929688 z">
 | |
|                                 </path>
 | |
|                             </svg>
 | |
|                         </a>
 | |
|                     {% endif %}
 | |
|                 </li>
 | |
|                 <li class="sm:pl-4 markdown-content">{{ session.note|markdown }}</li>
 | |
|                 <div class="hidden" hx-swap-oob="innerHTML:#session-count">({{ session_count }})</div>
 | |
|             {% endpartialdef %}
 | |
|         {% endfor %}
 | |
|     </ul>
 | |
| </div>
 | |
| <script>
 | |
|         function getSessionCount() {
 | |
|             return document.getElementById('session-count').textContent.match("[0-9]+");
 | |
|         }
 | |
| </script>
 | |
| {% endblock content %}
 |