First step of search on tag list.
authorcavaliet
Wed, 22 Jun 2011 12:21:00 +0200
changeset 51 6b1338c7964c
parent 50 dca0c476617b
child 52 1f01957a3eae
child 54 deaa9393e6a2
First step of search on tag list.
web/hdabo/static/hdabo/img/arrow_green_right.png
web/hdabo/static/hdabo/js/hdabo.js
web/hdabo/templates/all_tags.html
web/hdabo/urls.py
web/hdabo/views.py
Binary file web/hdabo/static/hdabo/img/arrow_green_right.png has changed
--- a/web/hdabo/static/hdabo/js/hdabo.js	Wed Jun 22 11:59:57 2011 +0200
+++ b/web/hdabo/static/hdabo/js/hdabo.js	Wed Jun 22 12:21:00 2011 +0200
@@ -34,7 +34,8 @@
             csrfmiddlewaretoken:global_csrf_token, 
             datasheet_id:$('#datasheet_id').val(),
             num_page:$('#num_page').val(),
-            nb_by_page:$('#nb_by_page').val()
+            nb_by_page:$('#nb_by_page').val(),
+            searched:$('#searched_str').val()
         },
     	callback  : function(value, settings) {
             $('#tag_table_container').html(value);
@@ -88,7 +89,8 @@
             csrfmiddlewaretoken:global_csrf_token, 
             datasheet_id:$('#datasheet_id').val(),
             num_page:$('#num_page').val(),
-            nb_by_page:$('#nb_by_page').val()
+            nb_by_page:$('#nb_by_page').val(),
+            searched:$('#searched_str').val()
         },
     	callback  : function(value, settings) {
             $('#tag_table_container').html(value);
@@ -107,7 +109,8 @@
     	submitdata: {
             csrfmiddlewaretoken:global_csrf_token,
             num_page:$('#num_page').val(),
-            nb_by_page:$('#nb_by_page').val()
+            nb_by_page:$('#nb_by_page').val(),
+            searched:$('#searched_str').val()
         },
     	callback  : function(value, settings) {
             $('#tag_table_container').html(value);
@@ -236,6 +239,7 @@
                datasheet_id:$('#datasheet_id').val(),
                num_page:$('#num_page').val(),
                nb_by_page:$('#nb_by_page').val(),
+               searched:$('#searched_str').val(),
                tag_id:id_tag,
                activated:new_checked
                },
--- a/web/hdabo/templates/all_tags.html	Wed Jun 22 11:59:57 2011 +0200
+++ b/web/hdabo/templates/all_tags.html	Wed Jun 22 12:21:00 2011 +0200
@@ -52,24 +52,49 @@
     
     {% block content %}
     {{block.super}}
+    <form method="POST" action="{% url hdabo.views.all_tags %}">
+    {% csrf_token %}
+    <p>Chercher : 
+    {% for s in search_def %}
+    <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, searched=s.1 %}">{{s.0}}</a>
+    {% endfor %}
+    <input type="text" name="searched" value="{% if searched %}{{searched}}{% endif %}" id="searched" />
+    </p>
     <p>Tags {{ current_page.start_index }} à {{ current_page.end_index }} sur {{ nb_total }}</p>
-    <div id="count_nav_top">
-        <p><a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page %}">&lt;&lt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page %}">&lt;</a>&nbsp;&nbsp;
-           {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
-           <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page %}">&gt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page %}">&gt;&gt;</a></p>
+    <div id="count_nav_top"><p>
+        {% if searched and searched != "" %}
+            <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, searched=searched %}">&lt;&lt;</a>&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, searched=searched %}">&lt;</a>&nbsp;&nbsp;
+            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, searched=searched %}">&gt;</a>&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, searched=searched %}">&gt;&gt;</a></p>
+        {% else %}
+            <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page %}">&lt;&lt;</a>&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page %}">&lt;</a>&nbsp;&nbsp;
+            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page %}">&gt;</a>&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page %}">&gt;&gt;</a>
+        {% endif %}</p>
     </div>
     <input type="hidden" name="num_page" value="{{num_page}}" id="num_page" />
     <input type="hidden" name="nb_by_page" value="{{nb_by_page}}" id="nb_by_page" />
+    <input type="hidden" name="searched_str" value="{% if searched %}{{searched}}{% endif %}" id="searched_str" />
     <div id="tag_table_container">
     {% include "partial/all_tags_table.html" %}
     </div>
-    <div id="count_nav_bottom">
-        <p><a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page %}">&lt;&lt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page %}">&lt;</a>&nbsp;&nbsp;
-           {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
-           <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page %}">&gt;</a>&nbsp;&nbsp;
-           <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page %}">&gt;&gt;</a></p>
+    <div id="count_nav_bottom"><p>
+        {% if searched and searched != "" %}
+            <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page, searched=searched %}">&lt;&lt;</a>&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, searched=searched %}">&lt;</a>&nbsp;&nbsp;
+            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, searched=searched %}">&gt;</a>&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, searched=searched %}">&gt;&gt;</a></p>
+        {% else %}
+            <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page %}">&lt;&lt;</a>&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page %}">&lt;</a>&nbsp;&nbsp;
+            {{ num_page }}/{{ last_page }}&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page %}">&gt;</a>&nbsp;&nbsp;
+            <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page %}">&gt;&gt;</a>
+        {% endif %}</p>
     </div>
     {% endblock %}
--- a/web/hdabo/urls.py	Wed Jun 22 11:59:57 2011 +0200
+++ b/web/hdabo/urls.py	Wed Jun 22 12:21:00 2011 +0200
@@ -30,6 +30,7 @@
     url(r'^alltags$', 'hdabo.views.all_tags'),
     url(r'^alltags/(?P<num_page>[\w-]+)$', 'hdabo.views.all_tags'),
     url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/$', 'hdabo.views.all_tags'),
+    url(r'^alltags/(?P<num_page>[\w-]+)/(?P<nb_by_page>[\w-]+)/(?P<searched>.+)/$', 'hdabo.views.all_tags'),
     url(r'^validatedatasheet$', 'hdabo.views.validate_datasheet'),
     url(r'^validatedatasheet/(?P<ds_id>[\w-]+)$', 'hdabo.views.validate_datasheet'),
     url(r'^validatedatasheet/(?P<ds_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.validate_datasheet'),
--- a/web/hdabo/views.py	Wed Jun 22 11:59:57 2011 +0200
+++ b/web/hdabo/views.py	Wed Jun 22 12:21:00 2011 +0200
@@ -7,6 +7,7 @@
 from django.http import HttpResponseBadRequest
 from django.shortcuts import render_to_response, redirect
 from django.template import RequestContext
+from django.utils.http import urlquote, urlencode
 from haystack.constants import DJANGO_ID
 from haystack.query import SearchQuerySet
 from hdabo.wp_utils import process_tag
@@ -92,18 +93,38 @@
 
 
 #@login_required
-def all_tags(request, num_page=None, nb_by_page=None):
+def all_tags(request, num_page=None, nb_by_page=None, searched=None):
+    
+    default_nb_py_page = 50
+    star_character = "*"
+    # If the view is asked after a form sent with post vars, it means that searched is a post var.
+    if u"searched" in request.POST :
+        searched = request.POST["searched"]
+        nb_by_page = default_nb_py_page
+        num_page = 1
     
-    alltags = Tag.objects.order_by('label')
+    if searched and searched != "" :
+        # searched terms are word, word* or *word* (* = star_character)
+        if searched.endswith(star_character) and not searched.startswith(star_character) :
+            alltags = Tag.objects.filter(label__istartswith=searched[:-1]).order_by('label')
+        elif not searched.endswith(star_character) and searched.startswith(star_character) :
+            alltags = Tag.objects.filter(label__iendswith=searched[1:]).order_by('label')
+        elif searched.endswith(star_character) and searched.startswith(star_character) :
+            alltags = Tag.objects.filter(label__icontains=searched[1:-1]).order_by('label')
+        else :
+            alltags = Tag.objects.filter(label__iexact=searched).order_by('label')
+    else :
+        alltags = Tag.objects.order_by('label')
+        
     nb_total = len(alltags)
     # We build the paginator for the requested list
     if nb_by_page :
         try:
             nb_by_page = int(nb_by_page)
         except :
-            nb_by_page = 25
+            nb_by_page = default_nb_py_page
     else :
-        nb_by_page = 25
+        nb_by_page = default_nb_py_page
     if num_page :
         try:
             num_page = int(num_page)
@@ -118,10 +139,49 @@
     next_page = min(num_page + 1, p.num_pages)
     last_page = p.num_pages
     
+    search_def = (('0', urlquote('0'+star_character)),
+                  ('1', urlquote('1'+star_character)),
+                  ('2', urlquote('2'+star_character)),
+                  ('3', urlquote('3'+star_character)),
+                  ('4', urlquote('4'+star_character)),
+                  ('5', urlquote('5'+star_character)),
+                  ('6', urlquote('6'+star_character)),
+                  ('7', urlquote('7'+star_character)),
+                  ('8', urlquote('8'+star_character)),
+                  ('9', urlquote('9'+star_character)),
+                  ('A', urlquote('a'+star_character)),
+                  ('B', urlquote('b'+star_character)),
+                  ('C', urlquote('c'+star_character)),
+                  ('D', urlquote('d'+star_character)),
+                  ('E', urlquote('e'+star_character)),
+                  ('F', urlquote('f'+star_character)),
+                  ('G', urlquote('g'+star_character)),
+                  ('H', urlquote('h'+star_character)),
+                  ('I', urlquote('i'+star_character)),
+                  ('J', urlquote('j'+star_character)),
+                  ('K', urlquote('k'+star_character)),
+                  ('L', urlquote('l'+star_character)),
+                  ('M', urlquote('m'+star_character)),
+                  ('N', urlquote('n'+star_character)),
+                  ('O', urlquote('o'+star_character)),
+                  ('P', urlquote('p'+star_character)),
+                  ('Q', urlquote('q'+star_character)),
+                  ('R', urlquote('r'+star_character)),
+                  ('S', urlquote('s'+star_character)),
+                  ('T', urlquote('t'+star_character)),
+                  ('U', urlquote('u'+star_character)),
+                  ('V', urlquote('v'+star_character)),
+                  ('W', urlquote('w'+star_character)),
+                  ('X', urlquote('x'+star_character)),
+                  ('Y', urlquote('y'+star_character)),
+                  ('Z', urlquote('z'+star_character)))
+    
     return render_to_response("all_tags.html",
                               {'nb_total':nb_total, 'tags':current_page.object_list, 'current_page':current_page,
                                'prev_page':prev_page, 'next_page':next_page, 'last_page':last_page,
-                               'num_page':num_page, 'nb_by_page':nb_by_page, 'categories':json.dumps(get_categories())},
+                               'num_page':num_page, 'nb_by_page':nb_by_page, 'searched':searched,
+                               'categories':json.dumps(get_categories()),
+                               'search_def':search_def, 'searched':searched},
                               context_instance=RequestContext(request))
     
 
@@ -170,17 +230,31 @@
 
 
 #@login_required
-def get_all_tags_table(request, num_page=None, nb_by_page=None):
+def get_all_tags_table(request, num_page=None, nb_by_page=None, searched=None):
     
-    alltags = Tag.objects.order_by('label')
+    default_nb_py_page = 50
+    star_character = "*"
+    if searched and searched != "" :
+        # searched terms are word, word* or *word* (* = star_character)
+        if searched.endswith(star_character) and not searched.startswith(star_character) :
+            alltags = Tag.objects.filter(label__istartswith=searched[:-1]).order_by('label')
+        elif not searched.endswith(star_character) and searched.startswith(star_character) :
+            alltags = Tag.objects.filter(label__iendswith=searched[1:]).order_by('label')
+        elif searched.endswith(star_character) and searched.startswith(star_character) :
+            alltags = Tag.objects.filter(label__icontains=searched[1:-1]).order_by('label')
+        else :
+            alltags = Tag.objects.filter(label__iexact=searched).order_by('label')
+    else :
+        alltags = Tag.objects.order_by('label')
+    
     # We build the paginator for the requested list
     if nb_by_page :
         try:
             nb_by_page = int(nb_by_page)
         except :
-            nb_by_page = 25
+            nb_by_page = default_nb_py_page
     else :
-        nb_by_page = 25
+        nb_by_page = default_nb_py_page
     if num_page :
         try:
             num_page = int(num_page)
@@ -239,7 +313,7 @@
             
         tag.save()
     
-    return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"])
+    return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], searched=request.POST["searched"])
 
 
 #@login_required
@@ -297,7 +371,7 @@
     if u"datasheet_id" in request.POST :
         return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
     else :
-        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"])
+        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], searched=request.POST["searched"])
 
 
 #@login_required
@@ -341,7 +415,7 @@
     if u"datasheet_id" in request.POST :
         return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
     else :
-        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"])
+        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], searched=request.POST["searched"])
 
 
 #@login_required
@@ -392,7 +466,7 @@
     if u"datasheet_id" in request.POST :
         return get_tag_table(request=request, ds_id=request.POST["datasheet_id"], valid=0)
     else :
-        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"])
+        return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], searched=request.POST["searched"])
     
 
 #@login_required
@@ -416,6 +490,6 @@
         tag.category = None
     tag.save()
     # This function is available only in all_tags_table context
-    return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"])
+    return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], searched=request.POST["searched"])