From 361767e0288b43acc3f3a0fa29f27632b1fdb62a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Fri, 5 May 2023 16:43:28 +0200 Subject: [PATCH] finished calendar, past lectures. WIP - lecture view --- .../templates/lectures/includes/lecture.html | 23 ++++++++++ .../lectures/view_lecture_index.html | 44 +++++++++---------- lectures/urls.py | 9 +++- lectures/views.py | 40 +++++++++++++++++ shared/static/shared/style.css | 5 +++ shared/templates/shared/includes/base.html | 12 ++--- 6 files changed, 101 insertions(+), 32 deletions(-) create mode 100644 lectures/templates/lectures/includes/lecture.html diff --git a/lectures/templates/lectures/includes/lecture.html b/lectures/templates/lectures/includes/lecture.html new file mode 100644 index 0000000..466d496 --- /dev/null +++ b/lectures/templates/lectures/includes/lecture.html @@ -0,0 +1,23 @@ +{% load markdownify %} + +<li> + <a href="{% url "lectures:view_lecture" lecture.id %}" class="hover:no-underline"> + <div class="card elevation-6"> + <div class="card__body p-5 hover:bg-gray-100 duration-100"> + <h2 class="head-alt-sm mb-4">{{ lecture.name }}</h2> + + <span class="flex gap-2 mb-4"> + <span> + <i class="ico--clock mr-1"></i> {{ lecture.timestamp }} + </span> + </span> + + {% if lecture.description %} + <div class="prose max-w-none"> + {{ lecture.description|markdownify|safe }} + </div> + {% endif %} + </div> + </div> + </a> +</li> diff --git a/lectures/templates/lectures/view_lecture_index.html b/lectures/templates/lectures/view_lecture_index.html index 113837f..aeb1227 100644 --- a/lectures/templates/lectures/view_lecture_index.html +++ b/lectures/templates/lectures/view_lecture_index.html @@ -37,35 +37,31 @@ </div> <div> <template v-if="isCurrentView('current_lectures')"> - <ul class="grid md:grid-cols-2 grid-cols-1 gap-4"> - {% for lecture in current_lectures %} - <li class="card elevation-6"> - <div class="card__body p-5"> - <h2 class="head-alt-sm mb-4">{{ lecture.name }}</h2> - - <span class="flex gap-2 mb-4"> - <span> - <i class="ico--clock mr-1"></i> {{ lecture.timestamp }} - </span> - </span> - - {% if lecture.description %} - <div class="prose max-w-none"> - {{ lecture.description|markdownify|safe }} - </div> - {% endif %} - </div> - </li> - {% endfor %} - </ul> + {% if current_lectures %} + <ul class="grid md:grid-cols-2 grid-cols-1 gap-4"> + {% for lecture in current_lectures %} + {% include "lectures/includes/lecture.html" with lecture=lecture %} + {% endfor %} + </ul> + {% else %} + <span class="text-gray-600">Žádné dostupné aktuální lekce.</span> + {% endif %} </template> <template v-if="isCurrentView('calendar')"> - <div class="__js-root"> - <ui-person-calendar events='[]'></ui-person-calendar> + <div> + <ui-person-calendar events='{{ calendar_data|safe }}'></ui-person-calendar> </div> </template> <template v-if="isCurrentView('recordings')"> - c + {% if past_lectures %} + <ul class="grid md:grid-cols-2 grid-cols-1 gap-4"> + {% for lecture in past_lectures %} + {% include "lectures/includes/lecture.html" with lecture=lecture %} + {% endfor %} + </ul> + {% else %} + <span class="text-gray-600">Žádné dostupné záznamy.</span> + {% endif %} </template> </div> </ui-view-provider> diff --git a/lectures/urls.py b/lectures/urls.py index 461b41f..283593a 100644 --- a/lectures/urls.py +++ b/lectures/urls.py @@ -6,8 +6,13 @@ app_name = "lectures" urlpatterns = [ path("", views.view_avilable_groups, name="view_avilable_groups"), path( - "lectures/<int:group_id>", + "groups/<int:group_id>", views.view_lecture_index, name="view_lecture_index" - ) + ), + path( + "lectures/<int:lecture_id>", + views.view_lecture, + name="view_lecture" + ), ] diff --git a/lectures/views.py b/lectures/views.py index 2ae4f25..8cc6301 100644 --- a/lectures/views.py +++ b/lectures/views.py @@ -1,7 +1,14 @@ +import datetime +import json + +from itertools import chain + from django.conf import settings from django.db import models from django.shortcuts import get_object_or_404, render from django.utils import timezone +from django.urls import reverse +from django_http_exceptions import HTTPExceptions from guardian.shortcuts import get_objects_for_user from .models import Lecture, LectureGroup @@ -62,6 +69,16 @@ def view_lecture_index(request, group_id: int): .all() ) + calendar_data = [] + all_lectures = list(chain(current_lectures, past_lectures)) + + for lecture in all_lectures: + calendar_data.append({ + "title": lecture.name, + "date": lecture.timestamp.date().isoformat(), + "url": reverse("lectures:view_lecture", args={"lecture_id": lecture.id}), + }) + return render( request, "lectures/view_lecture_index.html", @@ -73,5 +90,28 @@ def view_lecture_index(request, group_id: int): "group": group, "current_lectures": current_lectures, "past_lectures": past_lectures, + "calendar_data": json.dumps(calendar_data) + }, + ) + +def view_lecture(request, lecture_id: int): + lecture = ( + get_objects_for_user(request.user, "lectures.view_lecture"). + filter(id=lecture_id). + first() + ) + + if lecture is not None: + raise HTTPExceptions.NOT_FOUND + + return render( + request, + "lectures/view_lecture.html", + { + **get_base_context(request), + "title": f"{lecture.name}", + "description": f"e-Learningová lekce {lecture.name}.", + "header_name": lecture.name, + "lecture": lecture, }, ) diff --git a/shared/static/shared/style.css b/shared/static/shared/style.css index ab1bdd1..5465ea1 100644 --- a/shared/static/shared/style.css +++ b/shared/static/shared/style.css @@ -1185,6 +1185,11 @@ html { font-weight: 700; } +.text-gray-600 { + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity)); +} + .text-white { --tw-text-opacity: 1; color: rgb(255 255 255 / var(--tw-text-opacity)); diff --git a/shared/templates/shared/includes/base.html b/shared/templates/shared/includes/base.html index 18663db..e51670a 100644 --- a/shared/templates/shared/includes/base.html +++ b/shared/templates/shared/includes/base.html @@ -37,12 +37,12 @@ > <link - href="https://styleguide.pirati.cz/2.11.x/css/styles.css" + href="http://localhost:3000/css/styles.css" rel="stylesheet" media="all" > <link - href="https://styleguide.pirati.cz/2.11.x/css/pattern-scaffolding.css" + href="http://localhost:3000/css/pattern-scaffolding.css" rel="stylesheet" media="all" > @@ -176,13 +176,13 @@ <a href="https://dary.pirati.cz" class="btn btn--icon btn--cyan-200 btn--hoveractive text-lg btn--fullwidth sm:btn--autowidth"> <div class="btn__body-wrap"> <div class="btn__body">Přispěj</div> - <div class="btn__icon "><i class="ico--pig"></i></div> + <div class="btn__icon"><i class="ico--pig"></i></div> </div> </a> <a href="https://nalodeni.pirati.cz" class="btn btn--icon btn--blue-300 btn--hoveractive text-lg btn--fullwidth sm:btn--autowidth"> <div class="btn__body-wrap"> - <div class="btn__body ">Naloď se</div> - <div class="btn__icon "><i class="ico--anchor"></i></div> + <div class="btn__body">Naloď se</div> + <div class="btn__icon"><i class="ico--anchor"></i></div> </div> </a> </div> @@ -192,7 +192,7 @@ </footer> <script - src="https://styleguide.pirati.cz/2.12.x/js/main.bundle.js" + src="http://localhost:3000/js/main.bundle.js" ></script> </body> </html> -- GitLab