From 58356a077412e0afd72b94ab8706ebd6e0485142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org> Date: Sun, 18 Dec 2022 10:56:43 +0100 Subject: [PATCH] Rework pool so that edadmin actions occur there --- .../_hx_submission_tab_contents_edadmin.html | 4 + ...ncoming.html => _submission_incoming.html} | 0 scipost_django/edadmin/urls/base.py | 5 + scipost_django/edadmin/views/base.py | 10 ++ scipost_django/edadmin/views/incoming.py | 8 +- .../pool/_hx_submission_details.html | 10 +- ...ons_list.html => _hx_submission_list.html} | 12 ++- .../submissions/pool/_hx_submission_tab.html | 92 +++++++++++++++++++ .../templates/submissions/pool/pool.html | 2 +- scipost_django/submissions/urls/pool.py | 9 +- scipost_django/submissions/views/pool.py | 17 +++- 11 files changed, 154 insertions(+), 15 deletions(-) create mode 100644 scipost_django/edadmin/templates/edadmin/_hx_submission_tab_contents_edadmin.html rename scipost_django/edadmin/templates/edadmin/{_hx_submission_incoming.html => _submission_incoming.html} (100%) rename scipost_django/submissions/templates/submissions/pool/{_hx_submissions_list.html => _hx_submission_list.html} (64%) create mode 100644 scipost_django/submissions/templates/submissions/pool/_hx_submission_tab.html diff --git a/scipost_django/edadmin/templates/edadmin/_hx_submission_tab_contents_edadmin.html b/scipost_django/edadmin/templates/edadmin/_hx_submission_tab_contents_edadmin.html new file mode 100644 index 000000000..37830fc59 --- /dev/null +++ b/scipost_django/edadmin/templates/edadmin/_hx_submission_tab_contents_edadmin.html @@ -0,0 +1,4 @@ +<h1>Editorial administration</h1> +{% if submission.in_stage_incoming %} + {% include "edadmin/_submission_incoming.html" with submission=submission %} +{% endif %} diff --git a/scipost_django/edadmin/templates/edadmin/_hx_submission_incoming.html b/scipost_django/edadmin/templates/edadmin/_submission_incoming.html similarity index 100% rename from scipost_django/edadmin/templates/edadmin/_hx_submission_incoming.html rename to scipost_django/edadmin/templates/edadmin/_submission_incoming.html diff --git a/scipost_django/edadmin/urls/base.py b/scipost_django/edadmin/urls/base.py index ba6aee73f..a3fd96ea8 100644 --- a/scipost_django/edadmin/urls/base.py +++ b/scipost_django/edadmin/urls/base.py @@ -25,6 +25,11 @@ urlpatterns = [ base._hx_submission_details_contents, name="_hx_submission_details_contents", ), + path( + "tab/edadmin", + base._hx_submission_tab_contents_edadmin, + name="_hx_submission_tab_contents_edadmin", + ), ]), ), ] diff --git a/scipost_django/edadmin/views/base.py b/scipost_django/edadmin/views/base.py index 362e2ae27..5dd3145b5 100644 --- a/scipost_django/edadmin/views/base.py +++ b/scipost_django/edadmin/views/base.py @@ -58,3 +58,13 @@ def _hx_submission_details_contents(request, identifier_w_vn_nr): ) context = {"submission": submission,} return render(request, "edadmin/_hx_submission_details_contents.html", context) + + +@login_required +@user_passes_test(is_edadmin) +def _hx_submission_tab_contents_edadmin(request, identifier_w_vn_nr): + submission = get_object_or_404( + Submission, preprint__identifier_w_vn_nr=identifier_w_vn_nr + ) + context = {"submission": submission,} + return render(request, "edadmin/_hx_submission_tab_contents_edadmin.html", context) diff --git a/scipost_django/edadmin/views/incoming.py b/scipost_django/edadmin/views/incoming.py index 49b93715c..81fb2c6fc 100644 --- a/scipost_django/edadmin/views/incoming.py +++ b/scipost_django/edadmin/views/incoming.py @@ -56,7 +56,7 @@ def _hx_submission_admissibility(request, identifier_w_vn_nr): submission.refresh_from_db() # trigger re-rendering of the details-contents div response = HttpResponse() - response["HX-Trigger"] = f"submission-{submission.pk}-details-updated" + response["HX-Trigger"] = f"submission-{submission.pk}-tab-edadmin-updated" return response context = {"submission": submission, "form": form,} return render(request, "edadmin/_hx_submission_admissibility_form.html", context) @@ -123,7 +123,7 @@ def _hx_plagiarism_internal_assess(request, identifier_w_vn_nr): if form.is_valid(): # trigger re-rendering of details-contents div assessment = form.save() response = HttpResponse() - response["HX-Trigger"] = f"submission-{submission.pk}-details-updated" + response["HX-Trigger"] = f"submission-{submission.pk}-tab-edadmin-updated" return response context = { "submission": submission, @@ -173,7 +173,7 @@ def _hx_plagiarism_iThenticate_assess(request, identifier_w_vn_nr): if form.is_valid(): # trigger re-rendering of details-contents div assessment = form.save() response = HttpResponse() - response["HX-Trigger"] = f"submission-{submission.pk}-details-updated" + response["HX-Trigger"] = f"submission-{submission.pk}-tab-edadmin-updated" return response context = { "submission": submission, @@ -218,7 +218,7 @@ def _hx_submission_admission(request, identifier_w_vn_nr): submission.refresh_from_db() # redirect to the edadmin page so that all is refreshed response = HttpResponse() - response["HX-Redirect"] = reverse("edadmin:edadmin") + response["HX-Redirect"] = reverse("submissions:pool:pool") return response context = {"submission": submission, "form": form,} return render(request, "edadmin/_hx_submission_admission_form.html", context) diff --git a/scipost_django/submissions/templates/submissions/pool/_hx_submission_details.html b/scipost_django/submissions/templates/submissions/pool/_hx_submission_details.html index e0e8a32b3..13fedfecd 100644 --- a/scipost_django/submissions/templates/submissions/pool/_hx_submission_details.html +++ b/scipost_django/submissions/templates/submissions/pool/_hx_submission_details.html @@ -8,14 +8,14 @@ </summary> - <div id="details_{{ submission.id }}" - class="mt-2" - hx-get="{% url 'submissions:pool:_hx_submission_details_contents' submission.preprint.identifier_w_vn_nr %}" + <div id="tabs-{{ submission.id }}" + class="m-2 p-2" + hx-get="{% url 'submissions:pool:_hx_submission_tab' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='info' %}" hx-trigger="toggle once from:#submission-{{ submission.pk }}-details" - hx-indicator="#indicator-details-{{ submission.id }}" + hx-indicator="#indicator-tabs-{{ submission.id }}" > </div> - <span id="indicator-details-{{ submission.id }}" class="htmx-indicator p-1"> + <span id="indicator-tabs-{{ submission.id }}" class="htmx-indicator p-1"> <button class="btn btn-sm btn-warning p-2" type="button" disabled> <small><strong>Loading...</strong></small> <div class="spinner-grow spinner-grow-sm ms-2" role="status" aria-hidden="true"></div> diff --git a/scipost_django/submissions/templates/submissions/pool/_hx_submissions_list.html b/scipost_django/submissions/templates/submissions/pool/_hx_submission_list.html similarity index 64% rename from scipost_django/submissions/templates/submissions/pool/_hx_submissions_list.html rename to scipost_django/submissions/templates/submissions/pool/_hx_submission_list.html index e1d1013e0..1beac9019 100644 --- a/scipost_django/submissions/templates/submissions/pool/_hx_submissions_list.html +++ b/scipost_django/submissions/templates/submissions/pool/_hx_submission_list.html @@ -5,7 +5,7 @@ <strong>No Submission could be found</strong> {% endfor %} {% if page_obj.has_next %} - <div hx-post="{% url 'submissions:pool:_hx_submissions_list' %}?page={{ page_obj.next_page_number }}" + <div hx-post="{% url 'submissions:pool:_hx_submission_list' %}?page={{ page_obj.next_page_number }}" hx-include="#search-form" hx-trigger="revealed" hx-swap="afterend" @@ -19,3 +19,13 @@ </div> </div> {% endif %} + +{% block footer_script %} + <script type="module" nonce="{{ request.csp_nonce }}"> + import mermaid from 'https://unpkg.com/mermaid@9/dist/mermaid.esm.min.mjs'; + mermaid.initialize({ startOnLoad: false }); + document.body.addEventListener("htmx:afterSettle", function(evt) { + mermaid.init(".workflowDiagram"); + }); + </script> +{% endblock footer_script %} diff --git a/scipost_django/submissions/templates/submissions/pool/_hx_submission_tab.html b/scipost_django/submissions/templates/submissions/pool/_hx_submission_tab.html new file mode 100644 index 000000000..4ff6a3d9c --- /dev/null +++ b/scipost_django/submissions/templates/submissions/pool/_hx_submission_tab.html @@ -0,0 +1,92 @@ +<ul class="nav nav-pills justify-content-center"> + <li class="nav-item"> + <a class="nav-link{% if tab == "info" %} active{% endif %}" + hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='info' %}" + hx-target="#tabs-{{ submission.id }}" + >Submission<br>information</a> + </li> + <li class="nav-item"> + <a class="nav-link{% if tab == "refereeing" %} active{% endif %}" + hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='refereeing' %}" + hx-target="#tabs-{{ submission.id }}" + >Refereeing<br>history</a> + </li> + <li class="nav-item"> + <a class="nav-link{% if tab == "remarks" %} active{% endif %}" + hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='remarks' %}" + hx-target="#tabs-{{ submission.id }}" + >Remarks</a> + </li> + <li class="nav-item"> + <a class="nav-link{% if tab == "graph" %} active{% endif %}" + hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='graph' %}" + hx-target="#tabs-{{ submission.id }}" + >Graph</a> + </li> + <li class="nav-item"> + <a class="nav-link{% if tab == "events" %} active{% endif %}" + hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='events' %}" + hx-target="#tabs-{{ submission.id }}" + >Events</a> + </li> + {% if request.user.contributor.is_ed_admin %} + <li class="nav-item"> + <a class="nav-link{% if tab == "edadmin" %} active{% endif %}" + hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='edadmin' %}" + hx-target="#tabs-{{ submission.id }}" + >EdAdmin</a> + </li> + {% endif %} + <li class="nav-item"> + <a class="nav-link{% if tab == "old" %} active{% endif %}" + hx-get="{% url "submissions:pool:_hx_submission_tab" identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr tab='old' %}" + hx-target="#tabs-{{ submission.id }}" + >Old version</a> + </li> +</ul> +<hr> +<div class="tab-content"> + {% if tab == "info" %} + {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %} + + {% elif tab == "remarks" %} + {% if remark_form %} + {% include 'submissions/pool/_remark_form.html' with submission=submission form=remark_form auto_show=1 %} + {% endif %} + <p class="mb-1">Current remarks:</p> + <ul> + {% for rem in submission.remarks.all %} + {% include 'scipost/_remark_li.html' with remark=rem %} + {% empty %} + <li>No Remarks found.</li> + {% endfor %} + </ul> + + {% elif tab == "graph" %} + {% include "submissions/_hx_submission_workflow_diagram.html" with submission=submission %} + + {% elif tab == "events" %} + <div id="eventslist"> + {% if request.user.contributor.is_ed_admin %} + {% include 'submissions/_submission_events.html' with events=submission.events.for_edadmin %} + {% elif request.user.contributor == submission.editor_in_charge %} + {% include 'submissions/_submission_events.html' with events=submission.events.for_eic %} + {% else %} + {% include 'submissions/_submission_events.html' with events=submission.events.for_author %} + {% endif %} + </div> + + {% elif tab == 'edadmin' and request.user.contributor.is_ed_admin %} + <div id="submission-{{ submission.pk }}-tab-contents-edadmin" + hx-get="{% url 'edadmin:_hx_submission_tab_contents_edadmin' identifier_w_vn_nr=submission.preprint.identifier_w_vn_nr %}" + hx-trigger="load, submission-{{ submission.pk }}-tab-edadmin-updated" + > + </div> + + {% elif tab == "old" %} + {% include "submissions/pool/_hx_submission_details_contents.html" with submission=submission %} + + {% else %} + Unknown tab + {% endif %} +</div> diff --git a/scipost_django/submissions/templates/submissions/pool/pool.html b/scipost_django/submissions/templates/submissions/pool/pool.html index f08c3cea2..c13392abf 100644 --- a/scipost_django/submissions/templates/submissions/pool/pool.html +++ b/scipost_django/submissions/templates/submissions/pool/pool.html @@ -81,7 +81,7 @@ </div> <div class="card-body"> <form - hx-post="{% url 'submissions:pool:_hx_submissions_list' %}" + hx-post="{% url 'submissions:pool:_hx_submission_list' %}" hx-trigger="load, keyup delay:500ms, change" hx-target="#search-results" hx-indicator="#indicator-search" diff --git a/scipost_django/submissions/urls/pool.py b/scipost_django/submissions/urls/pool.py index 8c378ec77..63eb273f6 100644 --- a/scipost_django/submissions/urls/pool.py +++ b/scipost_django/submissions/urls/pool.py @@ -24,6 +24,11 @@ urlpatterns = [ # building on /submissions/pool/ views_pool.pool, name="pool", ), + path( + "tab/<slug:tab>", + views_pool._hx_submission_tab, + name="_hx_submission_tab", + ), path( "add_remark", views_pool.add_remark, @@ -51,8 +56,8 @@ urlpatterns = [ # building on /submissions/pool/ include([ path( "", - views_pool.pool_hx_submissions_list, - name="_hx_submissions_list", + views_pool.pool_hx_submission_list, + name="_hx_submission_list", ), path( "<identifier:identifier_w_vn_nr>", diff --git a/scipost_django/submissions/views/pool.py b/scipost_django/submissions/views/pool.py index ff5865e5b..616039f2f 100644 --- a/scipost_django/submissions/views/pool.py +++ b/scipost_django/submissions/views/pool.py @@ -58,7 +58,7 @@ def pool(request, identifier_w_vn_nr=None): @login_required @fellowship_or_admin_required() -def pool_hx_submissions_list(request): +def pool_hx_submission_list(request): form = SubmissionPoolSearchForm(request.POST or None, request=request) if form.is_valid(): submissions = form.search_results(request.user) @@ -70,7 +70,7 @@ def pool_hx_submissions_list(request): count = paginator.count start_index = page_obj.start_index context = {"count": count, "page_obj": page_obj, "start_index": start_index,} - return render(request, "submissions/pool/_hx_submissions_list.html", context) + return render(request, "submissions/pool/_hx_submission_list.html", context) @login_required @@ -84,6 +84,19 @@ def pool_hx_submission_details_contents(request, identifier_w_vn_nr): return render(request, "submissions/pool/_hx_submission_details_contents.html", context) +@login_required +@fellowship_or_admin_required() +def _hx_submission_tab(request, identifier_w_vn_nr, tab): + submission = get_object_or_404( + Submission.objects.in_pool(request.user, historical=True), + preprint__identifier_w_vn_nr=identifier_w_vn_nr, + ) + context = {"submission": submission, "tab": tab,} + if tab == "remarks": + context["remark_form"] = RemarkForm() + return render(request, "submissions/pool/_hx_submission_tab.html", context) + + @login_required @fellowship_or_admin_required() def add_remark(request, identifier_w_vn_nr): -- GitLab