From e9b4609d20e35262afcdc236ba230dc63d0b5f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org> Date: Tue, 26 Oct 2021 21:04:08 +0200 Subject: [PATCH] Improve logic and display --- scipost_django/ontology/context_processors.py | 12 +++---- scipost_django/ontology/forms.py | 36 ++++++++++++++++--- scipost_django/ontology/views.py | 13 ++++--- .../static/scipost/assets/css/_navbar.scss | 4 +-- .../scipost/_index_publications.html | 19 ++++++++++ .../scipost/templates/scipost/index.html | 3 +- 6 files changed, 69 insertions(+), 18 deletions(-) diff --git a/scipost_django/ontology/context_processors.py b/scipost_django/ontology/context_processors.py index bf92c16b2..2b8e0d02f 100644 --- a/scipost_django/ontology/context_processors.py +++ b/scipost_django/ontology/context_processors.py @@ -17,11 +17,11 @@ def ontology_processor(request): } initial = {} if request.session.get('session_acad_field_slug', None): - context['session_acad_field'] = AcademicField.objects.get( - slug=request.session.get('session_acad_field_slug')) - initial['acad_field'] = context['session_acad_field'] - if request.session.get('session_specialty_slug', None): - context['session_specialty'] = Specialty.objects.get( - slug=request.session.get('session_specialty_slug')) + try: + context['session_acad_field'] = AcademicField.objects.get( + slug=request.session.get('session_acad_field_slug')) + initial['acad_field_slug'] = request.session.get('session_acad_field_slug') + except AcademicField.DoesNotExist: + context['session_acad_field'] = None context['session_acad_field_form'] = SessionAcademicFieldForm(initial=initial) return context diff --git a/scipost_django/ontology/forms.py b/scipost_django/ontology/forms.py index 37a69732d..7177bdbbf 100644 --- a/scipost_django/ontology/forms.py +++ b/scipost_django/ontology/forms.py @@ -10,13 +10,39 @@ from crispy_bootstrap5.bootstrap5 import FloatingField from dal import autocomplete from .constants import TOPIC_RELATIONS_ASYM -from .models import AcademicField, Tag, Topic +from .models import Branch, AcademicField, Tag, Topic + + +def academic_field_slug_choices(): + choices = ( + ('All', ( + ('all', 'All'), + )), + ) + for branch in Branch.objects.all(): + if branch.name == 'Multidisciplinary': + continue + subchoices = () + for acad_field in branch.academic_fields.all(): + subchoices += ( + (acad_field.slug, acad_field.name), + ) + choices += ( + (branch.name, subchoices), + ) + return choices class SessionAcademicFieldForm(forms.Form): - acad_field = forms.ModelChoiceField( - queryset=AcademicField.objects.all(), - label='Academic Field' + # acad_field = forms.ModelChoiceField( + # queryset=AcademicField.objects.all(), + # label='Academic Field', + # empty_label=None + # choices=academic_field_choices() + # ) + acad_field_slug = forms.ChoiceField( + label='Academic Field', + choices=academic_field_slug_choices() ) def __init__(self, *args, **kwargs): @@ -25,7 +51,7 @@ class SessionAcademicFieldForm(forms.Form): self.helper.disable_csrf = True self.helper.show_errors = True self.helper.layout = Layout( - Div(FloatingField('acad_field')) + Div(FloatingField('acad_field_slug')) ) diff --git a/scipost_django/ontology/views.py b/scipost_django/ontology/views.py index 1cb8e698b..1ca413595 100644 --- a/scipost_django/ontology/views.py +++ b/scipost_django/ontology/views.py @@ -30,10 +30,15 @@ def set_session_acad_field(request): """Set the Academic Field to be viewed in the current user session.""" form = SessionAcademicFieldForm(request.GET or None) if form.is_valid(): - request.session['session_acad_field_slug'] = form.cleaned_data['acad_field'].slug - form = SessionAcademicFieldForm(initial={ - 'acad_field': AcademicField.objects.get(slug=request.session['session_acad_field_slug']) - }) + request.session['session_acad_field_slug'] = form.cleaned_data['acad_field_slug'] + try: + initial = { + 'acad_field_slug': AcademicField.objects.get( + slug=request.session['session_acad_field_slug']).slug + } + except AcademicField.DoesNotExist: + initial = {} + form = SessionAcademicFieldForm(initial=initial) response = render( request, 'ontology/session_acad_field_form.html', diff --git a/scipost_django/scipost/static/scipost/assets/css/_navbar.scss b/scipost_django/scipost/static/scipost/assets/css/_navbar.scss index 199a79f4f..297238abf 100644 --- a/scipost_django/scipost/static/scipost/assets/css/_navbar.scss +++ b/scipost_django/scipost/static/scipost/assets/css/_navbar.scss @@ -287,10 +287,10 @@ header .nav-item { #session_acad_field_form { - div #div_id_acad_field { + div #div_id_acad_field_slug { margin: 0rem !important; - #id_acad_field { + #id_acad_field_slug { border: 2px solid $scipost-lightblue; border-radius: 2px; background-color: $scipost-darkblue; diff --git a/scipost_django/scipost/templates/scipost/_index_publications.html b/scipost_django/scipost/templates/scipost/_index_publications.html index 6d297de0d..d1e7e2748 100644 --- a/scipost_django/scipost/templates/scipost/_index_publications.html +++ b/scipost_django/scipost/templates/scipost/_index_publications.html @@ -1,3 +1,5 @@ +{% load journals_extras %} + <ul class="list-group list-group-flush px-3 mb-3"> {% for publication in publications %} <li class="list-group-item py-2"> @@ -9,3 +11,20 @@ </li> {% endfor %} </ul> + +{% if not session_acad_field.journals.active|length > 0 %} + <div class="card m-2"> + <div class="card-header text-center"> + <h2 class="p-2 text-white bg-danger">We are not yet active in<br>{{ session_acad_field }}</h2> + </div> + <div class="card-body"> + <h3>Interested in helping us set things up?</h3> + <p> + <a href="mailto:admin@{{ request.get_host }}">Email us</a> + your suggestions for Editorial Fellows. + </p> + </div> + </div> +{% else %} + <p class="mb-3 px-3"><a href="{% url 'journals:publications' %}">View all Publications</a></p> +{% endif %} diff --git a/scipost_django/scipost/templates/scipost/index.html b/scipost_django/scipost/templates/scipost/index.html index 012ab3db9..8c08daeb1 100644 --- a/scipost_django/scipost/templates/scipost/index.html +++ b/scipost_django/scipost/templates/scipost/index.html @@ -3,6 +3,7 @@ {% load render_bundle from webpack_loader %} {% load static %} + {% block headsup %} {{ block.super }} <style> @@ -25,6 +26,7 @@ {% block pagetitle %}Homepage{% endblock pagetitle %} {% block content %} + <div class="row"> <div class="col-md-4"> <!-- Latest publications --> @@ -37,7 +39,6 @@ hx-trigger="load, session-acad-field-set from:body" > </div> - <p class="mb-3 px-3"><a href="{% url 'journals:publications' %}">View all Publications</a></p> </div><!-- End latest publications --> </div> -- GitLab