Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/journal/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ def __init__(self, data=None, *args, **kwargs):
self.data[search_filter] = "on"
self.label_suffix = ""

self.id = "search_form"

article_search = forms.CharField(
label=_("Search term"), min_length=3, max_length=100, required=False
)
Expand Down
20 changes: 18 additions & 2 deletions src/journal/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2220,6 +2220,7 @@ def full_text_search(request):
search_term, keyword, sort, form, redir = logic.handle_search_controls(
request,
)

if search_term:
form.is_valid()
articles = submission_models.Article.objects.search(
Expand All @@ -2229,10 +2230,25 @@ def full_text_search(request):
site=request.site_object,
)

paginate_by = request.GET.get("paginate_by", 25)
if paginate_by == "all":
paginate_by = len(articles) if articles else 25
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In terms of implementation, qs.count() is always preferred for querysets over len(qs)

I wonder, however, if we really want to support "all" as a feature, since we do not have a dynamic loader for this, we could put a lot of strain on the server. I don't think the user will be happy waiting for potentially thousands of results to be returned and displayed all at once


paginator = Paginator(articles, paginate_by)
page_number = request.GET.get("page")

try:
page_obj = paginator.get_page(page_number)
except (EmptyPage, PageNotAnInteger):
page_obj = paginator.get_page(1)

template = "journal/full-text-search.html"
context = {
"articles": articles,
"article_search": search_term,
"articles": page_obj,
"page_obj": page_obj,
"is_paginated": page_obj.has_other_pages(),
"paginate_by": paginate_by,
"search_term": search_term,
"keyword": keyword,
"form": form,
}
Expand Down
5 changes: 5 additions & 0 deletions src/themes/OLH/assets/scss/app.scss
Original file line number Diff line number Diff line change
Expand Up @@ -1483,3 +1483,8 @@ span + .btn-background {
-o-transition: all 1s ease;
-ms-transition: all 1s ease;
}

section.invisible-landmark{
padding: 0;
margin: 0;
}
57 changes: 37 additions & 20 deletions src/themes/OLH/templates/journal/full-text-search.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,45 @@
{% block title %}{% trans "Search" %}{% endblock %}

{% block body %}

<section id="content">
{% if search_term %}
<h1>Searching for: <i>{{ search_term }}</i></h1>
{% elif keyword %}
<h1>Keyword: <i>{{ keyword }}</i></h1>
{% else %}
<h1>{% trans 'All Articles' %}</h1>
{% endif %}

<div class="row">
<div class="columns large-8">
<hr aria-hidden="true" />
{% for article in articles %}
{% include "elements/journal/box_article.html" with article=article %}
{% empty %}
<p>{% trans 'No articles to display' %}.</p>
{% endfor %}

<div class="column large-12">
{% if search_term %}
<h1>Searching for: <i>{{ search_term }}</i></h1>
{% elif keyword %}
<h1>Keyword: <i>{{ keyword }}</i></h1>
{% else %}
<h1>{% trans 'Article Search Results' %}</h1>
{% endif %}
</div>
<section class="invisible-landmark" aria-label="Results">
<div class="columns large-8">
{% for article in articles %}
{% include "elements/journal/box_article.html" with article=article %}
{% empty %}
<p>{% trans 'No articles to display' %}.</p>
{% endfor %}
{% if articles %}
{% include "elements/pagination.html" with form_id=form.id %}
{% endif %}
</div>
</section>
<div class="columns large-4">
<div class="card">
<div class="card-block">
<form method="GET">
<section class="invisible-landmark" aria-label="{% trans 'Search' %}">
<div class="card">
<div class="card-block">
<div>
<p>
{% blocktrans count result_count=page_obj.paginator.count %}
1 result
{% plural %}
{{ result_count }} results
{% endblocktrans %}
</p>
</div>
<form method="GET" id="search_form">
<div class="form-group">
{% if not keyword %}
{% include 'elements/forms/errors.html' with form=form%}
Expand Down Expand Up @@ -71,9 +87,10 @@ <h1>{% trans 'All Articles' %}</h1>
<div class="form-group">
<button type="submit" class="button">{% trans "Search" %}</button>
</div>
</form>
</form>
</div>
</div>
</div>
</section>
</div>
</div>
</section>
Expand Down
40 changes: 27 additions & 13 deletions src/themes/clean/templates/journal/full-text-search.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,31 @@ <h1>{% trans 'Article Search Results' %}</h1>

<div class="row">
<div class="col-md-8">
<hr aria-hidden="true" />
{% for article in articles %}
{% include "elements/article_listing.html" with article=article %}
{% empty %}
<p>{% trans "No articles to display" %}.</p>
{% endfor %}

</div>
<section aria-label="Results">
{% for article in articles %}
{% include "elements/article_listing.html" with article=article %}
{% empty %}
<p>{% trans "No articles to display" %}.</p>
{% endfor %}
{% if articles %}
{% include "elements/pagination.html" with form_id=form.id %}
{% endif %}
</section>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-block">
<form method="GET">
<section aria-label="{% trans 'Search' %}">
<div class="card">
<div class="card-block">
<div>
<p>
{% blocktrans count result_count=page_obj.paginator.count %}
1 result
{% plural %}
{{ result_count }} results
{% endblocktrans %}
</p>
</div>
<form method="GET" id="search_form">
<div class="form-group">
{% if not keyword %}
{% include 'elements/forms/errors.html' with form=form%}
Expand Down Expand Up @@ -60,9 +73,10 @@ <h1>{% trans 'Article Search Results' %}</h1>
<div class="form-group">
<button type="submit" class="btn btn-primary">{% trans "Filter" %}</button>
</div>
</form>
</form>
</div>
</div>
</div>
</section>
</div>
</div>
{% endblock %}
61 changes: 39 additions & 22 deletions src/themes/material/templates/journal/full-text-search.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,29 +11,45 @@

{% block body %}

<h1>{% trans 'Article Search Results' %}</h1>

{% if search_term %}
<p>{% trans 'Searching for' %}: <i>{{ search_term }}</i></p>
{% elif keyword %}
<p>{% trans 'Keyword' %}: <i>{{ keyword }}</i></p>
{% endif %}
<div class="row">
<div class="col s12">
<h1>{% trans 'Article Search Results' %}</h1>
{% if search_term %}
<p>{% trans 'Searching for' %}: <i>{{ search_term }}</i></p>
{% elif keyword %}
<p>{% trans 'Keyword' %}: <i>{{ keyword }}</i></p>
{% endif %}
</div>
</div>

<div class="row">
<div class="col m8">
<hr aria-hidden="true" />
{% for article in articles %}
{% include "elements/article_listing.html" with article=article %}
{% empty %}
<p>{% trans "No articles to display." %}</p>
{% endfor %}

</div>
<section aria-label="Results">
<div class="col m8">
{% for article in articles %}
{% include "elements/article_listing.html" with article=article %}
{% empty %}
<p>{% trans "No articles to display." %}</p>
{% endfor %}
{% if articles %}
{% include "elements/pagination.html" with form_id=form.id %}
{% endif %}
</div>
</section>
<div class="col m4">
<div class="card">
<div class="card-content">
<div class="row">
<form method="GET">
<section aria-label="{% trans 'Search' %}">
<div class="card">
<div class="card-content">
<div class="row">
<div>
<p>
{% blocktrans count result_count=page_obj.paginator.count %}
1 result
{% plural %}
{{ result_count }} results
{% endblocktrans %}
</p>
</div>
<form method="GET" id="search_form">
<div class="form-group">
{% if not keyword %}
{{ form|materializecss }}
Expand Down Expand Up @@ -66,10 +82,11 @@ <h1>{% trans 'Article Search Results' %}</h1>
</button>
</div>
</div>
</form>
</form>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
{% endblock %}