enhance arrows with pictures and and add arrows with fragments.
authorcavaliet
Tue, 02 Jul 2013 16:38:05 +0200
changeset 213 6655617f3d92
parent 212 2cca82dd0e79
child 214 58dcbe86cbe0
enhance arrows with pictures and and add arrows with fragments.
src/egonomy/templates/egonomy_annotate_picture.html
src/egonomy/templates/egonomy_view_fragment.html
src/egonomy/templates/partial/fragment_in_list.html
src/egonomy/templates/partial/image_in_list.html
src/egonomy/urls.py
src/egonomy/views.py
--- a/src/egonomy/templates/egonomy_annotate_picture.html	Tue Jul 02 13:16:00 2013 +0200
+++ b/src/egonomy/templates/egonomy_annotate_picture.html	Tue Jul 02 16:38:05 2013 +0200
@@ -60,14 +60,16 @@
                         {% endwith %}
                     </div>
                   {% if search %}
-                    {% if index_search|add:1 > 1 %}{# i know it's weird but "if index_search > 0" doesn't work #}
+                    {% if index_search > 0 %}
                     <div class="arrow-wrap left-arrow">
                         <a class="arrow" href="{% url 'picture_by_search' %}?search={{ search }}&index_search={{ index_search|add:-1 }}"></a>
                     </div>
                     {% endif %}
+                    {% if index_search|add:1 < nb_results %}
                     <div class="arrow-wrap right-arrow">
                         <a class="arrow" href="{% url 'picture_by_search' %}?search={{ search }}&index_search={{ index_search|add:1 }}"></a>
                     </div>
+                    {% endif %}
                   {% endif %}
                     <ul class="share">
                         <li><a title="Partager sur Twitter" href="#" class="tool twitter"></a></li>
--- a/src/egonomy/templates/egonomy_view_fragment.html	Tue Jul 02 13:16:00 2013 +0200
+++ b/src/egonomy/templates/egonomy_view_fragment.html	Tue Jul 02 16:38:05 2013 +0200
@@ -5,6 +5,10 @@
 
 {% block title %}{% trans "View a fragment" %}{% endblock %}
 
+{% block css_page %}
+    <link rel="stylesheet" href="{% static 'egonomy/css/slideshow.css' %}" />
+{% endblock %}
+
 {% block content %}
             <div class="title-page">
                 <h2>{{ fragment.title }}</h2>
@@ -71,12 +75,18 @@
                         </div>
                       {% endif %}
                     </div>
+                  {% if search %}
+                    {% if index_search > 0 %}
                     <div class="arrow-wrap left-arrow">
-                        <a class="arrow" href="#"></a>
+                        <a class="arrow" href="{% url 'fragment_by_search' %}?search={{ search }}&index_search={{ index_search|add:-1 }}"></a>
                     </div>
+                    {% endif %}
+                    {% if index_search|add:1 < nb_results %}
                     <div class="arrow-wrap right-arrow">
-                        <a class="arrow" href="#"></a>
+                        <a class="arrow" href="{% url 'fragment_by_search' %}?search={{ search }}&index_search={{ index_search|add:1 }}"></a>
                     </div>
+                    {% endif %}
+                  {% endif %}
                     <ul class="share">
                         <li><a title="Partager sur Twitter" href="#" class="tool twitter"></a></li>
                         <li><a title="Partager sur Facebook" href="#" class="tool facebook"></a></li>
--- a/src/egonomy/templates/partial/fragment_in_list.html	Tue Jul 02 13:16:00 2013 +0200
+++ b/src/egonomy/templates/partial/fragment_in_list.html	Tue Jul 02 16:38:05 2013 +0200
@@ -1,7 +1,7 @@
 {% load i18n %}
 {# we suppose here that "frg" has been defined #}
 {% with fragment=frg.object|default:frg %}{# frg.object in search case, frg otherwise #}
-<a href="{% url 'view_fragment' fragment_pk=frg.pk %}">
+<a href="{% url 'view_fragment' fragment_pk=frg.pk %}{% if search %}?search={{ search }}&index_search={{ offset_search|add:forloop.counter0 }}&nb_results={{ nb_results }}{% endif %}">
 <div class="center-image">
     <div class="image-and-fragment square-fragment-225">
         {% with image=fragment.image.info.image_file %}
--- a/src/egonomy/templates/partial/image_in_list.html	Tue Jul 02 13:16:00 2013 +0200
+++ b/src/egonomy/templates/partial/image_in_list.html	Tue Jul 02 16:38:05 2013 +0200
@@ -2,7 +2,7 @@
 {% load i18n %}
 {% load thumbnail %}
 {# we suppose here that "img" has been defined #}
-<a href="{% url 'annotate_picture' image_id=img.id %}{% if search %}?search={{ search }}&index_search={{ offset_search|add:forloop.counter0 }}{% endif %}">
+<a href="{% url 'annotate_picture' image_id=img.id %}{% if search %}?search={{ search }}&index_search={{ offset_search|add:forloop.counter0 }}&nb_results={{ nb_results }}{% endif %}">
 <div class="center-image">
 {% with img.info.image_file as image %}
 {% if image %}
--- a/src/egonomy/urls.py	Tue Jul 02 13:16:00 2013 +0200
+++ b/src/egonomy/urls.py	Tue Jul 02 16:38:05 2013 +0200
@@ -27,6 +27,7 @@
     url(r'^additem/$', 'egonomy.views.add_item_to_collection', name='add_item'),
     url(r'^embedslideshow/(?P<collection_pk>.*)/$', 'egonomy.views.embed_slideshow', name='embed_slideshow'),
     url(r'^picturebysearch/$', 'egonomy.views.picture_by_search', name='picture_by_search'),
+    url(r'^fragmentbysearch/$', 'egonomy.views.fragment_by_search', name='fragment_by_search'),
 
     # Uncomment the admin/doc line below to enable admin documentation:
     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
--- a/src/egonomy/views.py	Tue Jul 02 13:16:00 2013 +0200
+++ b/src/egonomy/views.py	Tue Jul 02 16:38:05 2013 +0200
@@ -55,10 +55,15 @@
     # If we display the picture after a search, we propose the previous and next picture
     search = request.GET.get("search") or None
     index_search = request.GET.get("index_search") or None
+    if index_search:
+        index_search = int(index_search)
+    nb_results = request.GET.get("nb_results") or None
+    if nb_results:
+        nb_results = int(nb_results)
     
     return render_to_response("egonomy_annotate_picture.html",
                               {'img': img, 'fragment_list': frg_list, 'last_frg':last_frg,
-                               'search': search, 'index_search': index_search,
+                               'search': search, 'index_search': index_search, 'nb_results': nb_results,
                                'current_user_collection_list':current_user_collection_list(request)},
                               context_instance=RequestContext(request))
 
@@ -70,8 +75,18 @@
     
     fragment_only = {'true': True, 'false': False, "0": False, "1": True}.get((request.GET.get("fragment_only") or "1").lower())
     
+    # If we display the after after a search, we propose the previous and next fragment
+    search = request.GET.get("search") or None
+    index_search = request.GET.get("index_search") or None
+    if index_search:
+        index_search = int(index_search)
+    nb_results = request.GET.get("nb_results") or None
+    if nb_results:
+        nb_results = int(nb_results)
+    
     return render_to_response("egonomy_view_fragment.html",
                               {'fragment': frg, 'fragment_list': frg_list, 'fragment_only':fragment_only,
+                               'search': search, 'index_search': index_search, 'nb_results': nb_results,
                                'current_user_collection_list':current_user_collection_list(request)},
                               context_instance=RequestContext(request))
 
@@ -148,6 +163,7 @@
         qp = QueryParser(field)
         res = ModelRelatedSearchQuerySet(model=Image).filter(qp.parse(search)).models(ImageMetadata).load_all_queryset(Image, img_list).load_all()
         paginator = SearchPaginator(res, nb)
+        nb_results = paginator.count
     else:
         img_list = img_list.order_by('pk').all()
         paginator = Paginator(img_list, nb)
@@ -186,14 +202,16 @@
         if "field" in request.GET:
             field = request.GET["field"]
     
-    img_list = Image.objects.select_related('info', 'metadata')
     if search:
         if not field or field == 'all':
             field = 'text'
         qp = QueryParser(field)
-        res = ModelRelatedSearchQuerySet(model=Image).filter(qp.parse(search)).models(ImageMetadata).load_all_queryset(Image, img_list).load_all()
+        # We don't need to do .load_all_queryset(Image, img_list).load_all()
+        # because all we need the image's id/pk
+        res = ModelRelatedSearchQuerySet(model=Image).filter(qp.parse(search)).models(ImageMetadata)
         img = res[index_search]
-        return redirect(reverse("annotate_picture", args=[img.pk]) + "?search=" + search + "&index_search=" + str(index_search))
+        nb_results = len(res)
+        return redirect(reverse("annotate_picture", args=[img.pk]) + "?search=" + search + "&index_search=" + str(index_search) + "&nb_results=" + str(nb_results))
     else:
         redirect("home")
 
@@ -221,6 +239,7 @@
         qp = QueryParser(field)
         res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment).load_all_queryset(Fragment, frg_list).load_all().highlight()
         paginator = Paginator(res, nb)
+        nb_results = paginator.count
     else:
         frg_list = frg_list.order_by('pk').all()
         paginator = Paginator(frg_list, nb)
@@ -231,15 +250,51 @@
         results = paginator.page(paginator.num_pages)
         
     url_pagination = reverse("all_fragments") + "?limit=" + str(nb)
+    offset_search = None
     if search:
         url_pagination = url_pagination + "&search=" + search
+        offset_search = int(nb) * (cur_page_nb-1)
 
     return render_to_response("egonomy_all_fragments.html",
-                              {"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,
+                              {"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, 
+                               "offset_search":offset_search, "offset_search":offset_search,
                                'current_user_collection_list':current_user_collection_list(request)},
                               context_instance=RequestContext(request))
 
 
+
+def fragment_by_search(request):
+    
+    # We get the picture in the context of a search
+    index_search = request.GET.get("index_search") or None
+    if not index_search:
+        redirect("home")
+    else:
+        index_search = int(index_search)
+
+    search = None
+    if "search" in request.GET:
+        search = request.GET["search"]
+        field = "all"
+        if "field" in request.GET:
+            field = request.GET["field"]
+    
+    if search:
+        if not field or field == 'all':
+            field = 'text'
+        qp = QueryParser(field)
+        # We don't need to do .load_all_queryset(Fragment, frg_list).load_all().highlight()
+        # because all we need the fragment's pk
+        res = RelatedSearchQuerySet().filter(qp.parse(search)).models(Fragment)
+        frg = res[index_search]
+        nb_results = len(res)
+        return redirect(reverse("view_fragment", args=[frg.pk]) + "?search=" + search + "&index_search=" + str(index_search) + "&nb_results=" + str(nb_results))
+    else:
+        redirect("home")
+
+
+
 def user_fragments(request, username):
         
     # Get the cur_page_nb number parameter if possible