--- 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 %}"><<</a>
- <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page %}"><</a>
- {{ num_page }}/{{ last_page }}
- <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page %}">></a>
- <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page %}">>></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 %}"><<</a>
+ <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, searched=searched %}"><</a>
+ {{ num_page }}/{{ last_page }}
+ <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, searched=searched %}">></a>
+ <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, searched=searched %}">>></a></p>
+ {% else %}
+ <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page %}"><<</a>
+ <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page %}"><</a>
+ {{ num_page }}/{{ last_page }}
+ <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page %}">></a>
+ <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page %}">>></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 %}"><<</a>
- <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page %}"><</a>
- {{ num_page }}/{{ last_page }}
- <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page %}">></a>
- <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page %}">>></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 %}"><<</a>
+ <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page, searched=searched %}"><</a>
+ {{ num_page }}/{{ last_page }}
+ <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page, searched=searched %}">></a>
+ <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page, searched=searched %}">>></a></p>
+ {% else %}
+ <a href="{% url hdabo.views.all_tags num_page=1, nb_by_page=nb_by_page %}"><<</a>
+ <a href="{% url hdabo.views.all_tags num_page=prev_page, nb_by_page=nb_by_page %}"><</a>
+ {{ num_page }}/{{ last_page }}
+ <a href="{% url hdabo.views.all_tags num_page=next_page, nb_by_page=nb_by_page %}">></a>
+ <a href="{% url hdabo.views.all_tags num_page=last_page, nb_by_page=nb_by_page %}">>></a>
+ {% endif %}</p>
</div>
{% endblock %}
--- 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"])