# HG changeset patch # User cavaliet # Date 1308738060 -7200 # Node ID 6b1338c7964c306d5a021d06d3e31a8d0621f378 # Parent dca0c476617bf270392c17e9144842ed799157f1 First step of search on tag list. diff -r dca0c476617b -r 6b1338c7964c web/hdabo/static/hdabo/img/arrow_green_right.png Binary file web/hdabo/static/hdabo/img/arrow_green_right.png has changed diff -r dca0c476617b -r 6b1338c7964c web/hdabo/static/hdabo/js/hdabo.js --- 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 }, diff -r dca0c476617b -r 6b1338c7964c web/hdabo/templates/all_tags.html --- 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}} +
+ {% csrf_token %} +

Chercher : + {% for s in search_def %} + {{s.0}} + {% endfor %} + +

Tags {{ current_page.start_index }} à {{ current_page.end_index }} sur {{ nb_total }}

-
-

<<   - <   - {{ num_page }}/{{ last_page }}   - >   - >>

+

+ {% if searched and searched != "" %} + <<   + <   + {{ num_page }}/{{ last_page }}   + >   + >>

+ {% else %} + <<   + <   + {{ num_page }}/{{ last_page }}   + >   + >> + {% endif %}

+
{% include "partial/all_tags_table.html" %}
-
-

<<   - <   - {{ num_page }}/{{ last_page }}   - >   - >>

+

+ {% if searched and searched != "" %} + <<   + <   + {{ num_page }}/{{ last_page }}   + >   + >>

+ {% else %} + <<   + <   + {{ num_page }}/{{ last_page }}   + >   + >> + {% endif %}

{% endblock %} diff -r dca0c476617b -r 6b1338c7964c web/hdabo/urls.py --- 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[\w-]+)$', 'hdabo.views.all_tags'), url(r'^alltags/(?P[\w-]+)/(?P[\w-]+)/$', 'hdabo.views.all_tags'), + url(r'^alltags/(?P[\w-]+)/(?P[\w-]+)/(?P.+)/$', 'hdabo.views.all_tags'), url(r'^validatedatasheet$', 'hdabo.views.validate_datasheet'), url(r'^validatedatasheet/(?P[\w-]+)$', 'hdabo.views.validate_datasheet'), url(r'^validatedatasheet/(?P[\w-]+)/(?P[\w-]+)/$', 'hdabo.views.validate_datasheet'), diff -r dca0c476617b -r 6b1338c7964c web/hdabo/views.py --- 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"])