From 5f6407a66b633b1577f8a2eae567d48023025b9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?= <benjamin.haettasch@cs.tu-darmstadt.de> Date: Fri, 18 Oct 2019 01:37:44 +0200 Subject: [PATCH] Add more views to submission component and improve existing one Add dynamic title handling to base html Add more information to submission overview Move AK list to own file for use in other pages Add detail view for AK Add views with AK overview list as well as filtered lists (by type and tag) Add corresponding German translations --- .../locale/de_DE/LC_MESSAGES/django.po | 75 +++++++++++++++---- .../templates/AKSubmission/ak_detail.html | 71 ++++++++++++++++++ .../templates/AKSubmission/ak_list.html | 38 ++++++++++ .../templates/AKSubmission/ak_list_table.html | 38 ++++++++++ .../AKSubmission/submission_overview.html | 23 +----- AKSubmission/urls.py | 4 + AKSubmission/views.py | 53 ++++++++++++- templates/base.html | 2 +- 8 files changed, 266 insertions(+), 38 deletions(-) create mode 100644 AKSubmission/templates/AKSubmission/ak_detail.html create mode 100644 AKSubmission/templates/AKSubmission/ak_list.html create mode 100644 AKSubmission/templates/AKSubmission/ak_list_table.html diff --git a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po index 1a7d279c..b89bab64 100644 --- a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po +++ b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-10-17 14:14+0000\n" +"POT-Creation-Date: 2019-10-17 23:30+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,27 +17,70 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: templates/AKSubmission/submission_overview.html:9 -#: templates/AKSubmission/submission_overview.html:13 +#: templates/AKSubmission/ak_detail.html:6 +#: templates/AKSubmission/ak_detail.html:11 +#: templates/AKSubmission/ak_detail.html:16 +#: templates/AKSubmission/ak_list.html:6 templates/AKSubmission/ak_list.html:11 +#: templates/AKSubmission/ak_list.html:16 +#: templates/AKSubmission/submission_overview.html:6 +#: templates/AKSubmission/submission_overview.html:11 +#: templates/AKSubmission/submission_overview.html:15 msgid "AK Submission" msgstr "AK-Eintragung" -#: templates/AKSubmission/submission_overview.html:18 -msgid "Submit" -msgstr "Eintragen" +#: templates/AKSubmission/ak_detail.html:28 +#: templates/AKSubmission/ak_list_table.html:6 +msgid "Who?" +msgstr "Wer?" -#: templates/AKSubmission/submission_overview.html:24 -msgid "Current AKs" -msgstr "Aktuelle AKs" +#: templates/AKSubmission/ak_detail.html:29 +#: templates/AKSubmission/ak_list_table.html:6 +msgid "Type" +msgstr "Typ" + +#: templates/AKSubmission/ak_detail.html:31 +#: templates/AKSubmission/ak_list_table.html:6 +msgid "Tags" +msgstr "Tags" + +#: templates/AKSubmission/ak_detail.html:39 +msgid "Reso?" +msgstr "Reso?" + +#: templates/AKSubmission/ak_detail.html:55 +msgid "When?" +msgstr "Wann?" + +#: templates/AKSubmission/ak_detail.html:56 +msgid "Duration" +msgstr "Dauer" + +#: templates/AKSubmission/ak_detail.html:57 +msgid "Room" +msgstr "Raum" -#: templates/AKSubmission/submission_overview.html:27 +#: templates/AKSubmission/ak_list.html:12 +msgid "AKs" +msgstr "AKs" + +#: templates/AKSubmission/ak_list_table.html:6 msgid "Name" msgstr "Name" -#: templates/AKSubmission/submission_overview.html:27 -msgid "Who?" -msgstr "Wer?" +#: templates/AKSubmission/ak_list_table.html:13 +#, fuzzy +#| msgid "Current AKs" +msgid "Present AK" +msgstr "Aktuelle AKs" -#: templates/AKSubmission/submission_overview.html:27 -msgid "Tags" -msgstr "Tags" +#: templates/AKSubmission/ak_list_table.html:15 +msgid "Reso" +msgstr "Reso" + +#: templates/AKSubmission/submission_overview.html:20 +msgid "Submit" +msgstr "Eintragen" + +#: templates/AKSubmission/submission_overview.html:26 +msgid "Current AKs" +msgstr "Aktuelle AKs" diff --git a/AKSubmission/templates/AKSubmission/ak_detail.html b/AKSubmission/templates/AKSubmission/ak_detail.html new file mode 100644 index 00000000..3180e1fc --- /dev/null +++ b/AKSubmission/templates/AKSubmission/ak_detail.html @@ -0,0 +1,71 @@ +{% extends 'base.html' %} + +{% load i18n %} +{% load fontawesome %} + +{% block title %}{{ ak.event.slug }} - {% trans "AK Submission" %} - {{ ak.slug }}{% endblock %} + +{% block breadcrumbs %} + <li class="breadcrumb-item"><a href="#">AKPlanning</a></li> + <li class="breadcrumb-item"><a href="#">{{ ak.event.slug }}</a></li> + <li class="breadcrumb-item"><a href="{% url 'submit:submission_overview' event_slug=ak.event.slug %}">{% trans "AK Submission" %}</a></li> + <li class="breadcrumb-item active">{{ ak.name }}</li> +{% endblock %} + +{% block content %} + <h1 style="margin-bottom: 30px;">{{ ak.event.name }}: {% trans "AK Submission" %}</h1> + + <div class="float-right"> + {% if ak.link != "" %} + <a href="{{ ak.link }}" class="btn btn-info">{% fontawesome_icon 'external-link-alt' %}</a> + {% endif %} + <a href="#" class="btn btn-success">{% fontawesome_icon 'pencil-alt' %}</a> + </div> + + <h2>{{ ak.name }}</h2> + + <table class="table table-borderless"> + <tr><td>{% trans "Who?" %}</td><td>{{ ak.owners_list }}</td></tr> + <tr><td>{% trans "Type" %}</td><td><a href="{% url 'submit:ak_list_by_type' event_slug=ak.event.slug type_pk=ak.type.pk %}"><span class="badge badge-primary">{{ ak.type }}</span></a></td></tr> + <tr> + <td>{% trans "Tags" %}</td> + <td> + {% for tag in ak.tags.all %} + <a href="{% url 'submit:ak_list_by_tag' event_slug=ak.event.slug tag_pk=tag.pk %}"><span class="badge badge-info">{{ tag }}</span></a> + {% endfor %} + </td> + </tr> + <tr> + <td>{% trans "Reso?" %}</td> + <td> + {% if ak.reso %} + {% fontawesome_icon "check" %} + {% else %} + {% fontawesome_icon "times" %} + {% endif %} + </td> + </tr> + </table> + + <p style="margin-top: 30px;margin-bottom: 30px;">{{ ak.description }}</p> + + <table class="table"> + <thead> + <tr> + <th>{% trans "When?" %}</th> + <th>{% trans "Duration" %}</th> + <th>{% trans "Room" %}</th> + </tr> + </thead> + <tbody> + {% for slot in ak.akslot_set.all %} + <tr> + <td>{{ slot.start_simplified }}</td> + <td>{{ slot.duration }}</td> + <td>{{ slot.room }}</td> + </tr> + {% endfor %} + </tbody> + </table> + +{% endblock %} diff --git a/AKSubmission/templates/AKSubmission/ak_list.html b/AKSubmission/templates/AKSubmission/ak_list.html new file mode 100644 index 00000000..ac86f6d4 --- /dev/null +++ b/AKSubmission/templates/AKSubmission/ak_list.html @@ -0,0 +1,38 @@ +{% extends 'base.html' %} + +{% load i18n %} +{% load fontawesome %} + +{% block title %}{{ event.slug }} - {% trans "AK Submission" %}{% endblock %} + +{% block breadcrumbs %} + <li class="breadcrumb-item"><a href="#">AKPlanning</a></li> + <li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li> + <li class="breadcrumb-item"><a href="{% url 'submit:submission_overview' event_slug=event.slug %}">{% trans "AK Submission" %}</a></li> + <li class="breadcrumb-item active">{% trans "AKs" %}</li> +{% endblock %} + +{% block content %} + <h1>{{ event.name }}: {% trans "AK Submission" %}</h1> + + <b>Types:</b> + {% for type in types %} + <a href="{% url 'submit:ak_list_by_type' event_slug=event.slug type_pk=type.pk %}"><span class="badge badge-primary">{{ type }}</span></a> + {% endfor %} + + <br><br> + + <b>Tags:</b> + {% for tag in tags.all %} + <a href="{% url 'submit:ak_list_by_tag' event_slug=event.slug tag_pk=tag.pk %}"><span class="badge badge-primary">{{ tag }}</span></a> + {% endfor %} + + <br><br> + + {% if filter_condition_string != "" %} + <h2 class="text-secondary">{{ filter_condition_string }}</h2> + {% endif %} + + {% include "AKSubmission/ak_list_table.html" %} + +{% endblock %} diff --git a/AKSubmission/templates/AKSubmission/ak_list_table.html b/AKSubmission/templates/AKSubmission/ak_list_table.html new file mode 100644 index 00000000..b56d69bd --- /dev/null +++ b/AKSubmission/templates/AKSubmission/ak_list_table.html @@ -0,0 +1,38 @@ +{% load i18n %} +{% load fontawesome %} + +<table id="akTable" class="table table-striped"> + <thead> + <tr><th>{% trans "Name" %}</th><th>{% trans "Who?" %}</th><th>{% trans "Type" %}</th><th>{% trans "Tags" %}</th><th></th></tr> + </thead> + <tbody> + {% for ak in AKs %} + <tr> + <td> + <b>{{ ak.name }}</b> + <span class="badge badge-dark badge-pill" title="{% trans 'Present AK' %}">{% fontawesome_icon "bullhorn" %}</span> + {% if ak.reso %} + <span class="badge badge-dark badge-pill" title="{% trans 'Reso' %}">{% fontawesome_icon "scroll" %}</span> + {% endif %} + </td> + <td>{{ ak.owners_list }}</td> + <td><a href="{% url 'submit:ak_list_by_type' event_slug=event.slug type_pk=ak.type.pk %}"><span class="badge badge-primary">{{ ak.type }}</span></a></td> + <td> + {% for tag in ak.tags.all %} + <a href="{% url 'submit:ak_list_by_tag' event_slug=event.slug tag_pk=tag.pk %}"><span class="badge badge-info">{{ tag }}</span></a> + {% endfor %} + </td> + <td class="text-right"> + <a href="{% url 'submit:ak_detail' event_slug=ak.event.slug pk=ak.pk %}" class="btn btn-primary">{% fontawesome_icon 'info' %}</a> + {% if ak.link != "" %} + <a href="{{ ak.link }}" class="btn btn-info">{% fontawesome_icon 'external-link-alt' %}</a> + {% endif %} + <a href="#" class="btn btn-success">{% fontawesome_icon 'pencil-alt' %}</a> + </td> + </tr> + <tr> + <td colspan="5" class="small">{{ ak.description }}</td> + </tr> + {% endfor %} + </tbody> +</table> diff --git a/AKSubmission/templates/AKSubmission/submission_overview.html b/AKSubmission/templates/AKSubmission/submission_overview.html index ca28640c..f9529bd2 100644 --- a/AKSubmission/templates/AKSubmission/submission_overview.html +++ b/AKSubmission/templates/AKSubmission/submission_overview.html @@ -3,6 +3,8 @@ {% load i18n %} {% load fontawesome %} +{% block title %}{{ event.slug }} - {% trans "AK Submission" %}{% endblock %} + {% block breadcrumbs %} <li class="breadcrumb-item"><a href="#">AKPlanning</a></li> <li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li> @@ -23,23 +25,6 @@ <h2>{% trans "Current AKs" %}</h2> - <table class="table table-striped"> - <tr><th>{% trans "Name" %}</th><th>{% trans "Who?" %}</th><th>{% trans "Tags" %}</th><th></th></tr> - - {% for ak in AKs %} - <tr> - <td>{{ ak.name }}</td> - <td>{{ ak.owners_list }}</td> - <td> - {% for tag in ak.tags.all %} - <span class="badge badge-info">{{ tag }}</span> - {% endfor %} - </td> - <td> - <a href="#" class="btn btn-primary">{% fontawesome_icon 'info' %}</a> - <a href="#" class="btn btn-success">{% fontawesome_icon 'edit' %}</a> - </td> - </tr> - {% endfor %} - </table> + {% include "AKSubmission/ak_list_table.html" %} + {% endblock %} diff --git a/AKSubmission/urls.py b/AKSubmission/urls.py index 000bcc51..fc535223 100644 --- a/AKSubmission/urls.py +++ b/AKSubmission/urls.py @@ -9,6 +9,10 @@ urlpatterns = [ '<slug:event_slug>/', include([ path('submission/', views.SubmissionOverviewView.as_view(), name='submission_overview'), + path('submission/ak/<int:pk>', views.AKDetailView.as_view(), name='ak_detail'), + path('submission/aks/', views.AKListView.as_view(), name='ak_list'), + path('submission/aks/type/<int:type_pk>', views.AKListByTypeView.as_view(), name='ak_list_by_type'), + path('submission/aks/tag/<int:tag_pk>', views.AKListByTagView.as_view(), name='ak_list_by_tag'), ]) ), ] diff --git a/AKSubmission/views.py b/AKSubmission/views.py index 634334d0..08cf8ae2 100644 --- a/AKSubmission/views.py +++ b/AKSubmission/views.py @@ -1,11 +1,60 @@ -from django.views.generic import ListView +from django.http import Http404 +from django.views.generic import ListView, DetailView -from AKModel.models import AK +from AKModel.models import AK, AKType, AKTag from AKModel.views import FilterByEventSlugMixin +from django.utils.translation import gettext_lazy as _ + class SubmissionOverviewView(FilterByEventSlugMixin, ListView): model = AK context_object_name = "AKs" template_name = "AKSubmission/submission_overview.html" ordering = ["type"] + + +class AKDetailView(DetailView): + model = AK + context_object_name = "ak" + template_name = "AKSubmission/ak_detail.html" + + +class AKListView(FilterByEventSlugMixin, ListView): + model = AK + context_object_name = "AKs" + template_name = "AKSubmission/ak_list.html" + filter_condition_string = "" + + def get_context_data(self, *, object_list=None, **kwargs): + context = super().get_context_data(object_list=object_list, **kwargs) + context["types"] = AKType.objects.all() + context["tags"] = AKTag.objects.all() + context["filter_condition_string"] = self.filter_condition_string + return context + + +class AKListByTypeView(AKListView): + type = None + + def get_queryset(self): + # Find type based on event slug + try: + self.type = AKType.objects.get(pk=self.kwargs['type_pk']) + self.filter_condition_string = f"{_('Type')} = {self.type.name}" + except AKType.DoesNotExist: + raise Http404 + return super().get_queryset().filter(type=self.type) + + +class AKListByTagView(AKListView): + tag = None + + def get_queryset(self): + # Find type based on event slug + try: + self.tag = AKTag.objects.get(pk=self.kwargs['tag_pk']) + self.filter_condition_string = f"{_('Tag')} = {self.tag.name}" + except AKTag.DoesNotExist: + raise Http404 + return super().get_queryset().filter(tags=self.tag) diff --git a/templates/base.html b/templates/base.html index 2fca2964..669bd806 100644 --- a/templates/base.html +++ b/templates/base.html @@ -6,7 +6,7 @@ <html lang="en"> <head> <meta charset="UTF-8"> - <title>AKPlanning</title> + <title>{% block title %}AK Planning{% endblock %}</title> {# Load Bootstrap CSS and JavaScript as well as font awesome #} {% bootstrap_css %} -- GitLab