From 890d50f23097e0b610971f03609d653ba92ccea2 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Wed, 13 Jul 2022 16:44:04 +0300 Subject: [PATCH 01/10] Added data models and loading some information from DB --- faerun_calendar/admin.py | 7 +- faerun_calendar/models.py | 78 ++++++++++++++++++- .../static/faerun_calendar/css/main.css | 4 + .../templates/faerun_calendar/calendar.html | 22 ------ .../templates/faerun_calendar/index.html | 9 ++- .../templates/faerun_calendar/month.html | 67 ++++++---------- faerun_calendar/tests.py | 42 +++++++++- faerun_calendar/views.py | 27 ++++++- links/views.py | 2 +- 9 files changed, 186 insertions(+), 72 deletions(-) delete mode 100644 faerun_calendar/templates/faerun_calendar/calendar.html diff --git a/faerun_calendar/admin.py b/faerun_calendar/admin.py index 8c38f3f..98c2da3 100644 --- a/faerun_calendar/admin.py +++ b/faerun_calendar/admin.py @@ -1,3 +1,8 @@ from django.contrib import admin +from .models import CalendarData +from .models import MonthData +from .models import Event -# Register your models here. +admin.site.register(CalendarData) +admin.site.register(MonthData) +admin.site.register(Event) diff --git a/faerun_calendar/models.py b/faerun_calendar/models.py index 71a8362..50bc577 100644 --- a/faerun_calendar/models.py +++ b/faerun_calendar/models.py @@ -1,3 +1,79 @@ from django.db import models -# Create your models here. + +class FaerunDate: + LAST_MONTH = 18 + LEAP_MONTH = 11 + ONE_DAY_MONTHS = (2, 6, 10, 11, 14, 17) + LAST_DAY = 30 + + def __init__(self, year: int, month: int, day: int): + self.year = year + self.month = month + self.day = day + self.is_leap_year = self._is_leap_year() + self.is_valid = self._is_valid() + + def __repr__(self): + return f'{type(self).__name__}({self.year}, {self.month}, {self.day})' + + def _is_leap_year(self) -> bool: + if self.year == 0: + return False + elif self.year % 400 == 0: + return True + elif self.year % 100 == 0: + return False + elif self.year % 4 == 0: + return True + return False + + def _is_valid(self) -> bool: + if self.year == 0: + return False + + if not 0 < self.month <= FaerunDate.LAST_MONTH: + return False + + if not self.is_leap_year and self.month == self.__class__.LEAP_MONTH: + return False + + if not 0 < self.day <= FaerunDate.LAST_DAY: + return False + + if self.day > 1 and self.month in FaerunDate.ONE_DAY_MONTHS: + return False + + return True + + +class CalendarData(models.Model): + current_year = models.SmallIntegerField('CurrentYear') + current_month = models.SmallIntegerField('CurrentMonth') + current_day = models.SmallIntegerField('CurrentDay') + leap_month = models.SmallIntegerField('LeapMonth') + + def __str__(self): + return f'({self.current_year}, {self.current_month}, {self.current_day}, {self.leap_month})' + + +class MonthData(models.Model): + number = models.SmallIntegerField('Number', unique=True) + name = models.CharField('Name', max_length=64, unique=True) + folkname = models.CharField('Folkname', max_length=64, blank=True) + is_oneday = models.BooleanField('IsOneday') + + def __str__(self): + return f'({self.number}, {self.name}, {self.folkname}, {self.is_oneday})' + + +class Event(models.Model): + year = models.SmallIntegerField('Year') + month = models.SmallIntegerField('Month') + day = models.SmallIntegerField('Day') + time = models.TimeField('Time') + title = models.CharField('Title', max_length=250) + description = models.TextField('Description', max_length=2500) + + def __str__(self): + return f'({self.year}, {self.month}, {self.day}, {self.time}, {self.title})' diff --git a/faerun_calendar/static/faerun_calendar/css/main.css b/faerun_calendar/static/faerun_calendar/css/main.css index 30960ed..d5f8d36 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -12,6 +12,10 @@ table.month, table.month th, table.month td { background: gainsboro; } +table.month th { + text-align: center; +} + table.month td { text-align: right; } diff --git a/faerun_calendar/templates/faerun_calendar/calendar.html b/faerun_calendar/templates/faerun_calendar/calendar.html deleted file mode 100644 index 992e9c8..0000000 --- a/faerun_calendar/templates/faerun_calendar/calendar.html +++ /dev/null @@ -1,22 +0,0 @@ -
- {% include 'faerun_calendar/month.html' with title="Хаммер" subtitle="Глубокозимье" %} - {% include 'faerun_calendar/month.html' with title="Зимний солнцеворот" subtitle="Мертвозимье" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Альтурик" subtitle="Коготь зимы" %} - {% include 'faerun_calendar/month.html' with title="Чез" subtitle="Коготь закатов" %} - {% include 'faerun_calendar/month.html' with title="Тарсак" subtitle="Коготь бурь" %} - {% include 'faerun_calendar/month.html' with title="Зеленотравье" oneday=1 %} - - {% include 'faerun_calendar/month.html' with title="Миртул" subtitle="Таяние" %} - {% include 'faerun_calendar/month.html' with title="Кайторн" subtitle="Время цветов" %} - {% include 'faerun_calendar/month.html' with title="Флеймрул" subtitle="Разгар лета" %} - {% include 'faerun_calendar/month.html' with title="Летний солнцеворот" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Шильдмит*" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Элесис" subtitle="Солнцестояние" %} - - {% include 'faerun_calendar/month.html' with title="Элейнт" subtitle="Увядание" %} - {% include 'faerun_calendar/month.html' with title="Праздник урожая" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Марпенот" subtitle="Листопад" %} - {% include 'faerun_calendar/month.html' with title="Уктар" subtitle="Перегной" %} - {% include 'faerun_calendar/month.html' with title="Пир луны" oneday=1 %} - {% include 'faerun_calendar/month.html' with title="Найтал" subtitle="Спячка" %} -
diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index cc3a8f3..904fb96 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -13,7 +13,14 @@ {% block content %}

Календарь

- {% include 'faerun_calendar/calendar.html' %} +

{{year}}

+
+ {% for month in month_data %} + {% if month.number != calendar_data.leap_month or is_leap_year %} + {% include 'faerun_calendar/month.html' with month=month month_days=month_days %} + {% endif %} + {% endfor %} +
{% endblock %} diff --git a/faerun_calendar/templates/faerun_calendar/month.html b/faerun_calendar/templates/faerun_calendar/month.html index 9dd9a39..b424da8 100644 --- a/faerun_calendar/templates/faerun_calendar/month.html +++ b/faerun_calendar/templates/faerun_calendar/month.html @@ -1,53 +1,32 @@
- + - {% if subtitle %} - + {% if month.folkname %} + {% endif %} - {% if oneday != 1 %} - - - - - - - - - - - - - - - - - - - - - - {% if title == "Миртул" %} - - {% else %} - - {% endif %} - - - - - - - - - - - - - - + {% if not month.is_oneday %} + {% for day in month_days %} + {% if forloop.counter0|divisibleby:10 %} + + {% endif %} + + {% if year == calendar_data.current_year and month.number == calendar_data.current_month and day == calendar_data.current_day %} + + + {% if forloop.counter|divisibleby:10 %} + + {% endif %} + {% endfor %} {% endif %}
{{title}}{{month.name}}
{{subtitle}}{{month.folkname}}
12345678910
1112131415161718191920
21222324252627282930
+ {% else %} + + {% endif %} + +
{{day}}
+ +
diff --git a/faerun_calendar/tests.py b/faerun_calendar/tests.py index 7ce503c..aca85a5 100644 --- a/faerun_calendar/tests.py +++ b/faerun_calendar/tests.py @@ -1,3 +1,43 @@ from django.test import TestCase +from .models import FaerunDate + + +class FaerunDateTestCase(TestCase): + class TestDate: + def __init__(self, date: FaerunDate, repr: str, is_leap_year: bool, is_valid: bool): + self.date = date + self.repr = repr + self.is_leap_year = is_leap_year + self.is_valid = is_valid + + def setUp(self): + self.dates = ( + FaerunDateTestCase.TestDate(FaerunDate(0, 0, 0), 'FaerunDate(0, 0, 0)', False, False), + FaerunDateTestCase.TestDate(FaerunDate(1, -1, 1), 'FaerunDate(1, -1, 1)', False, False), + FaerunDateTestCase.TestDate(FaerunDate(1, 1, 1), 'FaerunDate(1, 1, 1)', False, True), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, 1), 'FaerunDate(4, 1, 1)', True, True), + FaerunDateTestCase.TestDate(FaerunDate(4, -1, 1), 'FaerunDate(4, -1, 1)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 0, 1), 'FaerunDate(4, 0, 1)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 19, 1), 'FaerunDate(4, 19, 1)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, -1), 'FaerunDate(4, 1, -1)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, 0), 'FaerunDate(4, 1, 0)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, 31), 'FaerunDate(4, 1, 31)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 2, 2), 'FaerunDate(4, 2, 2)', True, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 1, 2), 'FaerunDate(4, 1, 2)', True, True), + FaerunDateTestCase.TestDate(FaerunDate(1, 11, 1), 'FaerunDate(1, 11, 1)', False, False), + FaerunDateTestCase.TestDate(FaerunDate(4, 11, 1), 'FaerunDate(4, 11, 1)', True, True), + ) + + def test_repr(self): + for date in self.dates: + self.assertEqual(date.date.__repr__(), date.repr) + + def test_leap(self): + for date in self.dates: + self.assertEqual(date.date.is_leap_year, date.is_leap_year, date.date.__repr__()) + + def test_valid(self): + for date in self.dates: + self.assertEqual(date.date.is_valid, date.is_valid, date.date.__repr__()) + -# Create your tests here. diff --git a/faerun_calendar/views.py b/faerun_calendar/views.py index 7436291..2dc4efc 100644 --- a/faerun_calendar/views.py +++ b/faerun_calendar/views.py @@ -1,6 +1,31 @@ from django.shortcuts import render +from .models import CalendarData +from .models import MonthData def index(request): - return render(request, 'faerun_calendar/index.html') + def is_leap_year(year) -> bool: + if year == 0: + return False + elif year % 400 == 0: + return True + elif year % 100 == 0: + return False + elif year % 4 == 0: + return True + return False + calendar_data = CalendarData.objects.first() + month_data = MonthData.objects.all() + + year = 1492 + + params = { + 'calendar_data': calendar_data, + 'month_data': month_data, + 'month_days': tuple(i+1 for i in range(30)), + 'year': year, + 'is_leap_year': is_leap_year(year), + } + + return render(request, 'faerun_calendar/index.html', params) diff --git a/links/views.py b/links/views.py index 58d2aa4..f03a8a1 100644 --- a/links/views.py +++ b/links/views.py @@ -5,4 +5,4 @@ from .models import Link def index(request): links = Link.objects.order_by('order') - return render(request, 'links/index.html', {'links': links}) \ No newline at end of file + return render(request, 'links/index.html', {'links': links}) From 2c928e79524740a0d77316f87f1d111b8d8bd3ca Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Thu, 14 Jul 2022 15:47:31 +0300 Subject: [PATCH 02/10] Reworked DB structure --- faerun_calendar/admin.py | 8 +- faerun_calendar/models.py | 107 +++++++++--------- .../static/faerun_calendar/css/main.css | 4 + .../templates/faerun_calendar/index.html | 8 +- .../templates/faerun_calendar/month.html | 2 +- faerun_calendar/urls.py | 1 + faerun_calendar/views.py | 42 ++++--- 7 files changed, 96 insertions(+), 76 deletions(-) diff --git a/faerun_calendar/admin.py b/faerun_calendar/admin.py index 98c2da3..a278ba6 100644 --- a/faerun_calendar/admin.py +++ b/faerun_calendar/admin.py @@ -1,8 +1,12 @@ from django.contrib import admin -from .models import CalendarData +from .models import YearData from .models import MonthData +from .models import DayData from .models import Event +from .models import CalendarData -admin.site.register(CalendarData) +admin.site.register(YearData) admin.site.register(MonthData) +admin.site.register(DayData) admin.site.register(Event) +admin.site.register(CalendarData) diff --git a/faerun_calendar/models.py b/faerun_calendar/models.py index 50bc577..4460290 100644 --- a/faerun_calendar/models.py +++ b/faerun_calendar/models.py @@ -1,79 +1,82 @@ from django.db import models +from django.core.validators import RegexValidator +from django.core.validators import MinValueValidator +from django.core.validators import MaxValueValidator -class FaerunDate: - LAST_MONTH = 18 - LEAP_MONTH = 11 - ONE_DAY_MONTHS = (2, 6, 10, 11, 14, 17) - LAST_DAY = 30 +class YearData(models.Model): + number = models.SmallIntegerField('Number', validators=[ + RegexValidator(r'^-?[1-9]\d{0,3}$', 'Year must be not zero and between -9999 and 9999') + ]) - def __init__(self, year: int, month: int, day: int): - self.year = year - self.month = month - self.day = day - self.is_leap_year = self._is_leap_year() - self.is_valid = self._is_valid() - - def __repr__(self): - return f'{type(self).__name__}({self.year}, {self.month}, {self.day})' - - def _is_leap_year(self) -> bool: - if self.year == 0: + @property + def is_leap(self): + if self.number == 0: return False - elif self.year % 400 == 0: + elif self.number % 400 == 0: return True - elif self.year % 100 == 0: + elif self.number % 100 == 0: return False - elif self.year % 4 == 0: + elif self.number % 4 == 0: return True return False - def _is_valid(self) -> bool: - if self.year == 0: - return False - - if not 0 < self.month <= FaerunDate.LAST_MONTH: - return False - - if not self.is_leap_year and self.month == self.__class__.LEAP_MONTH: - return False - - if not 0 < self.day <= FaerunDate.LAST_DAY: - return False - - if self.day > 1 and self.month in FaerunDate.ONE_DAY_MONTHS: - return False - - return True - - -class CalendarData(models.Model): - current_year = models.SmallIntegerField('CurrentYear') - current_month = models.SmallIntegerField('CurrentMonth') - current_day = models.SmallIntegerField('CurrentDay') - leap_month = models.SmallIntegerField('LeapMonth') - def __str__(self): - return f'({self.current_year}, {self.current_month}, {self.current_day}, {self.leap_month})' + return f'({self.number}, {self.is_leap})' class MonthData(models.Model): - number = models.SmallIntegerField('Number', unique=True) + number = models.SmallIntegerField('Number', unique=True, validators=[ + MinValueValidator(1), + MaxValueValidator(18), + ]) name = models.CharField('Name', max_length=64, unique=True) folkname = models.CharField('Folkname', max_length=64, blank=True) is_oneday = models.BooleanField('IsOneday') + is_leap_month = models.BooleanField('IsLeapMonth') def __str__(self): - return f'({self.number}, {self.name}, {self.folkname}, {self.is_oneday})' + return f'({self.number}, {self.name}, {self.folkname}, {self.is_oneday}, {self.is_leap_month})' + + +class DayData(models.Model): + number = models.SmallIntegerField('Number', unique=True, validators=[ + MinValueValidator(1), + MaxValueValidator(30), + ]) + month = models.ForeignKey(MonthData, on_delete=models.CASCADE) + year = models.ForeignKey(YearData, on_delete=models.CASCADE) + + def __str__(self): + return f'({self.number, self.month})' + + +class CalendarData(models.Model): + current_day = models.ForeignKey(DayData, on_delete=models.CASCADE) + + def __str__(self): + return f'({self.current_day})' + + @property + def current_month(self): + try: + return getattr(self.current_day, 'month') + except AttributeError: + return None + + @property + def current_year(self): + try: + return getattr(self.current_day, 'year') + except AttributeError: + return None class Event(models.Model): - year = models.SmallIntegerField('Year') - month = models.SmallIntegerField('Month') - day = models.SmallIntegerField('Day') + day = models.ForeignKey(DayData, on_delete=models.CASCADE) time = models.TimeField('Time') title = models.CharField('Title', max_length=250) description = models.TextField('Description', max_length=2500) def __str__(self): - return f'({self.year}, {self.month}, {self.day}, {self.time}, {self.title})' + return f'({self.day}, {self.time}, {self.title})' diff --git a/faerun_calendar/static/faerun_calendar/css/main.css b/faerun_calendar/static/faerun_calendar/css/main.css index d5f8d36..842785b 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -5,6 +5,10 @@ div.calendarpage { border-radius: 20px; } +h2.year { + text-align: center; +} + table.month, table.month th, table.month td { border: 1px solid white; border-collapse: collapse; diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index 904fb96..8c14116 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -13,14 +13,14 @@ {% block content %}

Календарь

-

{{year}}

+ +

{{year_data.number}}

{% for month in month_data %} - {% if month.number != calendar_data.leap_month or is_leap_year %} - {% include 'faerun_calendar/month.html' with month=month month_days=month_days %} + {% if not month.is_leap_month or year_data.is_leap %} + {% include 'faerun_calendar/month.html' with month=month calendar_data=calendar_data month_days=month_days %} {% endif %} {% endfor %}
{% endblock %} - diff --git a/faerun_calendar/templates/faerun_calendar/month.html b/faerun_calendar/templates/faerun_calendar/month.html index b424da8..1e18824 100644 --- a/faerun_calendar/templates/faerun_calendar/month.html +++ b/faerun_calendar/templates/faerun_calendar/month.html @@ -13,7 +13,7 @@ {% endif %} - {% if year == calendar_data.current_year and month.number == calendar_data.current_month and day == calendar_data.current_day %} + {% if day == calendar_data.current_day.number and year_data == calendar_data.current_year and month == calendar_data.current_month %} {% else %} diff --git a/faerun_calendar/urls.py b/faerun_calendar/urls.py index 4c9189f..153019d 100644 --- a/faerun_calendar/urls.py +++ b/faerun_calendar/urls.py @@ -4,5 +4,6 @@ from . import views urlpatterns = [ path('', views.index, name='index'), + path('', views.year_page, name='index'), ] diff --git a/faerun_calendar/views.py b/faerun_calendar/views.py index 2dc4efc..210afaa 100644 --- a/faerun_calendar/views.py +++ b/faerun_calendar/views.py @@ -1,31 +1,39 @@ from django.shortcuts import render -from .models import CalendarData +from django.http import HttpResponse +from django.http import HttpResponseNotFound + +from .models import YearData from .models import MonthData +from .models import DayData +from .models import CalendarData +from .models import Event -def index(request): - def is_leap_year(year) -> bool: - if year == 0: - return False - elif year % 400 == 0: - return True - elif year % 100 == 0: - return False - elif year % 4 == 0: - return True - return False +def year_page(request, year: int): + try: + year_data = YearData.objects.get(number=year) + except YearData.DoesNotExist: + return HttpResponseNotFound("

404 Not Found

") - calendar_data = CalendarData.objects.first() month_data = MonthData.objects.all() - - year = 1492 + calendar_data = CalendarData.objects.first() params = { 'calendar_data': calendar_data, + 'year_data': year_data, 'month_data': month_data, 'month_days': tuple(i+1 for i in range(30)), - 'year': year, - 'is_leap_year': is_leap_year(year), } return render(request, 'faerun_calendar/index.html', params) + + +def index(request): + calendar_data = CalendarData.objects.first() + + try: + current_year = getattr(getattr(CalendarData.objects.first(), 'current_year'), 'number') + except AttributeError: + current_year = 0 + + return year_page(request, current_year) From 35398809ceaa5177f94f6478cbe16164ce19016c Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Thu, 14 Jul 2022 16:21:56 +0300 Subject: [PATCH 03/10] DB structure reworked little bit more --- faerun_calendar/admin.py | 2 - faerun_calendar/models.py | 44 ++++++------------- .../templates/faerun_calendar/month.html | 2 +- faerun_calendar/views.py | 1 - 4 files changed, 15 insertions(+), 34 deletions(-) diff --git a/faerun_calendar/admin.py b/faerun_calendar/admin.py index a278ba6..ef21617 100644 --- a/faerun_calendar/admin.py +++ b/faerun_calendar/admin.py @@ -1,12 +1,10 @@ from django.contrib import admin from .models import YearData from .models import MonthData -from .models import DayData from .models import Event from .models import CalendarData admin.site.register(YearData) admin.site.register(MonthData) -admin.site.register(DayData) admin.site.register(Event) admin.site.register(CalendarData) diff --git a/faerun_calendar/models.py b/faerun_calendar/models.py index 4460290..df5f92e 100644 --- a/faerun_calendar/models.py +++ b/faerun_calendar/models.py @@ -39,41 +39,25 @@ class MonthData(models.Model): return f'({self.number}, {self.name}, {self.folkname}, {self.is_oneday}, {self.is_leap_month})' -class DayData(models.Model): - number = models.SmallIntegerField('Number', unique=True, validators=[ +class CalendarData(models.Model): + current_day = models.SmallIntegerField('Number', unique=True, validators=[ + MinValueValidator(1), + MaxValueValidator(30), + ]) + current_month = models.ForeignKey(MonthData, on_delete=models.CASCADE) + current_year = models.ForeignKey(YearData, on_delete=models.CASCADE) + + def __str__(self): + return f'({self.current_day}, {self.current_month}, {self.current_year})' + + +class Event(models.Model): + day = models.SmallIntegerField('Number', unique=True, validators=[ MinValueValidator(1), MaxValueValidator(30), ]) month = models.ForeignKey(MonthData, on_delete=models.CASCADE) year = models.ForeignKey(YearData, on_delete=models.CASCADE) - - def __str__(self): - return f'({self.number, self.month})' - - -class CalendarData(models.Model): - current_day = models.ForeignKey(DayData, on_delete=models.CASCADE) - - def __str__(self): - return f'({self.current_day})' - - @property - def current_month(self): - try: - return getattr(self.current_day, 'month') - except AttributeError: - return None - - @property - def current_year(self): - try: - return getattr(self.current_day, 'year') - except AttributeError: - return None - - -class Event(models.Model): - day = models.ForeignKey(DayData, on_delete=models.CASCADE) time = models.TimeField('Time') title = models.CharField('Title', max_length=250) description = models.TextField('Description', max_length=2500) diff --git a/faerun_calendar/templates/faerun_calendar/month.html b/faerun_calendar/templates/faerun_calendar/month.html index 1e18824..ba02579 100644 --- a/faerun_calendar/templates/faerun_calendar/month.html +++ b/faerun_calendar/templates/faerun_calendar/month.html @@ -13,7 +13,7 @@ {% endif %} - {% if day == calendar_data.current_day.number and year_data == calendar_data.current_year and month == calendar_data.current_month %} + {% if day == calendar_data.current_day and year_data == calendar_data.current_year and month == calendar_data.current_month %} {% else %} diff --git a/faerun_calendar/views.py b/faerun_calendar/views.py index 210afaa..487b9f2 100644 --- a/faerun_calendar/views.py +++ b/faerun_calendar/views.py @@ -4,7 +4,6 @@ from django.http import HttpResponseNotFound from .models import YearData from .models import MonthData -from .models import DayData from .models import CalendarData from .models import Event From 6afe30ed42a532c5efcf4ea7355e7d6362340a3a Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Thu, 14 Jul 2022 16:49:49 +0300 Subject: [PATCH 04/10] Added tmp links to month tables --- faerun_calendar/static/faerun_calendar/css/main.css | 10 +++++++++- faerun_calendar/templates/faerun_calendar/index.html | 2 +- faerun_calendar/templates/faerun_calendar/month.html | 2 +- faerun_calendar/urls.py | 1 + faerun_calendar/views.py | 8 +++++++- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/faerun_calendar/static/faerun_calendar/css/main.css b/faerun_calendar/static/faerun_calendar/css/main.css index 842785b..1aee7b9 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -26,7 +26,6 @@ table.month td { table.month td.current { background: dimgrey; - color: white; } table.month th.subtitle { @@ -34,6 +33,15 @@ table.month th.subtitle { font-weight: normal; } +table.month td a { + text-decoration: none; + color: black; +} + +table.month td.current a { + color: white; +} + div.calendar { display: flex; flex-flow: row wrap; diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index 8c14116..10cf9fa 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -18,7 +18,7 @@
{% for month in month_data %} {% if not month.is_leap_month or year_data.is_leap %} - {% include 'faerun_calendar/month.html' with month=month calendar_data=calendar_data month_days=month_days %} + {% include 'faerun_calendar/month.html' with month=month calendar_data=calendar_data month_days=month_days events=events %} {% endif %} {% endfor %}
diff --git a/faerun_calendar/templates/faerun_calendar/month.html b/faerun_calendar/templates/faerun_calendar/month.html index ba02579..b36c8c1 100644 --- a/faerun_calendar/templates/faerun_calendar/month.html +++ b/faerun_calendar/templates/faerun_calendar/month.html @@ -19,7 +19,7 @@ {% endif %} -
{{day}}
+ {{day}} diff --git a/faerun_calendar/urls.py b/faerun_calendar/urls.py index 153019d..facba81 100644 --- a/faerun_calendar/urls.py +++ b/faerun_calendar/urls.py @@ -5,5 +5,6 @@ from . import views urlpatterns = [ path('', views.index, name='index'), path('', views.year_page, name='index'), + path('//', views.day_page, name='index'), ] diff --git a/faerun_calendar/views.py b/faerun_calendar/views.py index 487b9f2..6682466 100644 --- a/faerun_calendar/views.py +++ b/faerun_calendar/views.py @@ -8,20 +8,26 @@ from .models import CalendarData from .models import Event +def day_page(request, year: int, month: int, day: int): + return HttpResponse(f'{year}.{month}.{day}') + + def year_page(request, year: int): try: year_data = YearData.objects.get(number=year) except YearData.DoesNotExist: - return HttpResponseNotFound("

404 Not Found

") + return HttpResponseNotFound('

404 Not Found

') month_data = MonthData.objects.all() calendar_data = CalendarData.objects.first() + events = Event.objects.all() params = { 'calendar_data': calendar_data, 'year_data': year_data, 'month_data': month_data, 'month_days': tuple(i+1 for i in range(30)), + 'events': events, } return render(request, 'faerun_calendar/index.html', params) From a0ba00b23eab3f6bf12d597e379a5b5a544aee71 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Tue, 1 Nov 2022 17:39:50 +0300 Subject: [PATCH 05/10] Added events on day page --- faerun_calendar/models.py | 2 +- .../static/faerun_calendar/css/main.css | 31 +++++++++++++++ .../templates/faerun_calendar/index.html | 31 ++++++++++++--- faerun_calendar/views.py | 38 +++++++++++++++++-- 4 files changed, 92 insertions(+), 10 deletions(-) diff --git a/faerun_calendar/models.py b/faerun_calendar/models.py index df5f92e..4e0626c 100644 --- a/faerun_calendar/models.py +++ b/faerun_calendar/models.py @@ -52,7 +52,7 @@ class CalendarData(models.Model): class Event(models.Model): - day = models.SmallIntegerField('Number', unique=True, validators=[ + day = models.SmallIntegerField('Number', validators=[ MinValueValidator(1), MaxValueValidator(30), ]) diff --git a/faerun_calendar/static/faerun_calendar/css/main.css b/faerun_calendar/static/faerun_calendar/css/main.css index 1aee7b9..0ff01b7 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -53,3 +53,34 @@ table.month { width: 350px; max-width: 350px; } + +div.event { + border: 1px solid black; + padding: 20px; + margin: 20px; + border-radius: 10px; + width: 100%; +} + +div.event-time { + border: 1px solid black; + border-radius: 3px; + padding: 3px 5px; + margin-right: 15px; + float: left; + font-weight: bold; + background: DeepSkyBlue; + font-size: 150%; +} + +div.event-title { + font-weight: bold; + text-decoration: underline; + font-size: 200%; + margin-bottom: 10px; +} + +p.event-description { + margin: 0px; + padding: 0px; +} diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index 10cf9fa..c45e636 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -12,15 +12,34 @@ {% block content %}
-

Календарь

+ {% if type == 'year' %} +

Календарь

+

{{year_data.number}}

+ {% elif type == 'day' %} +

Календарь — События

+

Год {{year_data.number}}, {{month_data.name}}, день {{day}}-й

+ {% endif %} -

{{year_data.number}}

- {% for month in month_data %} - {% if not month.is_leap_month or year_data.is_leap %} - {% include 'faerun_calendar/month.html' with month=month calendar_data=calendar_data month_days=month_days events=events %} + {% if type == 'year' %} + {% for month in month_data %} + {% if not month.is_leap_month or year_data.is_leap %} + {% include 'faerun_calendar/month.html' with month=month calendar_data=calendar_data month_days=month_days events=events %} + {% endif %} + {% endfor %} + {% elif type == 'day' %} + {% if events.count == 0 %} +

Событий нет

+ {% else %} + {% for event in events %} +
+
{{event.time}}
+
{{event.title}}
+

{{event.description}}

+
+ {% endfor %} {% endif %} - {% endfor %} + {% endif %}
{% endblock %} diff --git a/faerun_calendar/views.py b/faerun_calendar/views.py index 6682466..f62471f 100644 --- a/faerun_calendar/views.py +++ b/faerun_calendar/views.py @@ -9,7 +9,40 @@ from .models import Event def day_page(request, year: int, month: int, day: int): - return HttpResponse(f'{year}.{month}.{day}') + try: + year_data = YearData.objects.get(number=year) + except YearData.DoesNotExist: + return HttpResponseNotFound('

404 Not Found

') + + try: + year_id = getattr(year_data, 'id') + except AttributeError: + return HttpResponseNotFound('

404 Not Found

') + + try: + month_data = MonthData.objects.get(number=month) + except MonthData.DoesNotExist: + return HttpResponseNotFound('

404 Not Found

') + + try: + month_id = getattr(month_data, 'id') + except AttributeError: + return HttpResponseNotFound('

404 Not Found

') + + try: + events = Event.objects.filter(year=year_id, month=month_id, day=day) + except Event.DoesNotExist: + return HttpResponseNotFound(f'

404 Not Found

') + + params = { + 'type': 'day', + 'year_data': year_data, + 'month_data': month_data, + 'day': day, + 'events': events, + } + + return render(request, 'faerun_calendar/index.html', params) def year_page(request, year: int): @@ -23,6 +56,7 @@ def year_page(request, year: int): events = Event.objects.all() params = { + 'type': 'year', 'calendar_data': calendar_data, 'year_data': year_data, 'month_data': month_data, @@ -34,8 +68,6 @@ def year_page(request, year: int): def index(request): - calendar_data = CalendarData.objects.first() - try: current_year = getattr(getattr(CalendarData.objects.first(), 'current_year'), 'number') except AttributeError: From ad1f99e8c9ae206ef5ac21b46e6c28faa62dbe92 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Tue, 1 Nov 2022 17:43:12 +0300 Subject: [PATCH 06/10] Added migrations --- faerun_calendar/migrations/0001_initial.py | 32 +++++++++ faerun_calendar/migrations/0002_monthdata.py | 22 ++++++ .../migrations/0003_auto_20220713_1117.py | 31 +++++++++ .../migrations/0004_auto_20220713_1123.py | 22 ++++++ .../0005_calendardata_event_monthdata.py | 45 ++++++++++++ .../migrations/0006_auto_20220713_1126.py | 22 ++++++ .../0007_calendardata_event_monthdata.py | 45 ++++++++++++ .../0008_alter_monthdata_folkname.py | 18 +++++ .../0009_alter_monthdata_folkname.py | 18 +++++ .../0010_alter_monthdata_folkname.py | 18 +++++ .../migrations/0011_monthdata_is_oneday.py | 19 ++++++ .../0012_calendardata_leap_month.py | 19 ++++++ .../0013_alter_calendardata_current_month.py | 19 ++++++ .../migrations/0014_auto_20220714_0840.py | 66 ++++++++++++++++++ .../migrations/0015_auto_20220714_0906.py | 40 +++++++++++ faerun_calendar/migrations/0016_initial.py | 68 +++++++++++++++++++ .../migrations/0017_auto_20220714_1136.py | 34 ++++++++++ .../migrations/0018_auto_20220714_1305.py | 52 ++++++++++++++ .../migrations/0019_auto_20220714_1312.py | 23 +++++++ .../migrations/0020_alter_event_day.py | 19 ++++++ links/migrations/0001_initial.py | 22 ++++++ links/migrations/0002_link_order.py | 19 ++++++ 22 files changed, 673 insertions(+) create mode 100644 faerun_calendar/migrations/0001_initial.py create mode 100644 faerun_calendar/migrations/0002_monthdata.py create mode 100644 faerun_calendar/migrations/0003_auto_20220713_1117.py create mode 100644 faerun_calendar/migrations/0004_auto_20220713_1123.py create mode 100644 faerun_calendar/migrations/0005_calendardata_event_monthdata.py create mode 100644 faerun_calendar/migrations/0006_auto_20220713_1126.py create mode 100644 faerun_calendar/migrations/0007_calendardata_event_monthdata.py create mode 100644 faerun_calendar/migrations/0008_alter_monthdata_folkname.py create mode 100644 faerun_calendar/migrations/0009_alter_monthdata_folkname.py create mode 100644 faerun_calendar/migrations/0010_alter_monthdata_folkname.py create mode 100644 faerun_calendar/migrations/0011_monthdata_is_oneday.py create mode 100644 faerun_calendar/migrations/0012_calendardata_leap_month.py create mode 100644 faerun_calendar/migrations/0013_alter_calendardata_current_month.py create mode 100644 faerun_calendar/migrations/0014_auto_20220714_0840.py create mode 100644 faerun_calendar/migrations/0015_auto_20220714_0906.py create mode 100644 faerun_calendar/migrations/0016_initial.py create mode 100644 faerun_calendar/migrations/0017_auto_20220714_1136.py create mode 100644 faerun_calendar/migrations/0018_auto_20220714_1305.py create mode 100644 faerun_calendar/migrations/0019_auto_20220714_1312.py create mode 100644 faerun_calendar/migrations/0020_alter_event_day.py create mode 100644 links/migrations/0001_initial.py create mode 100644 links/migrations/0002_link_order.py diff --git a/faerun_calendar/migrations/0001_initial.py b/faerun_calendar/migrations/0001_initial.py new file mode 100644 index 0000000..683dd25 --- /dev/null +++ b/faerun_calendar/migrations/0001_initial.py @@ -0,0 +1,32 @@ +# Generated by Django 3.2.12 on 2022-07-13 08:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='CalendarData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current_year', models.SmallIntegerField(verbose_name='CurrentYear')), + ('current_month', models.SmallIntegerField(verbose_name='CurrentMonth')), + ('current_day', models.SmallIntegerField(verbose_name='CurrentDay')), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ('month', models.SmallIntegerField(verbose_name='Month')), + ('day', models.SmallIntegerField(verbose_name='Day')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0002_monthdata.py b/faerun_calendar/migrations/0002_monthdata.py new file mode 100644 index 0000000..2fced27 --- /dev/null +++ b/faerun_calendar/migrations/0002_monthdata.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='MonthData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('folkname', models.CharField(max_length=64, unique=True, verbose_name='Folkname')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0003_auto_20220713_1117.py b/faerun_calendar/migrations/0003_auto_20220713_1117.py new file mode 100644 index 0000000..e356ccf --- /dev/null +++ b/faerun_calendar/migrations/0003_auto_20220713_1117.py @@ -0,0 +1,31 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0002_monthdata'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='description', + field=models.TextField(default=0, max_length=2500, verbose_name='Description'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='time', + field=models.TimeField(default=0, verbose_name='Time'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='title', + field=models.CharField(default=0, max_length=250, verbose_name='Title'), + preserve_default=False, + ), + ] diff --git a/faerun_calendar/migrations/0004_auto_20220713_1123.py b/faerun_calendar/migrations/0004_auto_20220713_1123.py new file mode 100644 index 0000000..69eee4e --- /dev/null +++ b/faerun_calendar/migrations/0004_auto_20220713_1123.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:23 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0003_auto_20220713_1117'), + ] + + operations = [ + migrations.DeleteModel( + name='CalendarData', + ), + migrations.DeleteModel( + name='Event', + ), + migrations.DeleteModel( + name='MonthData', + ), + ] diff --git a/faerun_calendar/migrations/0005_calendardata_event_monthdata.py b/faerun_calendar/migrations/0005_calendardata_event_monthdata.py new file mode 100644 index 0000000..714bd1c --- /dev/null +++ b/faerun_calendar/migrations/0005_calendardata_event_monthdata.py @@ -0,0 +1,45 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('faerun_calendar', '0004_auto_20220713_1123'), + ] + + operations = [ + migrations.CreateModel( + name='CalendarData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current_year', models.SmallIntegerField(verbose_name='CurrentYear')), + ('current_month', models.SmallIntegerField(verbose_name='CurrentMonth')), + ('current_day', models.SmallIntegerField(verbose_name='CurrentDay')), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ('month', models.SmallIntegerField(verbose_name='Month')), + ('day', models.SmallIntegerField(verbose_name='Day')), + ('time', models.TimeField(verbose_name='Time')), + ('title', models.CharField(max_length=250, verbose_name='Title')), + ('description', models.TextField(max_length=2500, verbose_name='Description')), + ], + ), + migrations.CreateModel( + name='MonthData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('folkname', models.CharField(max_length=64, unique=True, verbose_name='Folkname')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0006_auto_20220713_1126.py b/faerun_calendar/migrations/0006_auto_20220713_1126.py new file mode 100644 index 0000000..e46d333 --- /dev/null +++ b/faerun_calendar/migrations/0006_auto_20220713_1126.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:26 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0005_calendardata_event_monthdata'), + ] + + operations = [ + migrations.DeleteModel( + name='CalendarData', + ), + migrations.DeleteModel( + name='Event', + ), + migrations.DeleteModel( + name='MonthData', + ), + ] diff --git a/faerun_calendar/migrations/0007_calendardata_event_monthdata.py b/faerun_calendar/migrations/0007_calendardata_event_monthdata.py new file mode 100644 index 0000000..e397179 --- /dev/null +++ b/faerun_calendar/migrations/0007_calendardata_event_monthdata.py @@ -0,0 +1,45 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('faerun_calendar', '0006_auto_20220713_1126'), + ] + + operations = [ + migrations.CreateModel( + name='CalendarData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current_year', models.SmallIntegerField(verbose_name='CurrentYear')), + ('current_month', models.SmallIntegerField(verbose_name='CurrentMonth')), + ('current_day', models.SmallIntegerField(verbose_name='CurrentDay')), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ('month', models.SmallIntegerField(verbose_name='Month')), + ('day', models.SmallIntegerField(verbose_name='Day')), + ('time', models.TimeField(verbose_name='Time')), + ('title', models.CharField(max_length=250, verbose_name='Title')), + ('description', models.TextField(max_length=2500, verbose_name='Description')), + ], + ), + migrations.CreateModel( + name='MonthData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('folkname', models.CharField(max_length=64, unique=True, verbose_name='Folkname')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0008_alter_monthdata_folkname.py b/faerun_calendar/migrations/0008_alter_monthdata_folkname.py new file mode 100644 index 0000000..3d0bf0e --- /dev/null +++ b/faerun_calendar/migrations/0008_alter_monthdata_folkname.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0007_calendardata_event_monthdata'), + ] + + operations = [ + migrations.AlterField( + model_name='monthdata', + name='folkname', + field=models.CharField(max_length=64, verbose_name='Folkname'), + ), + ] diff --git a/faerun_calendar/migrations/0009_alter_monthdata_folkname.py b/faerun_calendar/migrations/0009_alter_monthdata_folkname.py new file mode 100644 index 0000000..a58e52f --- /dev/null +++ b/faerun_calendar/migrations/0009_alter_monthdata_folkname.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0008_alter_monthdata_folkname'), + ] + + operations = [ + migrations.AlterField( + model_name='monthdata', + name='folkname', + field=models.CharField(blank=True, max_length=64, unique=True, verbose_name='Folkname'), + ), + ] diff --git a/faerun_calendar/migrations/0010_alter_monthdata_folkname.py b/faerun_calendar/migrations/0010_alter_monthdata_folkname.py new file mode 100644 index 0000000..fb2542d --- /dev/null +++ b/faerun_calendar/migrations/0010_alter_monthdata_folkname.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-07-13 11:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0009_alter_monthdata_folkname'), + ] + + operations = [ + migrations.AlterField( + model_name='monthdata', + name='folkname', + field=models.CharField(blank=True, max_length=64, verbose_name='Folkname'), + ), + ] diff --git a/faerun_calendar/migrations/0011_monthdata_is_oneday.py b/faerun_calendar/migrations/0011_monthdata_is_oneday.py new file mode 100644 index 0000000..0d8f363 --- /dev/null +++ b/faerun_calendar/migrations/0011_monthdata_is_oneday.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-07-13 12:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0010_alter_monthdata_folkname'), + ] + + operations = [ + migrations.AddField( + model_name='monthdata', + name='is_oneday', + field=models.BooleanField(default=0, verbose_name='IsOneday'), + preserve_default=False, + ), + ] diff --git a/faerun_calendar/migrations/0012_calendardata_leap_month.py b/faerun_calendar/migrations/0012_calendardata_leap_month.py new file mode 100644 index 0000000..985a9dd --- /dev/null +++ b/faerun_calendar/migrations/0012_calendardata_leap_month.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-07-13 12:35 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0011_monthdata_is_oneday'), + ] + + operations = [ + migrations.AddField( + model_name='calendardata', + name='leap_month', + field=models.SmallIntegerField(default=11, verbose_name='LeapMonth'), + preserve_default=False, + ), + ] diff --git a/faerun_calendar/migrations/0013_alter_calendardata_current_month.py b/faerun_calendar/migrations/0013_alter_calendardata_current_month.py new file mode 100644 index 0000000..995ea20 --- /dev/null +++ b/faerun_calendar/migrations/0013_alter_calendardata_current_month.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-07-14 07:31 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0012_calendardata_leap_month'), + ] + + operations = [ + migrations.AlterField( + model_name='calendardata', + name='current_month', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata'), + ), + ] diff --git a/faerun_calendar/migrations/0014_auto_20220714_0840.py b/faerun_calendar/migrations/0014_auto_20220714_0840.py new file mode 100644 index 0000000..443e087 --- /dev/null +++ b/faerun_calendar/migrations/0014_auto_20220714_0840.py @@ -0,0 +1,66 @@ +# Generated by Django 3.2.12 on 2022-07-14 08:40 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0013_alter_calendardata_current_month'), + ] + + operations = [ + migrations.CreateModel( + name='YearData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ], + ), + migrations.RemoveField( + model_name='calendardata', + name='current_month', + ), + migrations.RemoveField( + model_name='calendardata', + name='current_year', + ), + migrations.RemoveField( + model_name='calendardata', + name='leap_month', + ), + migrations.RemoveField( + model_name='event', + name='month', + ), + migrations.RemoveField( + model_name='event', + name='year', + ), + migrations.AddField( + model_name='monthdata', + name='is_leap_month', + field=models.BooleanField(default=0, verbose_name='IsLeapMonth'), + preserve_default=False, + ), + migrations.CreateModel( + name='DayData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('month', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata')), + ('year', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.yeardata')), + ], + ), + migrations.AlterField( + model_name='calendardata', + name='current_day', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.daydata'), + ), + migrations.AlterField( + model_name='event', + name='day', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.daydata'), + ), + ] diff --git a/faerun_calendar/migrations/0015_auto_20220714_0906.py b/faerun_calendar/migrations/0015_auto_20220714_0906.py new file mode 100644 index 0000000..a4204ae --- /dev/null +++ b/faerun_calendar/migrations/0015_auto_20220714_0906.py @@ -0,0 +1,40 @@ +# Generated by Django 3.2.12 on 2022-07-14 09:06 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0014_auto_20220714_0840'), + ] + + operations = [ + migrations.RemoveField( + model_name='daydata', + name='month', + ), + migrations.RemoveField( + model_name='daydata', + name='year', + ), + migrations.RemoveField( + model_name='event', + name='day', + ), + migrations.DeleteModel( + name='CalendarData', + ), + migrations.DeleteModel( + name='DayData', + ), + migrations.DeleteModel( + name='Event', + ), + migrations.DeleteModel( + name='MonthData', + ), + migrations.DeleteModel( + name='YearData', + ), + ] diff --git a/faerun_calendar/migrations/0016_initial.py b/faerun_calendar/migrations/0016_initial.py new file mode 100644 index 0000000..9747c33 --- /dev/null +++ b/faerun_calendar/migrations/0016_initial.py @@ -0,0 +1,68 @@ +# Generated by Django 3.2.12 on 2022-07-14 09:07 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('faerun_calendar', '0015_auto_20220714_0906'), + ] + + operations = [ + migrations.CreateModel( + name='DayData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ], + ), + migrations.CreateModel( + name='MonthData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('number', models.SmallIntegerField(unique=True, verbose_name='Number')), + ('name', models.CharField(max_length=64, unique=True, verbose_name='Name')), + ('folkname', models.CharField(blank=True, max_length=64, verbose_name='Folkname')), + ('is_oneday', models.BooleanField(verbose_name='IsOneday')), + ('is_leap_month', models.BooleanField(verbose_name='IsLeapMonth')), + ], + ), + migrations.CreateModel( + name='YearData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('year', models.SmallIntegerField(verbose_name='Year')), + ], + ), + migrations.CreateModel( + name='Event', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('time', models.TimeField(verbose_name='Time')), + ('title', models.CharField(max_length=250, verbose_name='Title')), + ('description', models.TextField(max_length=2500, verbose_name='Description')), + ('day', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.daydata')), + ], + ), + migrations.AddField( + model_name='daydata', + name='month', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata'), + ), + migrations.AddField( + model_name='daydata', + name='year', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.yeardata'), + ), + migrations.CreateModel( + name='CalendarData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('current_day', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.daydata')), + ], + ), + ] diff --git a/faerun_calendar/migrations/0017_auto_20220714_1136.py b/faerun_calendar/migrations/0017_auto_20220714_1136.py new file mode 100644 index 0000000..afc3283 --- /dev/null +++ b/faerun_calendar/migrations/0017_auto_20220714_1136.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.12 on 2022-07-14 11:36 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0016_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='yeardata', + name='year', + ), + migrations.AddField( + model_name='yeardata', + name='number', + field=models.SmallIntegerField(default=1, validators=[django.core.validators.RegexValidator('^-?[1-9]\\d{0,3}$', 'Year must be not zero and between -9999 and 9999')], verbose_name='Number'), + preserve_default=False, + ), + migrations.AlterField( + model_name='daydata', + name='number', + field=models.SmallIntegerField(unique=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(30)], verbose_name='Number'), + ), + migrations.AlterField( + model_name='monthdata', + name='number', + field=models.SmallIntegerField(unique=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(18)], verbose_name='Number'), + ), + ] diff --git a/faerun_calendar/migrations/0018_auto_20220714_1305.py b/faerun_calendar/migrations/0018_auto_20220714_1305.py new file mode 100644 index 0000000..86fd39d --- /dev/null +++ b/faerun_calendar/migrations/0018_auto_20220714_1305.py @@ -0,0 +1,52 @@ +# Generated by Django 3.2.12 on 2022-07-14 13:05 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0017_auto_20220714_1136'), + ] + + operations = [ + migrations.AddField( + model_name='calendardata', + name='current_month', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata'), + preserve_default=False, + ), + migrations.AddField( + model_name='calendardata', + name='current_year', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.yeardata'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='current_month', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.monthdata'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='current_year', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='faerun_calendar.yeardata'), + preserve_default=False, + ), + migrations.AlterField( + model_name='calendardata', + name='current_day', + field=models.SmallIntegerField(unique=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(30)], verbose_name='Number'), + ), + migrations.AlterField( + model_name='event', + name='day', + field=models.SmallIntegerField(unique=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(30)], verbose_name='Number'), + ), + migrations.DeleteModel( + name='DayData', + ), + ] diff --git a/faerun_calendar/migrations/0019_auto_20220714_1312.py b/faerun_calendar/migrations/0019_auto_20220714_1312.py new file mode 100644 index 0000000..0954fc4 --- /dev/null +++ b/faerun_calendar/migrations/0019_auto_20220714_1312.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.12 on 2022-07-14 13:12 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0018_auto_20220714_1305'), + ] + + operations = [ + migrations.RenameField( + model_name='event', + old_name='current_month', + new_name='month', + ), + migrations.RenameField( + model_name='event', + old_name='current_year', + new_name='year', + ), + ] diff --git a/faerun_calendar/migrations/0020_alter_event_day.py b/faerun_calendar/migrations/0020_alter_event_day.py new file mode 100644 index 0000000..3178eb3 --- /dev/null +++ b/faerun_calendar/migrations/0020_alter_event_day.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-11-01 13:52 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0019_auto_20220714_1312'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='day', + field=models.SmallIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(30)], verbose_name='Number'), + ), + ] diff --git a/links/migrations/0001_initial.py b/links/migrations/0001_initial.py new file mode 100644 index 0000000..e9d62ce --- /dev/null +++ b/links/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-07-12 13:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Link', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', models.CharField(max_length=250, verbose_name='URL')), + ('text', models.CharField(max_length=250, verbose_name='Text')), + ], + ), + ] diff --git a/links/migrations/0002_link_order.py b/links/migrations/0002_link_order.py new file mode 100644 index 0000000..e41e603 --- /dev/null +++ b/links/migrations/0002_link_order.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.12 on 2022-07-12 13:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('links', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='link', + name='order', + field=models.SmallIntegerField(default=1, verbose_name='Order'), + preserve_default=False, + ), + ] From f066d10d9385ebb96775fbea28f48148f0a5607e Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Tue, 1 Nov 2022 18:10:53 +0300 Subject: [PATCH 07/10] Added error descriptions --- .../static/faerun_calendar/css/main.css | 9 ++ .../templates/faerun_calendar/index.html | 12 ++- faerun_calendar/views.py | 85 +++++++++++++------ 3 files changed, 78 insertions(+), 28 deletions(-) diff --git a/faerun_calendar/static/faerun_calendar/css/main.css b/faerun_calendar/static/faerun_calendar/css/main.css index 0ff01b7..892148c 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -84,3 +84,12 @@ p.event-description { margin: 0px; padding: 0px; } + +p.calendar-error { + color: Crimson; + font-size: 200%; +} + +p.calendar-info { + font-size: 200%; +} diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index c45e636..c5b2b2a 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -18,6 +18,8 @@ {% elif type == 'day' %}

Календарь — События

Год {{year_data.number}}, {{month_data.name}}, день {{day}}-й

+ {% elif type == 'error' %} +

Календарь — Ошибка

{% endif %}
@@ -29,7 +31,7 @@ {% endfor %} {% elif type == 'day' %} {% if events.count == 0 %} -

Событий нет

+

Событий нет

{% else %} {% for event in events %}
@@ -39,6 +41,14 @@
{% endfor %} {% endif %} + {% elif type == 'error' %} + {% if error_type == 'year' %} +

Неверный год

+ {% elif error_type == 'month' %} +

Неверный месяц

+ {% elif error_type == 'day' %} +

Неверный день

+ {% endif %} {% endif %}
diff --git a/faerun_calendar/views.py b/faerun_calendar/views.py index f62471f..51cf349 100644 --- a/faerun_calendar/views.py +++ b/faerun_calendar/views.py @@ -9,38 +9,69 @@ from .models import Event def day_page(request, year: int, month: int, day: int): - try: - year_data = YearData.objects.get(number=year) - except YearData.DoesNotExist: - return HttpResponseNotFound('

404 Not Found

') + params = None - try: - year_id = getattr(year_data, 'id') - except AttributeError: - return HttpResponseNotFound('

404 Not Found

') + if not params: + try: + year_data = YearData.objects.get(number=year) + except YearData.DoesNotExist: + params = {'type': 'error', 'error_type': 'year'} - try: - month_data = MonthData.objects.get(number=month) - except MonthData.DoesNotExist: - return HttpResponseNotFound('

404 Not Found

') + if not params: + try: + year_id = getattr(year_data, 'id') + except AttributeError: + params = {'type': 'error', 'error_type': 'year'} - try: - month_id = getattr(month_data, 'id') - except AttributeError: - return HttpResponseNotFound('

404 Not Found

') + if not params: + try: + month_data = MonthData.objects.get(number=month) + except MonthData.DoesNotExist: + params = {'type': 'error', 'error_type': 'month'} - try: - events = Event.objects.filter(year=year_id, month=month_id, day=day) - except Event.DoesNotExist: - return HttpResponseNotFound(f'

404 Not Found

') + if not params: + try: + month_id = getattr(month_data, 'id') + except AttributeError: + params = {'type': 'error', 'error_type': 'month'} - params = { - 'type': 'day', - 'year_data': year_data, - 'month_data': month_data, - 'day': day, - 'events': events, - } + if not params: + try: + events = Event.objects.filter(year=year_id, month=month_id, day=day) + except Event.DoesNotExist: + params = {'type': 'error', 'error_type': 'events'} + + if not params: + try: + is_leap = getattr(year_data, 'is_leap') + except AttributeError: + params = {'type': 'error', 'error_type': 'year'} + else: + try: + is_leap_month = getattr(month_data, 'is_leap_month') + except AttributeError: + params = {'type': 'error', 'error_type': 'month'} + else: + if not is_leap and is_leap_month: + params = {'type': 'error', 'error_type': 'month'} + + if not params: + try: + is_oneday = getattr(month_data, 'is_oneday') + except AttributeError: + params = {'type': 'error', 'error_type': 'month'} + else: + if is_oneday and day != 1 or not 1 <= day <= 30: + params = {'type': 'error', 'error_type': 'day'} + + if not params: + params = { + 'type': 'day', + 'year_data': year_data, + 'month_data': month_data, + 'day': day, + 'events': events, + } return render(request, 'faerun_calendar/index.html', params) From 29871e5155ad1a1760fe3758d01007ab376386c8 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Wed, 2 Nov 2022 10:19:40 +0300 Subject: [PATCH 08/10] Events are now sorted by time. Added is_suggested and is_only_for_gm for events --- faerun_calendar/models.py | 2 ++ .../static/faerun_calendar/css/main.css | 22 ++++++++++-- .../templates/faerun_calendar/index.html | 35 ++++++++++++------- faerun_calendar/views.py | 18 ++++++---- 4 files changed, 54 insertions(+), 23 deletions(-) diff --git a/faerun_calendar/models.py b/faerun_calendar/models.py index 4e0626c..090a3ea 100644 --- a/faerun_calendar/models.py +++ b/faerun_calendar/models.py @@ -61,6 +61,8 @@ class Event(models.Model): time = models.TimeField('Time') title = models.CharField('Title', max_length=250) description = models.TextField('Description', max_length=2500) + is_suggested = models.BooleanField('IsSuggested') + is_only_for_gm = models.BooleanField('IsOnlyForGm') def __str__(self): return f'({self.day}, {self.time}, {self.title})' diff --git a/faerun_calendar/static/faerun_calendar/css/main.css b/faerun_calendar/static/faerun_calendar/css/main.css index 892148c..b78c831 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -42,7 +42,9 @@ table.month td.current a { color: white; } -div.calendar { +div.calendar, +div.calendar-events, +div.calendar-error { display: flex; flex-flow: row wrap; justify-content: space-around; @@ -54,7 +56,9 @@ table.month { max-width: 350px; } -div.event { +div.event, +div.event-gm, +div.event-suggested { border: 1px solid black; padding: 20px; margin: 20px; @@ -62,6 +66,18 @@ div.event { width: 100%; } +div.event { + border: 1px solid black; +} + +div.event-gm { + border: 2px solid BlueViolet; +} + +div.event-suggested { + border: 2px solid crimson; +} + div.event-time { border: 1px solid black; border-radius: 3px; @@ -86,7 +102,7 @@ p.event-description { } p.calendar-error { - color: Crimson; + color: crimson; font-size: 200%; } diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index c5b2b2a..a1cb4c6 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -15,33 +15,42 @@ {% if type == 'year' %}

Календарь

{{year_data.number}}

- {% elif type == 'day' %} -

Календарь — События

-

Год {{year_data.number}}, {{month_data.name}}, день {{day}}-й

- {% elif type == 'error' %} -

Календарь — Ошибка

- {% endif %} -
- {% if type == 'year' %} +
{% for month in month_data %} {% if not month.is_leap_month or year_data.is_leap %} {% include 'faerun_calendar/month.html' with month=month calendar_data=calendar_data month_days=month_days events=events %} {% endif %} {% endfor %} - {% elif type == 'day' %} +
+ {% elif type == 'day' %} +

Календарь — События

+

Год {{year_data.number}}, {{month_data.name}}, день {{day}}-й

+ +
{% if events.count == 0 %}

Событий нет

{% else %} {% for event in events %} -
+ {% if event.is_suggested %} +
+ {% elif event.is_only_for_gm %} +
+ {% else %} +
+ {% endif %} +
{{event.time}}
{{event.title}}

{{event.description}}

{% endfor %} {% endif %} - {% elif type == 'error' %} +
+ {% elif type == 'error' %} +

Календарь — Ошибка

+ +
{% if error_type == 'year' %}

Неверный год

{% elif error_type == 'month' %} @@ -49,7 +58,7 @@ {% elif error_type == 'day' %}

Неверный день

{% endif %} - {% endif %} -
+
+ {% endif %}
{% endblock %} diff --git a/faerun_calendar/views.py b/faerun_calendar/views.py index 51cf349..723087d 100644 --- a/faerun_calendar/views.py +++ b/faerun_calendar/views.py @@ -1,5 +1,4 @@ from django.shortcuts import render -from django.http import HttpResponse from django.http import HttpResponseNotFound from .models import YearData @@ -11,6 +10,9 @@ from .models import Event def day_page(request, year: int, month: int, day: int): params = None + select_suggested = False + select_only_for_gm = False + if not params: try: year_data = YearData.objects.get(number=year) @@ -35,12 +37,6 @@ def day_page(request, year: int, month: int, day: int): except AttributeError: params = {'type': 'error', 'error_type': 'month'} - if not params: - try: - events = Event.objects.filter(year=year_id, month=month_id, day=day) - except Event.DoesNotExist: - params = {'type': 'error', 'error_type': 'events'} - if not params: try: is_leap = getattr(year_data, 'is_leap') @@ -55,6 +51,14 @@ def day_page(request, year: int, month: int, day: int): if not is_leap and is_leap_month: params = {'type': 'error', 'error_type': 'month'} + if not params: + try: + events = Event.objects.filter(year=year_id, month=month_id, day=day, + is_suggested=select_suggested, is_only_for_gm=select_only_for_gm + ).order_by('time') + except Event.DoesNotExist: + params = {'type': 'error', 'error_type': 'events'} + if not params: try: is_oneday = getattr(month_data, 'is_oneday') From da163a9dba7adcd71473ca19bea2fcccb38ad0f4 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Wed, 2 Nov 2022 16:54:39 +0300 Subject: [PATCH 09/10] Added migration --- .../migrations/0021_auto_20221102_0649.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 faerun_calendar/migrations/0021_auto_20221102_0649.py diff --git a/faerun_calendar/migrations/0021_auto_20221102_0649.py b/faerun_calendar/migrations/0021_auto_20221102_0649.py new file mode 100644 index 0000000..1250101 --- /dev/null +++ b/faerun_calendar/migrations/0021_auto_20221102_0649.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.12 on 2022-11-02 06:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('faerun_calendar', '0020_alter_event_day'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='is_only_for_gm', + field=models.BooleanField(default=False, verbose_name='IsOnlyForGm'), + preserve_default=False, + ), + migrations.AddField( + model_name='event', + name='is_suggested', + field=models.BooleanField(default=False, verbose_name='IsSuggested'), + preserve_default=False, + ), + ] From 2d868195e76384472eafc4efb078060079f13557 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Wed, 2 Nov 2022 17:32:01 +0300 Subject: [PATCH 10/10] Some style fixes --- .../static/faerun_calendar/css/main.css | 18 ++++++++++++++---- .../templates/faerun_calendar/index.html | 4 ++-- .../templates/faerun_calendar/month.html | 8 +++++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/faerun_calendar/static/faerun_calendar/css/main.css b/faerun_calendar/static/faerun_calendar/css/main.css index b78c831..1ae032d 100644 --- a/faerun_calendar/static/faerun_calendar/css/main.css +++ b/faerun_calendar/static/faerun_calendar/css/main.css @@ -7,6 +7,9 @@ div.calendarpage { h2.year { text-align: center; + padding-bottom: 10px; + border-bottom: 1px solid black; + margin-bottom: 20px; } table.month, table.month th, table.month td { @@ -33,7 +36,7 @@ table.month th.subtitle { font-weight: normal; } -table.month td a { +table.month a { text-decoration: none; color: black; } @@ -42,14 +45,21 @@ table.month td.current a { color: white; } -div.calendar, -div.calendar-events, -div.calendar-error { +div.calendar { + column-width: 350px; +} + +div.calendar-events { display: flex; flex-flow: row wrap; justify-content: space-around; } +div.calendar-events > p, +div.calendar-error > p { + text-align: center; +} + table.month { margin: 10px; width: 350px; diff --git a/faerun_calendar/templates/faerun_calendar/index.html b/faerun_calendar/templates/faerun_calendar/index.html index a1cb4c6..8a179e5 100644 --- a/faerun_calendar/templates/faerun_calendar/index.html +++ b/faerun_calendar/templates/faerun_calendar/index.html @@ -14,7 +14,7 @@
{% if type == 'year' %}

Календарь

-

{{year_data.number}}

+

Год {{year_data.number}}-й

{% for month in month_data %} @@ -25,7 +25,7 @@
{% elif type == 'day' %}

Календарь — События

-

Год {{year_data.number}}, {{month_data.name}}, день {{day}}-й

+

Год {{year_data.number}}-й, {{month_data.name}}{% if not month_data.is_oneday %}, день {{day}}-й{% endif %}

{% if events.count == 0 %} diff --git a/faerun_calendar/templates/faerun_calendar/month.html b/faerun_calendar/templates/faerun_calendar/month.html index b36c8c1..3d6c88c 100644 --- a/faerun_calendar/templates/faerun_calendar/month.html +++ b/faerun_calendar/templates/faerun_calendar/month.html @@ -1,7 +1,13 @@
- + {% if month.folkname %}
{{month.name}} + {% if not month.is_oneday %} + {{month.name}} + {% else %} + {{month.name}} + {% endif %} +
{{month.folkname}}