Search fragment works. Highlight needs to be improved.
--- a/src/egonomy/templates/egonomy_all_fragments.html Fri Feb 15 19:03:15 2013 +0100
+++ b/src/egonomy/templates/egonomy_all_fragments.html Mon Feb 18 15:43:46 2013 +0100
@@ -3,14 +3,24 @@
{% load i18n %}
{% load thumbnail %}
{% load navigation %}
+{% load highlight %}
{% block title %}{% trans "All fragments" %}{% endblock %}
{% block content %}
<div class="fullwidth">
<div class="fullwidth">
- <h2>{% trans "All fragments" %}</h2>
- {% if nb_pages %}<p>{% build_pagination nb_pages cur_page_nb "all_fragments" "contents_page clickable" %}</p>{% endif %}
+ {% if search %}
+ {% ifequal nb_results 0 %}
+ <h2>{% trans "No results for" %} « {{ search }} »
+ {% else %}
+ <h2>{% trans "Search results for" %} « {{ search }} » :
+ {% endifequal %}
+ <span class="right"><a href="{% url 'all_fragments' %}" alt="{% trans "All fragments" %}">{% trans "All fragments" %}</a></span></h2>
+ {% else %}
+ <h2>{% trans "All pictures" %}</h2>
+ {% endif %}
+ {% if nb_pages %}<p>{% build_pagination nb_pages cur_page_nb url_pagination "contents_page clickable" %}</p>{% endif %}
<ul class="fullwidth">
{% for frg in results %}
<li class="subcol subcol-eighth">
@@ -41,12 +51,12 @@
</svg>
</div>
</div>
- <h3>{{ frg.title }}</h3></a>
+ <h3>{% if search %}{% highlight frg.title with search html_tag "span" css_class "highlight" %}{% else %}{{ frg.title }}{% endif %}</h3></a>
<p>{% trans "Annotated by" %} <strong>{{ frg.author }}</strong></p>
</li>
{% endfor %}
</ul>
- {% if nb_pages %}<p>{% build_pagination nb_pages cur_page_nb "all_fragments" "contents_page clickable" %}</p>{% endif %}
+ {% if nb_pages %}<p>{% build_pagination nb_pages cur_page_nb url_pagination "contents_page clickable" %}</p>{% endif %}
</div>
</div>
{% endblock %}
--- a/src/egonomy/templates/egonomy_all_pictures.html Fri Feb 15 19:03:15 2013 +0100
+++ b/src/egonomy/templates/egonomy_all_pictures.html Mon Feb 18 15:43:46 2013 +0100
@@ -3,6 +3,7 @@
{% load i18n %}
{% load thumbnail %}
{% load navigation %}
+{% load highlight %}
{% block title %}{% trans "All pictures" %}{% endblock %}
@@ -45,7 +46,7 @@
{% endif %}
{% endwith %}
</div>
- <h3>{% if img.metadata.titre %}{{ img.metadata.titre }}{% else %}({% trans "No title" %}){% endif %}</h3></a>
+ <h3>{% if img.metadata.titre %}{% if search %}{% highlight img.metadata.titre with search html_tag "span" css_class "highlight" %}{% else %}{{ img.metadata.titre }}{% endif %}{% else %}({% trans "No title" %}){% endif %}</h3></a>
<p>{% trans "Author" %} : <strong>{% if img.metadata.auteur %}{{ img.metadata.auteur }}{% else %}({% trans "Not documented" %}){% endif %}</strong></p>
</li>
{% endfor %}
--- a/src/egonomy/templates/egonomy_base.html Fri Feb 15 19:03:15 2013 +0100
+++ b/src/egonomy/templates/egonomy_base.html Mon Feb 18 15:43:46 2013 +0100
@@ -20,7 +20,7 @@
<div class="header-wrap fullwidth">
<header>
<h1 class="column column-third"><a href="{% url 'home' %}">TagItAll {% trans "by" %} eGonomy</a></h1>
- <form class="column column-third" action="{% url 'all_pictures' %}" method="GET">
+ <form class="column column-third" action="{% if search_fragment %}{% url 'all_fragments' %}{% else %}{% url 'all_pictures' %}{% endif %}" method="GET">
<input class="search-field" type="search" placeholder="{% trans 'Search' %}" id="id_search" name="search"/>
<input type="hidden" value="all" name="field">
</form>
--- a/src/egonomy/views.py Fri Feb 15 19:03:15 2013 +0100
+++ b/src/egonomy/views.py Mon Feb 18 15:43:46 2013 +0100
@@ -9,6 +9,7 @@
from egonomy.search_indexes import QueryParser
from egonomy.search_indexes.paginator import SearchPaginator
from egonomy.search_indexes.query import ModelRelatedSearchQuerySet
+from haystack.query import RelatedSearchQuerySet
import logging
logger = logging.getLogger(__name__)
@@ -125,21 +126,43 @@
def all_fragments(request):
-
+
# Get the cur_page_nb number parameter if possible
cur_page_nb = request.GET.get("page") or 1
cur_page_nb = int(cur_page_nb)
-
- frg_list = Fragment.objects.all().order_by('pk').select_related('image', 'image__info', 'image__metadata','author')
+
+ search = None
+ nb_results = 1
+ if "search" in request.GET:
+ search = request.GET["search"]
+ field = "all"
+ if "field" in request.GET:
+ field = request.GET["field"]
+
+ frg_list = Fragment.objects.select_related('image', 'image__info', 'image__metadata','author')
nb = getattr(settings,"IMAGES_PER_PAGE", 32)
- paginator = Paginator(frg_list, nb)
+ if search:
+ if not field or field == 'all':
+ field = 'text'
+ qp = QueryParser(field)
+ res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment).load_all_queryset(Fragment, frg_list).load_all()
+ paginator = SearchPaginator(res, nb)
+ else:
+ frg_list = frg_list.order_by('pk').all()
+ paginator = Paginator(frg_list, nb)
+
try:
results = paginator.page(cur_page_nb)
except (EmptyPage, InvalidPage):
results = paginator.page(paginator.num_pages)
+
+ url_pagination = reverse("all_fragments")
+ if search:
+ url_pagination = url_pagination + "?search=" + search
+
return render_to_response("egonomy_all_fragments.html",
- {'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb},
+ {"search_fragment":True, 'results':results, 'nb_pages':paginator.num_pages, 'cur_page_nb':cur_page_nb, "search":search, "nb_results":nb_results, "url_pagination":url_pagination},
context_instance=RequestContext(request))