Refactor pagination for month/year

This commit is contained in:
Edgar P. Burkhart 2024-01-02 14:56:13 +01:00
parent 35b26f2d10
commit 2ba21fbd10
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
7 changed files with 51 additions and 44 deletions

View file

@ -25,7 +25,7 @@
{% if date.sum_m or date.sum_p %}
<tr {% if not date.month.month|divisibleby:"2" %}class="even"{% endif %}>
<td class="icon">{% up_down_icon date.sum %}</td>
<th class="date" scope="row">{% month_url date.month account=account category=category %}</th>
<th class="date" scope="row">{% month_url date.month %}</th>
<td class="value">{{ date.sum_m|pmrvalue }}</td>
<td class="bar m">{% plot_bar date.sum date.sum_m history.max.pm %}</td>
<td class="bar p">{% plot_bar date.sum date.sum_p history.max.pm %}</td>
@ -53,7 +53,7 @@
{% regroup history.data by month.year as years_list %}
{% for y, year in years_list reversed %}
<tr>
<th class="date" scope="row">{% year_url y account=account category=category %}</th>
<th class="date" scope="row">{% year_url y %}</th>
{% for m in year %}
{% if forloop.parentloop.last and forloop.first %}
{% empty_calendar_cells_start m.month.month %}

View file

@ -163,6 +163,23 @@ footer {
}
}
}
&.n3 {
display: grid;
grid-template-columns: repeat(3, 1fr);
width: max-content;
margin: auto;
.prev {
grid-column: 1;
}
.cur {
grid-column: 2;
}
.next {
grid-column: 3;
}
}
}
@media (width < 1024px) {

View file

@ -8,29 +8,25 @@
</p>
{% endif %}
{% if month %}
<p class="pagination">{% year_url month.year account=account category=category %}</p>
<p class="pagination">
{% with month=previous_month %}
{% include "main/pagination_month.html" %}
{% endwith %}
{% with cur=True %}
{% include "main/pagination_month.html" %}
{% endwith %}
{% with month=next_month %}
{% include "main/pagination_month.html" %}
{% endwith %}
<p class="pagination">{% year_url month %}</p>
<p class="pagination n3">
{% if previous_month %}
{% month_url previous_month %}
{% endif %}
{% month_url month cls="cur" %}
{% if next_month %}
{% month_url next_month %}
{% endif %}
</p>
{% endif %}
{% if year %}
<p class="pagination">
{% with year=previous_year %}
{% include "main/pagination_year.html" %}
{% endwith %}
{% with cur=True %}
{% include "main/pagination_year.html" %}
{% endwith %}
{% with year=next_year %}
{% include "main/pagination_year.html" %}
{% endwith %}
<p class="pagination n3">
{% if previous_year %}
{% year_url previous_year cls="prev" %}
{% endif %}
{% year_url year cls="cur" %}
{% if next_year %}
{% year_url next_year cls="next" %}
{% endif %}
</p>
{% endif %}

View file

@ -1,5 +0,0 @@
{% load i18n %}
{% if month %}
<a {% if cur %}class="cur"{% endif %}
href="{% if account %}{% url "account_transaction_month" account.id month.year month.month %}{% elif category %}{% url "category_transaction_month" category.id month.year month.month %}{% else %}{% url "transaction_month" month.year month.month %}{% endif %}">{{ month|date:"F Y"|capfirst }}</a>
{% endif %}

View file

@ -1,5 +0,0 @@
{% load i18n %}
{% if year %}
<a {% if cur %}class="cur"{% endif %}
href="{% if account %}{% url "account_transaction_year" account.id year.year %}{% elif category %}{% url "category_transaction_year" category.id year.year %}{% else %}{% url "transaction_year" year.year %}{% endif %}">{{ year|date:"Y" }}</a>
{% endif %}

View file

@ -1,3 +1,5 @@
import datetime
from django import template
from django.template.defaultfilters import date
from django.urls import reverse
@ -8,19 +10,21 @@ from ..utils import ac_url
register = template.Library()
@register.simple_tag
def month_url(month, **kwargs):
@register.simple_tag(takes_context=True)
def month_url(context, month, cls=""):
url_name, url_params = ac_url(
"transaction_month", {"year": month.year, "month": month.month}, **kwargs
"transaction_month", {"year": month.year, "month": month.month}, context
)
url = reverse(url_name, kwargs=url_params)
return mark_safe(f"""<a href="{url}">{ date(month, "Y-m") }</a>""")
return mark_safe(f"""<a class="{cls}" href="{url}">{ date(month, "Y-m") }</a>""")
@register.simple_tag
def year_url(year, **kwargs):
url_name, url_params = ac_url("transaction_year", {"year": year}, **kwargs)
@register.simple_tag(takes_context=True)
def year_url(context, year, cls=""):
if isinstance(year, datetime.date):
year = year.year
url_name, url_params = ac_url("transaction_year", {"year": year}, context)
url = reverse(url_name, kwargs=url_params)
return mark_safe(f"""<a href="{url}">{ year }</a>""")
return mark_safe(f"""<a class="{cls}" href="{url}">{ year }</a>""")

View file

@ -1,8 +1,8 @@
def ac_url(url_name, url_params, account=None, category=None):
if account:
def ac_url(url_name, url_params, context):
if account := context.get("account"):
url_name = "account_" + url_name
url_params |= {"account": account.pk}
elif category:
elif category := context.get("category"):
url_name = "category_" + url_name
url_params |= {"category": category.pk}