Compare commits
3 Commits
6def13d2b6
...
63504a5768
Author | SHA1 | Date |
---|---|---|
Lukáš Kucharczyk | 63504a5768 | |
Lukáš Kucharczyk | fe7aec1b87 | |
Lukáš Kucharczyk | 3cdfb94fe2 |
Binary file not shown.
|
@ -1,3 +1,8 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from .models import Game, Purchase, Platform, Session
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
|
admin.site.register(Game)
|
||||||
|
admin.site.register(Purchase)
|
||||||
|
admin.site.register(Platform)
|
||||||
|
admin.site.register(Session)
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
- model: tracker.game
|
||||||
|
pk: 1
|
||||||
|
fields:
|
||||||
|
name: Nioh 2
|
||||||
|
wikidata: Q67482292
|
||||||
|
- model: tracker.game
|
||||||
|
pk: 2
|
||||||
|
fields:
|
||||||
|
name: Elden Ring
|
||||||
|
wikidata: Q64826862
|
||||||
|
- model: tracker.game
|
||||||
|
pk: 3
|
||||||
|
fields:
|
||||||
|
name: Cyberpunk 2077
|
||||||
|
wikidata: Q3182559
|
||||||
|
- model: tracker.purchase
|
||||||
|
pk: 1
|
||||||
|
fields:
|
||||||
|
game: 1
|
||||||
|
platform: 1
|
||||||
|
date_purchased: 2021-02-13
|
||||||
|
date_refunded: null
|
||||||
|
- model: tracker.purchase
|
||||||
|
pk: 2
|
||||||
|
fields:
|
||||||
|
game: 2
|
||||||
|
platform: 1
|
||||||
|
date_purchased: 2022-02-24
|
||||||
|
date_refunded: null
|
||||||
|
- model: tracker.purchase
|
||||||
|
pk: 3
|
||||||
|
fields:
|
||||||
|
game: 3
|
||||||
|
platform: 1
|
||||||
|
date_purchased: 2020-12-07
|
||||||
|
date_refunded: null
|
||||||
|
- model: tracker.platform
|
||||||
|
pk: 1
|
||||||
|
fields:
|
||||||
|
name: Steam
|
||||||
|
group: PC
|
||||||
|
- model: tracker.platform
|
||||||
|
pk: 3
|
||||||
|
fields:
|
||||||
|
name: Xbox Gamepass
|
||||||
|
group: PC
|
||||||
|
- model: tracker.platform
|
||||||
|
pk: 4
|
||||||
|
fields:
|
||||||
|
name: Epic Games Store
|
||||||
|
group: PC
|
||||||
|
- model: tracker.platform
|
||||||
|
pk: 5
|
||||||
|
fields:
|
||||||
|
name: Playstation 5
|
||||||
|
group: Playstation
|
||||||
|
- model: tracker.platform
|
||||||
|
pk: 6
|
||||||
|
fields:
|
||||||
|
name: Playstation 4
|
||||||
|
group: Playstation
|
||||||
|
- model: tracker.platform
|
||||||
|
pk: 7
|
||||||
|
fields:
|
||||||
|
name: Nintendo Switch
|
||||||
|
group: Nintendo
|
||||||
|
- model: tracker.platform
|
||||||
|
pk: 8
|
||||||
|
fields:
|
||||||
|
name: Nintendo 3DS
|
||||||
|
group: Nintendo
|
||||||
|
- model: tracker.session
|
||||||
|
pk: 1
|
||||||
|
fields:
|
||||||
|
purchase: 2
|
||||||
|
timestamp_start: 2022-12-31 14:25:58+00:00
|
||||||
|
timestamp_end: 2022-12-31 16:25:22+00:00
|
||||||
|
duration_manual: null
|
||||||
|
duration_calculated: null
|
||||||
|
note: ''
|
||||||
|
- model: tracker.session
|
||||||
|
pk: 3
|
||||||
|
fields:
|
||||||
|
purchase: 3
|
||||||
|
timestamp_start: 2023-01-01 22:00:23+00:00
|
||||||
|
timestamp_end: 2023-01-01 23:28:23+00:00
|
||||||
|
duration_manual: null
|
||||||
|
duration_calculated: null
|
||||||
|
note: ''
|
||||||
|
- model: tracker.session
|
||||||
|
pk: 4
|
||||||
|
fields:
|
||||||
|
purchase: 3
|
||||||
|
timestamp_start: 2020-01-01 23:29:17+00:00
|
||||||
|
timestamp_end: 2020-01-01 23:29:17+00:00
|
||||||
|
duration_manual: '12:00:00'
|
||||||
|
duration_calculated: null
|
||||||
|
note: ''
|
|
@ -1,6 +1,7 @@
|
||||||
# Generated by Django 4.1.4 on 2022-12-30 22:02
|
# Generated by Django 4.1.4 on 2023-01-02 18:27
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
@ -11,7 +12,68 @@ class Migration(migrations.Migration):
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name="TrackerModel",
|
name="Game",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("name", models.CharField(max_length=255)),
|
||||||
|
("wikidata", models.CharField(max_length=50)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Platform",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("name", models.CharField(max_length=255)),
|
||||||
|
("group", models.CharField(max_length=255)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Purchase",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.BigAutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("date_purchased", models.DateField()),
|
||||||
|
("date_refunded", models.DateField(blank=True, null=True)),
|
||||||
|
(
|
||||||
|
"game",
|
||||||
|
models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE, to="tracker.game"
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"platform",
|
||||||
|
models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="tracker.platform",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Session",
|
||||||
fields=[
|
fields=[
|
||||||
(
|
(
|
||||||
"id",
|
"id",
|
||||||
|
@ -22,10 +84,18 @@ class Migration(migrations.Migration):
|
||||||
verbose_name="ID",
|
verbose_name="ID",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
("name", models.CharField(max_length=200)),
|
|
||||||
("timestamp_start", models.DateTimeField()),
|
("timestamp_start", models.DateTimeField()),
|
||||||
("timestamp_end", models.DateTimeField()),
|
("timestamp_end", models.DateTimeField()),
|
||||||
("note", models.TextField()),
|
("duration_manual", models.DurationField(blank=True, null=True)),
|
||||||
|
("duration_calculated", models.DurationField(blank=True, null=True)),
|
||||||
|
("note", models.TextField(blank=True, null=True)),
|
||||||
|
(
|
||||||
|
"purchase",
|
||||||
|
models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
to="tracker.purchase",
|
||||||
|
),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
# Generated by Django 4.1.4 on 2022-12-31 12:35
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
("tracker", "0001_initial"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name="Game",
|
|
||||||
fields=[
|
|
||||||
(
|
|
||||||
"id",
|
|
||||||
models.BigAutoField(
|
|
||||||
auto_created=True,
|
|
||||||
primary_key=True,
|
|
||||||
serialize=False,
|
|
||||||
verbose_name="ID",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
("name", models.CharField(max_length=255)),
|
|
||||||
("wikidata", models.CharField(max_length=50)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name="Platform",
|
|
||||||
fields=[
|
|
||||||
(
|
|
||||||
"id",
|
|
||||||
models.BigAutoField(
|
|
||||||
auto_created=True,
|
|
||||||
primary_key=True,
|
|
||||||
serialize=False,
|
|
||||||
verbose_name="ID",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
("name", models.CharField(max_length=255)),
|
|
||||||
("group", models.CharField(max_length=255)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name="Purchase",
|
|
||||||
fields=[
|
|
||||||
(
|
|
||||||
"id",
|
|
||||||
models.BigAutoField(
|
|
||||||
auto_created=True,
|
|
||||||
primary_key=True,
|
|
||||||
serialize=False,
|
|
||||||
verbose_name="ID",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
("date_purchased", models.DateTimeField()),
|
|
||||||
("date_refunded", models.DateTimeField()),
|
|
||||||
(
|
|
||||||
"game",
|
|
||||||
models.ForeignKey(
|
|
||||||
on_delete=django.db.models.deletion.CASCADE, to="tracker.game"
|
|
||||||
),
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"platform",
|
|
||||||
models.ForeignKey(
|
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
|
||||||
to="tracker.platform",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name="Session",
|
|
||||||
fields=[
|
|
||||||
(
|
|
||||||
"id",
|
|
||||||
models.BigAutoField(
|
|
||||||
auto_created=True,
|
|
||||||
primary_key=True,
|
|
||||||
serialize=False,
|
|
||||||
verbose_name="ID",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
("timestamp_start", models.DateTimeField()),
|
|
||||||
("timestamp_end", models.DateTimeField()),
|
|
||||||
("duration_manual", models.DurationField()),
|
|
||||||
("duration_calculated", models.DurationField()),
|
|
||||||
("note", models.TextField()),
|
|
||||||
(
|
|
||||||
"purchase",
|
|
||||||
models.ForeignKey(
|
|
||||||
on_delete=django.db.models.deletion.CASCADE,
|
|
||||||
to="tracker.purchase",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.DeleteModel(
|
|
||||||
name="TrackerModel",
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Generated by Django 4.1.4 on 2022-12-31 13:03
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
("tracker", "0002_game_platform_purchase_session_delete_trackermodel"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="purchase",
|
|
||||||
name="date_purchased",
|
|
||||||
field=models.DateField(),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="purchase",
|
|
||||||
name="date_refunded",
|
|
||||||
field=models.DateField(),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,18 +0,0 @@
|
||||||
# Generated by Django 4.1.4 on 2022-12-31 13:04
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
("tracker", "0003_alter_purchase_date_purchased_and_more"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="purchase",
|
|
||||||
name="date_refunded",
|
|
||||||
field=models.DateField(blank=True),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,18 +0,0 @@
|
||||||
# Generated by Django 4.1.4 on 2022-12-31 13:08
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
("tracker", "0004_alter_purchase_date_refunded"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="purchase",
|
|
||||||
name="date_refunded",
|
|
||||||
field=models.DateField(blank=True, null=True),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,28 +0,0 @@
|
||||||
# Generated by Django 4.1.4 on 2022-12-31 13:26
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
("tracker", "0005_alter_purchase_date_refunded"),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="session",
|
|
||||||
name="duration_calculated",
|
|
||||||
field=models.DurationField(blank=True, null=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="session",
|
|
||||||
name="duration_manual",
|
|
||||||
field=models.DurationField(blank=True, null=True),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
|
||||||
model_name="session",
|
|
||||||
name="note",
|
|
||||||
field=models.TextField(blank=True, null=True),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,4 +1,5 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
|
|
||||||
class Game(models.Model):
|
class Game(models.Model):
|
||||||
|
@ -31,12 +32,20 @@ class Session(models.Model):
|
||||||
purchase = models.ForeignKey("Purchase", on_delete=models.CASCADE)
|
purchase = models.ForeignKey("Purchase", on_delete=models.CASCADE)
|
||||||
timestamp_start = models.DateTimeField()
|
timestamp_start = models.DateTimeField()
|
||||||
timestamp_end = models.DateTimeField()
|
timestamp_end = models.DateTimeField()
|
||||||
duration_manual = models.DurationField(blank=True, null=True)
|
duration_manual = models.DurationField(blank=True, null=True, default=timedelta(0))
|
||||||
duration_calculated = models.DurationField(blank=True, null=True)
|
duration_calculated = models.DurationField(blank=True, null=True)
|
||||||
note = models.TextField(blank=True, null=True)
|
note = models.TextField(blank=True, null=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.purchase
|
mark = ", manual" if self.duration_manual != None else ""
|
||||||
|
return f"{str(self.purchase)} {str(self.timestamp_start.date())} ({self.total_duration()}{mark})"
|
||||||
|
|
||||||
def calculated_duration(self):
|
def calculated_duration(self):
|
||||||
return self.timestamp_end - self.timestamp_start
|
return self.timestamp_end - self.timestamp_start
|
||||||
|
|
||||||
|
def total_duration(self):
|
||||||
|
return (
|
||||||
|
self.calculated_duration()
|
||||||
|
if self.duration_manual == None
|
||||||
|
else self.duration_manual + self.calculated_duration()
|
||||||
|
)
|
||||||
|
|
|
@ -726,10 +726,6 @@ select {
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mr-3 {
|
|
||||||
margin-right: 0.75rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mt-4 {
|
.mt-4 {
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
}
|
}
|
||||||
|
@ -746,10 +742,6 @@ select {
|
||||||
display: grid;
|
display: grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
.h-6 {
|
|
||||||
height: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.w-full {
|
.w-full {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
@ -798,38 +790,20 @@ select {
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.rounded-lg {
|
|
||||||
border-radius: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.rounded-xl {
|
.rounded-xl {
|
||||||
border-radius: 0.75rem;
|
border-radius: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.border {
|
|
||||||
border-width: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.border-gray-200 {
|
.border-gray-200 {
|
||||||
--tw-border-opacity: 1;
|
--tw-border-opacity: 1;
|
||||||
border-color: rgb(229 231 235 / var(--tw-border-opacity));
|
border-color: rgb(229 231 235 / var(--tw-border-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.border-gray-100 {
|
|
||||||
--tw-border-opacity: 1;
|
|
||||||
border-color: rgb(243 244 246 / var(--tw-border-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-white {
|
.bg-white {
|
||||||
--tw-bg-opacity: 1;
|
--tw-bg-opacity: 1;
|
||||||
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
|
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-gray-50 {
|
|
||||||
--tw-bg-opacity: 1;
|
|
||||||
background-color: rgb(249 250 251 / var(--tw-bg-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.p-4 {
|
.p-4 {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
}
|
}
|
||||||
|
@ -851,6 +825,11 @@ select {
|
||||||
padding-right: 1rem;
|
padding-right: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-4xl {
|
||||||
|
font-size: 2.25rem;
|
||||||
|
line-height: 2.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
.text-xl {
|
.text-xl {
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
line-height: 1.75rem;
|
line-height: 1.75rem;
|
||||||
|
@ -861,15 +840,15 @@ select {
|
||||||
line-height: 1.75rem;
|
line-height: 1.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.text-4xl {
|
|
||||||
font-size: 2.25rem;
|
|
||||||
line-height: 2.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.font-semibold {
|
.font-semibold {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-white {
|
||||||
|
--tw-text-opacity: 1;
|
||||||
|
color: rgb(255 255 255 / var(--tw-text-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
.shadow {
|
.shadow {
|
||||||
--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
|
||||||
--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
|
--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
|
||||||
|
@ -880,62 +859,29 @@ select {
|
||||||
text-decoration-line: underline;
|
text-decoration-line: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
.dark .dark\:border-white {
|
||||||
.dark\:border-gray-700 {
|
--tw-border-opacity: 1;
|
||||||
--tw-border-opacity: 1;
|
border-color: rgb(255 255 255 / var(--tw-border-opacity));
|
||||||
border-color: rgb(55 65 81 / var(--tw-border-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:border-white {
|
|
||||||
--tw-border-opacity: 1;
|
|
||||||
border-color: rgb(255 255 255 / var(--tw-border-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:bg-slate-800 {
|
|
||||||
--tw-bg-opacity: 1;
|
|
||||||
background-color: rgb(30 41 59 / var(--tw-bg-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:bg-gray-900 {
|
|
||||||
--tw-bg-opacity: 1;
|
|
||||||
background-color: rgb(17 24 39 / var(--tw-bg-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:bg-gray-800 {
|
|
||||||
--tw-bg-opacity: 1;
|
|
||||||
background-color: rgb(31 41 55 / var(--tw-bg-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:bg-slate-700 {
|
|
||||||
--tw-bg-opacity: 1;
|
|
||||||
background-color: rgb(51 65 85 / var(--tw-bg-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:text-white {
|
|
||||||
--tw-text-opacity: 1;
|
|
||||||
color: rgb(255 255 255 / var(--tw-text-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:text-gray-900 {
|
|
||||||
--tw-text-opacity: 1;
|
|
||||||
color: rgb(17 24 39 / var(--tw-text-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:text-slate-300 {
|
|
||||||
--tw-text-opacity: 1;
|
|
||||||
color: rgb(203 213 225 / var(--tw-text-opacity));
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark\:text-slate-400 {
|
|
||||||
--tw-text-opacity: 1;
|
|
||||||
color: rgb(148 163 184 / var(--tw-text-opacity));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 640px) {
|
.dark .dark\:bg-gray-900 {
|
||||||
.sm\:h-9 {
|
--tw-bg-opacity: 1;
|
||||||
height: 2.25rem;
|
background-color: rgb(17 24 39 / var(--tw-bg-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dark .dark\:bg-slate-700 {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(51 65 85 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .dark\:text-slate-300 {
|
||||||
|
--tw-text-opacity: 1;
|
||||||
|
color: rgb(203 213 225 / var(--tw-text-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .dark\:text-slate-400 {
|
||||||
|
--tw-text-opacity: 1;
|
||||||
|
color: rgb(148 163 184 / var(--tw-text-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
|
|
|
@ -11,12 +11,12 @@
|
||||||
<link rel="stylesheet" href="{% static 'base.css' %}" />
|
<link rel="stylesheet" href="{% static 'base.css' %}" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="bg-white dark:bg-slate-800 dark:text-white">
|
<body class="dark">
|
||||||
<nav class="mb-4 bg-white dark:bg-gray-900 border-gray-200 rounded">
|
<nav class="mb-4 bg-white dark:bg-gray-900 border-gray-200 rounded">
|
||||||
<div class="container flex flex-wrap items-center justify-between mx-auto">
|
<div class="container flex flex-wrap items-center justify-between mx-auto">
|
||||||
<a href="#" class="flex items-center">
|
<a href="#" class="flex items-center">
|
||||||
<span class="text-4xl">⌚</span>
|
<span class="text-4xl">⌚</span>
|
||||||
<span class="self-center text-xl font-semibold whitespace-nowrap">Timetracker</span>
|
<span class="self-center text-xl font-semibold whitespace-nowrap text-white">Timetracker</span>
|
||||||
</a>
|
</a>
|
||||||
<div class="w-full md:block md:w-auto">
|
<div class="w-full md:block md:w-auto">
|
||||||
<ul
|
<ul
|
||||||
|
|
|
@ -19,6 +19,7 @@ from django.views.generic import RedirectView
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path("admin/", admin.site.urls),
|
||||||
path("", RedirectView.as_view(url="/tracker/list-sessions")),
|
path("", RedirectView.as_view(url="/tracker/list-sessions")),
|
||||||
path("tracker/", include("tracker.urls")),
|
path("tracker/", include("tracker.urls")),
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue