Search fragment works. Highlight needs to be improved.
authorcavaliet
Mon, 18 Feb 2013 15:43:46 +0100
changeset 43 119cd616faa4
parent 42 277ebc746baf
child 44 f2d7c97b7ec9
child 45 ea2c1961a515
Search fragment works. Highlight needs to be improved.
src/egonomy/templates/egonomy_all_fragments.html
src/egonomy/templates/egonomy_all_pictures.html
src/egonomy/templates/egonomy_base.html
src/egonomy/views.py
--- 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" %} &laquo;&nbsp;{{ search }}&nbsp;&raquo;&nbsp;
+                      {% else %}
+                        <h2>{% trans "Search results for" %} &laquo;&nbsp;{{ search }}&nbsp;&raquo;&nbsp;:
+                      {% 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" %}&nbsp;: <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))