Skip to content

Commit

Permalink
Merge pull request #41 from eea/search_pagination
Browse files Browse the repository at this point in the history
Search pagination
  • Loading branch information
Iulia Chiriac committed Apr 21, 2017
2 parents cb98fd4 + 2ea5501 commit 785ec13
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 18 deletions.
1 change: 1 addition & 0 deletions gemet/thesaurus/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
NR_CONCEPTS_ON_PAGE = 40
DISTANCE_NUMBER = 9
DEFAULT_LANGCODE = 'en'

PENDING = 0
Expand Down
7 changes: 3 additions & 4 deletions gemet/thesaurus/templates/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,18 @@
<select name="select-language" id="js-change-language">
{% for lang in languages %}
<option value="{{ lang.code }}"
href="{% if code %}{% url view lang.code code %}{% else %}{% url view lang.code %}{% endif %}{% if get_params %}?{{ get_params }}{% endif %}"
href="{% if code %}{% url view lang.code code %}{% else %}{% url view lang.code %}{% endif %}{% if get_params %}?{{ get_params }}{% endif %}"
{% if language.code == lang.code%}selected="selected"{% endif %}
>{{ lang.name }}</option>
{% endfor %}
</select>
</div>

<form method="post"
action='{% url 'search' language.code %}'
<form method="get"
action='{% url "search" language.code %}'
id='search-form'
name="search-query"
placeholder="Concepts, Groups, Themes...">
{% csrf_token %}
{{ search_form }}
<button type="submit" value="Search">Search</button>
</form>
Expand Down
31 changes: 27 additions & 4 deletions gemet/thesaurus/templates/search.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,18 @@
{% endblock %}

{% block content %}
{% include 'header.html' with view='search' %}

{% include 'header.html' with view='search' query=query %}
{% if query %}
<div>
<span class="results-nr">{{ concepts|length }} results found.</span>
<span class="results-nr">{{ paginator.count }} results found.</span>
<span>Searched for '<b>{{ query }}</b>'</span>
</div>
{% if concepts|length %}
<hr>
<ul class="listing columns {% if language.rtl %}direction-rtl{% endif %}">
{% for concept in concepts %}
<li>
{% get_concept_names concept.search_text as names %}
{% get_concept_names concept status_values language.code as names %}
<a href="{% url 'concept' language.code concept.concept__code %}">{{ names.concept_name }}</a>
<p class="no-margin-top small">
{% if names.other_names %}
Expand Down Expand Up @@ -50,6 +49,30 @@
{% endif %}
{% endif %}

<div class="pagination clearfix">
<div class="float-right">
<!-- prev -->
{% if concepts.has_previous %}
<a class="no-visit" href="?page={{ concepts.previous_page_number }}&query={{ query }}">Previous</a>
{% endif %}
&ensp;
<!-- next -->
{% if concepts.has_next %}
<a class="no-visit" href="?page={{ concepts.next_page_number }}&query={{ query }}">Next</a>
{% endif %}
</div>

<!-- pages -->
Pages:
{% for page_number in visible_pages %}
{% if page_number == page_obj.number %}
{{ page_number }}
{% else %}
<a href="?page={{ page_number }}&query={{ query }}">{{ page_number }}</a>
{% endif %}
{% endfor %}
</div>

{% endblock %}

{% block version %}
Expand Down
14 changes: 9 additions & 5 deletions gemet/thesaurus/templatetags/gemet_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from django import template
from django.core.urlresolvers import reverse

from gemet.thesaurus.models import Concept
from gemet.thesaurus.models import Concept, Property
from gemet.thesaurus import DEFAULT_LANGCODE, SEARCH_SEPARATOR, EDIT_URL_NAMES
from gemet.thesaurus.utils import exp_encrypt

Expand Down Expand Up @@ -44,11 +44,15 @@ def get_broader_context(concept_id, langcode, status_values):


@register.assignment_tag
def get_concept_names(search_text):
names = search_text.split(SEARCH_SEPARATOR)
def get_concept_names(concept, status_values, langcode):
name = Property.objects.get(name='prefLabel',
status__in=status_values,
concept_id=concept['id'],
language=langcode).value
names = concept['search_text'].split(SEARCH_SEPARATOR)
return {
'concept_name': names[1],
'other_names': '; '.join([n for n in names[2:] if n])
'concept_name': name,
'other_names': '; '.join([n for n in names if n and n != name])
}


Expand Down
15 changes: 15 additions & 0 deletions gemet/thesaurus/tests/test_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,21 @@ def setUp(self):
value='{0}another somefling{0}{0}{0}{0}'.format(SEARCH_SEPARATOR),
name='searchText',
)
PropertyFactory(
concept=cp1,
value='something',
name='prefLabel',
)
PropertyFactory(
concept=cp2,
value='something else',
name='prefLabel',
)
PropertyFactory(
concept=cp3,
value='another somefling',
name='prefLabel',
)
PropertyFactory(concept=cp11, value='broader 1')
PropertyFactory(concept=cp12, value='broader 2.1')
PropertyFactory(concept=cp13, value='broader 2.2')
Expand Down
47 changes: 42 additions & 5 deletions gemet/thesaurus/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from django.http import Http404, StreamingHttpResponse
from django.shortcuts import render, get_object_or_404, redirect
from django.core.paginator import Paginator
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.views import View
Expand All @@ -21,8 +22,8 @@
from gemet.thesaurus.collation_charts import unicode_character_map
from gemet.thesaurus.forms import SearchForm, ExportForm
from gemet.thesaurus.utils import search_queryset, exp_decrypt, is_rdf
from gemet.thesaurus import DEFAULT_LANGCODE, NR_CONCEPTS_ON_PAGE
from gemet.thesaurus import NS_ID_VIEW_MAPPING
from gemet.thesaurus import DEFAULT_LANGCODE, DISTANCE_NUMBER
from gemet.thesaurus import NR_CONCEPTS_ON_PAGE, NS_ID_VIEW_MAPPING
from gemet.thesaurus import PUBLISHED, PENDING, DELETED_PENDING


Expand Down Expand Up @@ -236,17 +237,53 @@ def get_context_data(self, **kwargs):
"namespace": Term.NAMESPACE,
"status_values": self.status_values,
})
if 'paginator' in kwargs:
context.update({
"paginator": kwargs['paginator']
})
return context

def form_valid(self, form):
def form_valid(self, form, **kwargs):
self.query = form.cleaned_data['query']
self.concepts = search_queryset(
self.query,
self.language,
status_values=self.status_values,
)
page = self.request.GET.get('page', 1)
paginator = Paginator(self.concepts, NR_CONCEPTS_ON_PAGE)
self.concepts = paginator.page(page)

context = self.get_context_data(form=form, paginator=paginator)
page_number = self.concepts.number
total_pages = len(self.concepts.paginator.page_range)
distance_number = DISTANCE_NUMBER

context.update({
'visible_pages': range(
max(1, page_number - distance_number),
min(page_number + distance_number + 1, total_pages + 1)
)
})
return self.render_to_response(context)

def get_form_kwargs(self):
kwargs = super(SearchView, self).get_form_kwargs()
if self.request.method in ('GET', ):
kwargs.update({
'data': self.request.GET
})
return kwargs

return self.render_to_response(self.get_context_data(form=form))
def get(self, request, *args, **kwargs):
if 'query' in request.GET:
form = self.get_form()
if form.is_valid():
return self.form_valid(form, **kwargs)
else:
return self.form_invalid(form)
else:
return super(SearchView, self).get(request, **kwargs)


class RelationsView(HeaderMixin, StatusMixin, VersionMixin, TemplateView):
Expand Down Expand Up @@ -451,7 +488,7 @@ def get_context_data(self, **kwargs):
context = super(PaginatorView, self).get_context_data(**kwargs)
page_number = context['page_obj'].number
total_pages = len(context['page_obj'].paginator.page_range)
distance_number = 9
distance_number = DISTANCE_NUMBER

context.update({
'letters': self.letters,
Expand Down

0 comments on commit 785ec13

Please sign in to comment.