diff --git a/scipost_django/scipost/static/scipost/assets/css/_navbar.scss b/scipost_django/scipost/static/scipost/assets/css/_navbar.scss index 52ad00bec289bc71e9f9c55799bab536525c56cc..3d295189ea27d3b2522d6986c8a670b2406ee587 100644 --- a/scipost_django/scipost/static/scipost/assets/css/_navbar.scss +++ b/scipost_django/scipost/static/scipost/assets/css/_navbar.scss @@ -234,7 +234,8 @@ header .nav-item { #headerSearchInput { background-color: $scipost-darkblue; - border: 1px solid $scipost-orange; + // border: 1px solid $scipost-orange; + border: 0px; color: $white; } @@ -249,6 +250,7 @@ header .nav-item { border: 2px solid $scipost-lightblue; border-radius: 2px; color: $white; + min-width: 16em; } } } @@ -264,6 +266,7 @@ header .nav-item { border: 2px solid $scipost-lightblue; border-radius: 2px; color: $white; + min-width: 30rem; } } } diff --git a/scipost_django/scipost/templates/scipost/_hx_publications.html b/scipost_django/scipost/templates/scipost/_hx_publications.html index cb2e9dadbb5af56d457fc4fc4e3d1608f6df84ae..9533ed4f387657ebb85a9eb68b814034eb122a25 100644 --- a/scipost_django/scipost/templates/scipost/_hx_publications.html +++ b/scipost_django/scipost/templates/scipost/_hx_publications.html @@ -1,18 +1,6 @@ {% load journals_extras %} -<p class="mb-0 px-3 text-muted">{{ session_acad_field }}{% if session_specialty %}: {{ session_specialty }}{% endif %}</p> -<hr> -<ul class="list-group list-group-flush px-3 mb-3"> - {% for publication in publications %} - <li class="list-group-item py-2"> - {% include 'journals/_publication_li_content.html' with publication=publication %} - </li> - {% empty %} - <li class="list-group-item py-2"> - No publications yet - </li> - {% endfor %} -</ul> +<h2 class="mb-0 px-3">Publications in {{ session_acad_field }}: {% if session_specialty %}{{ session_specialty }}{% else %}(all specialties){% endif %}</h2> {% if session_acad_field and not session_acad_field.journals.active|length > 0 %} <div class="card m-2 border-2"> @@ -27,7 +15,13 @@ </p> </div> </div> -{% else %} - <hr> - <p class="mb-3 px-3"><a href="{% url 'journals:publications' %}">View all Publications</a></p> {% endif %} + +<hr> +<div hx-get="{% url 'scipost:_hx_publications_page' %}?page=1" + hx-trigger="load" + hx-target="#publications-list" +> +</div> +<ul id="publications-list" + class="list-group list-group-flush list-unstyled px-3 mb-3"></ul> diff --git a/scipost_django/scipost/templates/scipost/_hx_publications_page.html b/scipost_django/scipost/templates/scipost/_hx_publications_page.html new file mode 100644 index 0000000000000000000000000000000000000000..a47b218b55469afbcf2c0f47975d76202d2515dd --- /dev/null +++ b/scipost_django/scipost/templates/scipost/_hx_publications_page.html @@ -0,0 +1,26 @@ +{% for publication in page_obj %} + <li class="list-group-item py-2"> + {% include 'journals/_publication_li_content.html' with publication=publication %} + </li> +{% empty %} + <li class="list-group-item py-2"> + No publications yet + </li> +{% endfor %} +{% if page_obj.has_next %} + <li id="next-publications-{{ page_obj.number }}"> + <button class="btn btn-primary m-2" type="button" + hx-get="{% url 'scipost:_hx_publications_page' %}?page={{ page_obj.next_page_number }}" + hx-target="#next-publications-{{ page_obj.number }}" + hx-indicator="#indicator-publications-page-{{ page_obj.number }}" + > + Load page {{ page_obj.next_page_number }} (out of {{ page_obj.paginator.num_pages }}) + </button> + <span id="indicator-publications-page-{{ page_obj.number }}" class="htmx-indicator p-2"> + <button class="btn btn-warning" type="button" disabled> + <strong>Loading page {{ page_obj.next_page_number }} out of {{ page_obj.paginator.num_pages }}</strong> + <div class="spinner-grow spinner-grow-sm ms-2" role="status" aria-hidden="true"></div> + </button> + </span> + </li> +{% endif %} diff --git a/scipost_django/scipost/templates/scipost/_hx_submissions.html b/scipost_django/scipost/templates/scipost/_hx_submissions.html index 9ba0ef78b7a71029161d957b407082a32a59fdf3..701068c675b1c12232f0b1cbff28d4dee9ad00a0 100644 --- a/scipost_django/scipost/templates/scipost/_hx_submissions.html +++ b/scipost_django/scipost/templates/scipost/_hx_submissions.html @@ -1,20 +1,12 @@ {% load journals_extras %} -<p class="mb-0 px-3 text-muted">{{ session_acad_field }}{% if session_specialty %}: {{ session_specialty }}{% endif %}</p> -<hr> -<ul class="list-group list-group-flush px-3 mb-3"> - {% for submission in submissions %} - <li class="list-group-item py-2"> - {% include 'submissions/_submission_card_content_homepage.html' with submission=submission %} - </li> - {% empty %} - <li class="list-group-item py-2"> - No submissions yet - </li> - {% endfor %} -</ul> +<h2 class="mb-0 px-3">Submissions in {{ session_acad_field }}: {% if session_specialty %}{{ session_specialty }}{% else %}(all specialties){% endif %}</h2> -{% if not session_acad_field or session_acad_field.journals.active|length > 0 %} - <hr> - <p class="mb-3 px-3"><a href="{% url 'submissions:submissions' %}">View all Submissions</a></p> -{% endif %} +<hr> +<div hx-get="{% url 'scipost:_hx_submissions_page' %}?page=1" + hx-trigger="load" + hx-target="#submissions-list" +> +</div> +<ul id="submissions-list" + class="list-group list-group-flush list-unstyled px-3 mb-3"></ul> diff --git a/scipost_django/scipost/templates/scipost/_hx_submissions_page.html b/scipost_django/scipost/templates/scipost/_hx_submissions_page.html new file mode 100644 index 0000000000000000000000000000000000000000..386cc5b5b936e49158d3101b9627923c6076e2bf --- /dev/null +++ b/scipost_django/scipost/templates/scipost/_hx_submissions_page.html @@ -0,0 +1,26 @@ +{% for submission in page_obj %} + <li class="list-group-item py-2"> + {% include 'submissions/_submission_card_content_homepage.html' with submission=submission %} + </li> +{% empty %} + <li class="list-group-item py-2"> + No submissions yet + </li> +{% endfor %} +{% if page_obj.has_next %} + <li id="next-submissions-{{ page_obj.number }}"> + <button class="btn btn-primary m-2" type="button" + hx-get="{% url 'scipost:_hx_submissions_page' %}?page={{ page_obj.next_page_number }}" + hx-target="#next-submissions-{{ page_obj.number }}" + hx-indicator="#indicator-submissions-page-{{ page_obj.number }}" + > + Load page {{ page_obj.next_page_number }} (out of {{ page_obj.paginator.num_pages }}) + </button> + <span id="indicator-submissions-page-{{ page_obj.number }}" class="htmx-indicator p-2"> + <button class="btn btn-warning" type="button" disabled> + <strong>Loading page {{ page_obj.next_page_number }} out of {{ page_obj.paginator.num_pages }}</strong> + <div class="spinner-grow spinner-grow-sm ms-2" role="status" aria-hidden="true"></div> + </button> + </span> + </li> +{% endif %} diff --git a/scipost_django/scipost/templates/scipost/header_with_acad_field_and_spec.html b/scipost_django/scipost/templates/scipost/header_with_acad_field_and_spec.html index bdf10ec28dd1ba782eb4425b969fae270abdba2e..9e55f41c2c7c68eaea722396cb07f795925edf7e 100644 --- a/scipost_django/scipost/templates/scipost/header_with_acad_field_and_spec.html +++ b/scipost_django/scipost/templates/scipost/header_with_acad_field_and_spec.html @@ -2,8 +2,8 @@ {% load crispy_forms_tags %} {% block header_sup %} - <div class="d-lg-flex justify-content-between"> - <div class="mx-auto my-4 my-lg-auto"> + <div class="d-lg-flex justify-content-center mb-2"> + <div class="my-4 my-lg-auto"> <form id="session_acad_field_form" hx-get="{% url 'ontology:set_session_acad_field' %}" hx-trigger="change" @@ -12,11 +12,12 @@ {% crispy session_acad_field_form %} </form> </div> - <div class="mx-auto my-4 my-lg-auto" + <div class="ms-2 my-4 my-lg-auto" hx-get="{% url 'ontology:_hx_session_specialty_form' %}" hx-trigger="load, session-acad-field-set from:body" > </div> </div> + {% endblock header_sup %} diff --git a/scipost_django/scipost/templates/scipost/index.html b/scipost_django/scipost/templates/scipost/index.html index 934de2e8edbb98ddc034ca47bc0ad3672803eb09..fe4a349877a9870aa7e7c11b2f98c1bf63b1b4f0 100644 --- a/scipost_django/scipost/templates/scipost/index.html +++ b/scipost_django/scipost/templates/scipost/index.html @@ -28,27 +28,10 @@ {% block content %} <div class="row gx-4"> - <div class="col-md-4"> - <h2 class="highlight text-center mt-0">Portals</h2> - <div class="d-flex justify-content-center"> - <div class="btn-group-vertical w-100" role="group"> - {% for branch in branches %} - {% if branch.name != 'Multidisciplinary' and branch.journals.all|length > 0 %} - {% for acad_field in branch.academic_fields.all %} - {% if acad_field.journals.active.all|length > 0 %} - <a type="button" class="btn-primary w-100 m-1 p-2 text-center" href={% url 'scipost:portal' %}?field={{ acad_field.slug }}><strong>{{ acad_field.name }}</strong></a> - {% endif %} - {% endfor %} - {% endif %} - {% endfor %} - </div> - </div> - </div> - <div class="col-md-8"> <div class="card"> <div class="card-header"> - <h1>Genuinely Open Publishing</h1> + <h1>The Home of Genuine Open Publishing</h1> </div> <div class="card-body"> <p>SciPost is a complete publishing infrastructure serving professional scientists worldwide.</p> @@ -59,16 +42,16 @@ <h3>We implement<br><a href="{% url 'scipost:about' %}#GOA">Genuine Open Access</a></h3> </div> <div class="card-body"> - <ul> - <li>Community Ownership</li> - <li>Open Infrastructure</li> - <li>Copyright to Authors</li> - <li>Open Access</li> - <li>Open Citations</li> - <li>Fee Free</li> - <li>Non Profit</li> - <li>Open Finances</li> - <li>Academic Editing</li> + <ul class="list list-unstyled"> + <li>{% include 'bi/check-square.html' %} Community Ownership</li> + <li>{% include 'bi/check-square.html' %} Open Infrastructure</li> + <li>{% include 'bi/check-square.html' %} Copyright to Authors</li> + <li>{% include 'bi/check-square.html' %} Open Access</li> + <li>{% include 'bi/check-square.html' %} Open Citations</li> + <li>{% include 'bi/check-square.html' %} Fee Free</li> + <li>{% include 'bi/check-square.html' %} Non Profit</li> + <li>{% include 'bi/check-square.html' %} Open Finances</li> + <li>{% include 'bi/check-square.html' %} Academic Editing</li> </ul> </div> </div> @@ -79,12 +62,21 @@ <h3>Info</h3> </div> <div class="card-body"> - <ul> - <li><a href="{% url 'scipost:contact' %}">Contact us</a></li> - <li><a href="{% url 'scipost:about' %}">About SciPost</a></li> - <li><a href="{% url 'scipost:foundation' %}">The Foundation</a></li> - <li><a href="{% url 'careers:jobopenings' %}">Careers@SciPost</a></li> - <li><a href="{% url 'scipost:FAQ' %}">FAQ</a></li> + <ul class="list list-unstyled"> + <li>{% include 'bi/arrow-right.html' %} + <a href="{% url 'scipost:about' %}">About SciPost</a></li> + <li>{% include 'bi/arrow-right.html' %} + <a href="{% url 'scipost:foundation' %}">The Foundation</a></li> + <li>{% include 'bi/arrow-right.html' %} + <a href="{% url 'scipost:FAQ' %}">FAQ</a></li> + <li>{% include 'bi/arrow-right.html' %} + <a href="{% url 'scipost:contact' %}">Contact us</a></li> + <li>{% include 'bi/arrow-right.html' %} + <a href="{% url 'careers:jobopenings' %}">Careers@SciPost</a></li> + <li>{% include 'bi/arrow-right.html' %} + <a href="https://disc.{{ request.get_host }}" target="_blank" rel="noopener">{% include 'bi/chat-right-text.html' %} Community</a></li> + <li>{% include 'bi/arrow-right.html' %} + <a href="https://git.{{ request.get_host }}" target="_blank" rel="noopener">{% include 'bi/code-square.html' %} git.{{ request.get_host }}</a></li> </ul> </div> </div> @@ -105,6 +97,23 @@ </div> </div> </div> + <div class="col-md-4"> + <h2 class="highlight text-center mt-0">Portals</h2> + <div class="d-flex justify-content-center"> + <div class="btn-group-vertical w-100" role="group"> + {% for branch in branches %} + {% if branch.name != 'Multidisciplinary' and branch.journals.all|length > 0 %} + {% for acad_field in branch.academic_fields.all %} + {% if acad_field.journals.active.all|length > 0 %} + <a type="button" class="btn-primary w-100 m-1 p-2 text-center" href={% url 'scipost:portal' %}?field={{ acad_field.slug }}><strong>{{ acad_field.name }}</strong></a> + {% endif %} + {% endfor %} + {% endif %} + {% endfor %} + </div> + </div> + </div> + </div> {% endblock %} diff --git a/scipost_django/scipost/templates/scipost/portal.html b/scipost_django/scipost/templates/scipost/portal.html index 1bb714e54ff72127268e1c1eb812e8379061fc36..2bced74c3f44fdf2306d617e1bec3f273480dc86 100644 --- a/scipost_django/scipost/templates/scipost/portal.html +++ b/scipost_django/scipost/templates/scipost/portal.html @@ -16,37 +16,43 @@ {% block content %} - <div class="row"> - <div class="col-md-4"> - <!-- Latest publications --> - <div class="card card-publications bg-light px-1 mb-2 scipost-bar"> - <div class="card-body pb-0"> - <h2 class="title mb-3">Latest Publications</h2> - <hr class="sm mb-0 mt-2"> - </div> - <div hx-get="{% url 'scipost:_hx_publications' %}" - hx-trigger="load, session-acad-field-set from:body, session-specialty-set from:body" - > - </div> - </div><!-- End latest publications --> + <ul class="nav nav-pills" + role="tablist"> + <li class="nav-item" role="presentation"> + <button class="nav-link active" id="publications-tab" + data-bs-toggle="tab" data-bs-target="#publications" + type="button" role="tab" + aria-controls="publications" aria-selected="true"> + Publications + </button> + </li> + <li class="nav-item" role="presentation"> + <button class="nav-link" id="submissions-tab" + data-bs-toggle="tab" data-bs-target="#submissions" + type="button" role="tab" + aria-controls="submissions" aria-selected="true"> + Submissions + </button> + </li> + </ul> + + <hr> + + <div class="tab-content mt-4" id="portalTabContent"> + <div class="tab-pane fade show active" id="publications" + role="tabpanel" aria-labelledby="publications-tab"> + <div hx-get="{% url 'scipost:_hx_publications' %}" + hx-trigger="load, clicked from:#publications-tab, session-acad-field-set from:body, session-specialty-set from:body" + > + </div> </div> - - <div class="col-md-4"> - <!-- Latest submissions --> - <div class="card card-submissions bg-light px-1 mb-2 scipost-bar"> - <div class="card-body pb-0"> - <h2 class="title mb-3">Latest Submissions</h2> - <hr class="sm mb-0 mt-2"> - </div> - <div hx-get="{% url 'scipost:_hx_submissions' %}" - hx-trigger="load, session-acad-field-set from:body, session-specialty-set from:body" - > - </div> - </div><!-- End latest submissions --> - </div> - - <div class="col-md-4"> + <div class="tab-pane fade" id="submissions" + role="tabpanel" aria-labelledby="submissions-tab"> + <div hx-get="{% url 'scipost:_hx_submissions' %}" + hx-trigger="load, session-acad-field-set from:body, session-specialty-set from:body" + > + </div> </div> - </div> + {% endblock %} diff --git a/scipost_django/scipost/urls.py b/scipost_django/scipost/urls.py index 88c8564f94604d89466dbb4ae178a176fec3eaba..63f22f58b83662370e7756ce80d4c6f2719570c2 100644 --- a/scipost_django/scipost/urls.py +++ b/scipost_django/scipost/urls.py @@ -84,14 +84,24 @@ urlpatterns = [ # HTMX-delivered fragments path( '_hx_publications', - views._hx_publications, + TemplateView.as_view(template_name='scipost/_hx_publications.html'), name='_hx_publications' ), + path( + '_hx_publications_page', + views._hx_publications_page, + name='_hx_publications_page' + ), path( '_hx_submissions', - views._hx_submissions, + TemplateView.as_view(template_name='scipost/_hx_submissions.html'), name='_hx_submissions' ), + path( + '_hx_submissions_page', + views._hx_submissions_page, + name='_hx_submissions_page' + ), path( '_hx_news.html', views._hx_news, diff --git a/scipost_django/scipost/views.py b/scipost_django/scipost/views.py index 9c5e969c158d06e5f1926876d2d7658a45f48975..ae3be955e573bb25c5d4d4dfe53cef50cab55840 100644 --- a/scipost_django/scipost/views.py +++ b/scipost_django/scipost/views.py @@ -178,32 +178,34 @@ def portal(request): return render(request, 'scipost/portal.html') -def _hx_submissions(request): - submissions = Submission.objects.public() +def _hx_publications_page(request): + publications = Publication.objects.published() session_acad_field_slug = request.session.get('session_acad_field_slug', None) if session_acad_field_slug and session_acad_field_slug != 'all': - submissions = submissions.filter(acad_field__slug=session_acad_field_slug) + publications = publications.filter(acad_field__slug=session_acad_field_slug) session_specialty_slug = request.session.get('session_specialty_slug', None) if session_specialty_slug: - submissions = submissions.filter(specialties__slug=session_specialty_slug) - context = { - 'submissions': submissions.order_by('-submission_date')[:3], - } - return render(request, 'scipost/_hx_submissions.html', context) + publications = publications.filter(specialties__slug=session_specialty_slug) + paginator = Paginator(publications, 10) + page_nr = request.GET.get('page') + page_obj = paginator.get_page(page_nr) + context = { 'page_obj': page_obj } + return render(request, 'scipost/_hx_publications_page.html', context) -def _hx_publications(request): - publications = Publication.objects.published() +def _hx_submissions_page(request): + submissions = Submission.objects.public() session_acad_field_slug = request.session.get('session_acad_field_slug', None) if session_acad_field_slug and session_acad_field_slug != 'all': - publications = publications.filter(acad_field__slug=session_acad_field_slug) + submissions = submissions.filter(acad_field__slug=session_acad_field_slug) session_specialty_slug = request.session.get('session_specialty_slug', None) if session_specialty_slug: - publications = publications.filter(specialties__slug=session_specialty_slug) - context = { - 'publications': publications.order_by('-publication_date', '-paper_nr')[:3], - } - return render(request, 'scipost/_hx_publications.html', context) + submissions = submissions.filter(specialties__slug=session_specialty_slug) + paginator = Paginator(submissions, 10) + page_nr = request.GET.get('page') + page_obj = paginator.get_page(page_nr) + context = { 'page_obj': page_obj } + return render(request, 'scipost/_hx_submissions_page.html', context) def _hx_news(request): diff --git a/scipost_django/submissions/views.py b/scipost_django/submissions/views.py index 0d5a3a1c3129b442e6ffa0721a5310eff3aaf275..95a41604b38be3a20c0e968b26088ee14a522e58 100644 --- a/scipost_django/submissions/views.py +++ b/scipost_django/submissions/views.py @@ -801,7 +801,6 @@ def pool_hx_submissions_list(request): paginator = Paginator(submissions, 16) page_nr = request.GET.get('page') page_obj = paginator.get_page(page_nr) - context = { 'submissions': submissions } context = { 'page_obj': page_obj } return render(request, 'submissions/pool/hx_submissions_list.html', context) diff --git a/scipost_django/templates/bi/chat-right-text.html b/scipost_django/templates/bi/chat-right-text.html new file mode 100644 index 0000000000000000000000000000000000000000..49ff14754b81fb4c3104d7c06dcc44cd499bb651 --- /dev/null +++ b/scipost_django/templates/bi/chat-right-text.html @@ -0,0 +1,4 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-chat-right-text" viewBox="0 0 16 16"> + <path d="M2 1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h9.586a2 2 0 0 1 1.414.586l2 2V2a1 1 0 0 0-1-1H2zm12-1a2 2 0 0 1 2 2v12.793a.5.5 0 0 1-.854.353l-2.853-2.853a1 1 0 0 0-.707-.293H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h12z"/> + <path d="M3 3.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zM3 6a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9A.5.5 0 0 1 3 6zm0 2.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5z"/> +</svg>