diff --git a/core/static/bundled/base-bundle-index.ts b/core/static/bundled/base-bundle-index.ts
index 3c7140e1..3434c8f2 100644
--- a/core/static/bundled/base-bundle-index.ts
+++ b/core/static/bundled/base-bundle-index.ts
@@ -7,7 +7,7 @@
*/
// Must be loaded before Apline
-import htmx, { HtmxResponse } from "htmx.org";
+import htmx from "htmx.org";
import "htmx.org/dist/ext/hx-alpine-compat.js";
import "htmx.org/dist/ext/hx-prompt.js";
import "htmx.org/dist/ext/hx-download.js";
@@ -48,13 +48,20 @@ polyfillCountryFlagEmojis();
/**
* HTMX
*/
-document.body.addEventListener("htmx:before:request", (event) => {
- event.target.ariaBusy = true;
+htmx.registerExtension("aria-busy", {
+ // biome-ignore lint/style/useNamingConvention: api's name
+ // biome-ignore lint/suspicious/noExplicitAny: no type hint
+ htmx_before_request: (_: HTMLElement, detail: any) => {
+ detail.ctx.target.ariaBusy = "true";
+ },
+ // biome-ignore lint/style/useNamingConvention: api's name
+ // biome-ignore lint/suspicious/noExplicitAny: no type hint
+ htmx_before_swap: (elt: HTMLElement, detail: any) => {
+ detail.ctx.target.ariaBusy = "null";
+ },
});
-document.body.addEventListener("htmx:before:swap", (event) => {
- event.target.ariaBusy = null;
-});
+htmx.config.transitions = true;
Object.assign(window, { htmx });
diff --git a/pedagogy/static/pedagogy/css/pedagogy.scss b/pedagogy/static/pedagogy/css/pedagogy.scss
index a177ee4e..ca7cc368 100644
--- a/pedagogy/static/pedagogy/css/pedagogy.scss
+++ b/pedagogy/static/pedagogy/css/pedagogy.scss
@@ -69,6 +69,7 @@ $pedagogy-white-text: #f0f0f0;
input[type="checkbox"] {
display: none;
}
+
margin-top: 10px;
margin-bottom: 0;
color: white;
@@ -399,6 +400,7 @@ $pedagogy-white-text: #f0f0f0;
a {
color: $pedagogy-white-text;
+ cursor: pointer;
}
a:hover {
@@ -442,7 +444,8 @@ details.accordion>.accordion-content {
border-right: none;
}
-.right {
+.buttons {
display: flex;
justify-content: flex-end;
+ align-items: center;
}
\ No newline at end of file
diff --git a/pedagogy/templates/pedagogy/fragments/comment_report.jinja b/pedagogy/templates/pedagogy/fragments/comment_report.jinja
index d729f545..39f9e6f6 100644
--- a/pedagogy/templates/pedagogy/fragments/comment_report.jinja
+++ b/pedagogy/templates/pedagogy/fragments/comment_report.jinja
@@ -1,11 +1,10 @@
\ No newline at end of file
diff --git a/pedagogy/templates/pedagogy/fragments/ue_comment.jinja b/pedagogy/templates/pedagogy/fragments/ue_comment.jinja
deleted file mode 100644
index 3a4e5cd6..00000000
--- a/pedagogy/templates/pedagogy/fragments/ue_comment.jinja
+++ /dev/null
@@ -1,83 +0,0 @@
-{% from "pedagogy/macros.jinja" import display_star %}
-{% from "core/macros.jinja" import user_profile_link %}
-
-
\ No newline at end of file
diff --git a/pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja b/pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja
index ac5968d8..7ec115be 100644
--- a/pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja
+++ b/pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja
@@ -56,9 +56,9 @@
{{ form.comment }}
-
+
-
+
{% if form.is_creation %}
diff --git a/pedagogy/templates/pedagogy/fragments/ue_details/comments.jinja b/pedagogy/templates/pedagogy/fragments/ue_details/comments.jinja
index fdc0e53c..04aee21a 100644
--- a/pedagogy/templates/pedagogy/fragments/ue_details/comments.jinja
+++ b/pedagogy/templates/pedagogy/fragments/ue_details/comments.jinja
@@ -1,3 +1,6 @@
+{% from "pedagogy/macros.jinja" import display_star %}
+{% from "core/macros.jinja" import user_profile_link %}
+
{% if comments %}
{% trans %}Comments{% endtrans %}
@@ -5,6 +8,84 @@
{% for comment in comments %}
- {% include "pedagogy/fragments/ue_comment.jinja" %}
+
+
{% endfor %}
diff --git a/pedagogy/templates/pedagogy/ue_detail.jinja b/pedagogy/templates/pedagogy/ue_detail.jinja
index aaec4bee..deb8fdf2 100644
--- a/pedagogy/templates/pedagogy/ue_detail.jinja
+++ b/pedagogy/templates/pedagogy/ue_detail.jinja
@@ -82,9 +82,7 @@
diff --git a/pedagogy/urls.py b/pedagogy/urls.py
index cc296f73..4631df90 100644
--- a/pedagogy/urls.py
+++ b/pedagogy/urls.py
@@ -26,7 +26,6 @@ from django.urls import path
from pedagogy.views import (
UECommentCreateView,
UECommentDeleteView,
- UECommentDetailView,
UECommentReportCreateView,
UECommentUpdateView,
UECreateView,
@@ -46,11 +45,6 @@ urlpatterns = [
UECommentCreateView.as_view(),
name="comment_create",
),
- path(
- "comment//",
- UECommentDetailView.as_view(),
- name="comment_detail",
- ),
path(
"comment//edit/",
UECommentUpdateView.as_view(),
diff --git a/pedagogy/views.py b/pedagogy/views.py
index 036c47fc..ba2157f9 100644
--- a/pedagogy/views.py
+++ b/pedagogy/views.py
@@ -26,6 +26,7 @@ from django.contrib.auth.mixins import PermissionRequiredMixin
from django.db.models import Exists, OuterRef
from django.shortcuts import get_object_or_404
from django.urls import reverse, reverse_lazy
+from django.utils.functional import cached_property
from django.views.generic import (
CreateView,
DeleteView,
@@ -54,12 +55,9 @@ class UECommentCreateView(PermissionRequiredMixin, FragmentMixin, CreateView):
permission_required = "pedagogy.add_uecomment"
object = None # Avoid initialisation bug with FragmentMixin
- @property
+ @cached_property
def ue(self):
- if hasattr(self, "_ue"):
- return self._ue
- self._ue = get_object_or_404(UE, id=self.kwargs.get("ue_id"))
- return self._ue
+ return get_object_or_404(UE, id=self.kwargs.get("ue_id"))
def has_permission(self):
if self.ue.has_user_already_commented(self.request.user):
@@ -112,24 +110,6 @@ class UEDetailView(
}
-class UECommentDetailView(PermissionRequiredMixin, DetailView):
- model = UEComment
- pk_url_kwarg = "comment_id"
- template_name = "pedagogy/fragments/ue_comment.jinja"
- permission_required = "pedagogy.view_ue"
- context_object_name = "comment"
-
- def get_queryset(self):
- return (
- super().get_queryset().viewable_by(self.request.user).annotate_is_reported()
- )
-
- def get_context_data(self, **kwargs):
- return super().get_context_data(**kwargs) | {
- "ue": getattr(self.object, "ue", None)
- }
-
-
class UECommentUpdateView(PermissionOrAuthorRequiredMixin, AllowFragment, UpdateView):
"""Allow edit of a given comment."""
@@ -155,7 +135,7 @@ class UECommentUpdateView(PermissionOrAuthorRequiredMixin, AllowFragment, Update
}
def get_success_url(self):
- return reverse("pedagogy:comment_detail", kwargs={"comment_id": self.object.id})
+ return reverse("pedagogy:ue_detail", kwargs={"ue_id": self.object.ue.id})
class UECommentDeleteView(PermissionOrAuthorRequiredMixin, AllowFragment, DeleteView):
@@ -173,7 +153,7 @@ class UECommentDeleteView(PermissionOrAuthorRequiredMixin, AllowFragment, Delete
return response
def get_success_url(self):
- return reverse("pedagogy:comment_detail", kwargs={"comment_id": self.object.id})
+ return reverse("pedagogy:ue_detail", kwargs={"ue_id": self.object.ue.id})
class UEGuideView(PermissionRequiredMixin, TemplateView):
@@ -195,6 +175,10 @@ class UECommentReportCreateView(PermissionRequiredMixin, AllowFragment, CreateVi
self.ue_comment = get_object_or_404(UEComment, pk=kwargs["comment_id"])
return super().dispatch(request, *args, **kwargs)
+ @cached_property
+ def ue_detail_url(self):
+ return reverse("pedagogy:ue_detail", kwargs={"ue_id": self.ue_comment.ue.id})
+
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs["reporter_id"] = self.request.user.id
@@ -204,6 +188,7 @@ class UECommentReportCreateView(PermissionRequiredMixin, AllowFragment, CreateVi
def get_context_data(self, **kwargs):
return super().get_context_data() | {
"comment_id": self.ue_comment.id,
+ "ue_detail_url": self.ue_detail_url,
}
def form_valid(self, form):
@@ -224,9 +209,7 @@ class UECommentReportCreateView(PermissionRequiredMixin, AllowFragment, CreateVi
return resp
def get_success_url(self):
- return reverse(
- "pedagogy:comment_detail", kwargs={"comment_id": self.ue_comment.id}
- )
+ return self.ue_detail_url
class UEModerationFormView(PermissionRequiredMixin, FormView):
{% trans %}Global grade{% endtrans %}
-{% trans %}Utility{% endtrans %}
-{% trans %}Interest{% endtrans %}
-{% trans %}Teaching{% endtrans %}
-{% trans %}Work load{% endtrans %}
-{{ display_star(comment.grade_global) }}
-{{ display_star(comment.grade_utility) }}
-{{ display_star(comment.grade_interest) }}
-{{ display_star(comment.grade_teaching) }}
-{{ display_star(comment.grade_work_load) }}
-- {% trans %}This comment has been reported{% endtrans %} -
- {% endif %} - - {% if comment.author_id == user.id or user.has_perm("pedagogy.change_comment") %} - - {% endif %} - {% if comment.author_id == user.id or user.has_perm("pedagogy.delete_comment") %} - - {% endif %} -- - {% trans %}Report this comment{% endtrans %} - -
-{{ comment.publish_date.strftime('%d/%m/%Y') }}
{{ user_profile_link(comment.author) }}