# HG changeset patch # User cavaliet # Date 1342801679 -7200 # Node ID 08ff9a600163b665af128b58b55126645d8f0dd3 # Parent 107a67719d9d69f4c9f730a4ddc89221e197910a Enhance pagination number. diff -r 107a67719d9d -r 08ff9a600163 src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/content_project_pagination.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/content_project_pagination.html Fri Jul 20 18:27:59 2012 +0200 @@ -0,0 +1,42 @@ +{% load front_tags %} + +{% if nb_pages %} +

{% comment %} + alors ? : {{begin}} - {{middle}} - {{end}} - nb_pages = {{nb_pages}}
+ alors ? : nb_pages = {{nb_pages}} - range = {{nb_pages|get_range}} - cur_page_nb = {{cur_page_nb}}
{% endcomment %} + {% if 0 < cur_page_nb %}<< {% endif %} + {% for i in begin %} + {% if i == cur_page_nb %} + {{i|add:'1'}} + {% else %} + {{i|add:'1'}} + {% endif %} +   + {% endfor %} + {% if middle %} + ...  + {% for i in middle %} + {% if i == cur_page_nb %} + {{i|add:'1'}} + {% else %} + {{i|add:'1'}} + {% endif %} +   + {% endfor %} + {% endif %} + {% if end %} + ...  + {% for i in end %} + {% if i == cur_page_nb %} + {{i|add:'1'}} + {% else %} + {{i|add:'1'}} + {% endif %} +   + {% endfor %} + {% endif %} + {% if cur_page_nb|add:'1' < nb_pages %}>>{% endif %} +

+{% endif %} + + diff -r 107a67719d9d -r 08ff9a600163 src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html Thu Jul 19 12:16:47 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/contentslist.html Fri Jul 20 18:27:59 2012 +0200 @@ -3,19 +3,8 @@ {% load front_tags %} {% if nb_ct_pages %} -

- {% if 0 < current_content_page %}<<  {% endif %} - {% for i in nb_ct_pages|get_range %} - {% if i == current_content_page %} - {{i|add:'1'}} - {% else %} - {{i|add:'1'}} - {% endif %} -    - {% endfor %} - {% if current_content_page|add:'1' < nb_ct_pages %}>>{% endif %} - -

+ {% load navigation %}{% build_pagination nb_ct_pages current_content_page "contents_page clickable" %} + {% endif %}
{% trans "name" %} diff -r 107a67719d9d -r 08ff9a600163 src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html Thu Jul 19 12:16:47 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/projectslist.html Fri Jul 20 18:27:59 2012 +0200 @@ -3,17 +3,7 @@ {% load front_tags %} {% if nb_pj_pages %} -

- {% if 0 < current_project_page %}<<  {% endif %} - {% for i in nb_pj_pages|get_range %} - {% if i == current_project_page %} - {{i|add:'1'}} - {% else %} - {{i|add:'1'}} - {% endif %} -    - {% endfor %} - {% if current_project_page|add:'1' < nb_pj_pages %}>>{% endif %} + {% load navigation %}{% build_pagination nb_pj_pages current_project_page "projects_page clickable" %}

{% endif %} diff -r 107a67719d9d -r 08ff9a600163 src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html --- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html Thu Jul 19 12:16:47 2012 +0200 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html Fri Jul 20 18:27:59 2012 +0200 @@ -3,7 +3,7 @@ {% load front_tags %} {% if nb_pj_pages %} -

+ {% comment %}

{% if 0 < current_project_page %}<<  {% endif %} {% for i in nb_pj_pages|get_range %} {% if i == current_project_page %} @@ -14,8 +14,9 @@    {% endfor %} {% if current_project_page|add:'1' < nb_pj_pages %}>>{% endif %} +

{% endcomment %} + {% load navigation %}{% build_pagination nb_pj_pages current_project_page "projects_page clickable" %} -

{% endif %}
{% trans "name" %} diff -r 107a67719d9d -r 08ff9a600163 src/ldt/ldt/templatetags/navigation.py --- a/src/ldt/ldt/templatetags/navigation.py Thu Jul 19 12:16:47 2012 +0200 +++ b/src/ldt/ldt/templatetags/navigation.py Fri Jul 20 18:27:59 2012 +0200 @@ -17,3 +17,60 @@ if re.search(pattern, request.path): return css_class return '' + + +@register.inclusion_tag("ldt/ldt_utils/partial/content_project_pagination.html", takes_context=True) +def build_pagination(context, nb_pages, cur_page_nb, a_class, begin_pages=2, end_pages=2, before_current_pages=2, after_current_pages=2): + # Digg-like pagination. Adapted from http://djangosnippets.org/snippets/2199/ + nb_pages = int(nb_pages) + cur_page_nb = int(cur_page_nb) + #assert False, str(nb_pages) + ', ' + str(cur_page_nb) + before = max(cur_page_nb - before_current_pages - 1, 0) + after = cur_page_nb + after_current_pages + + page_range = range(nb_pages) + #assert False, str(nb_pages) + str(page_range) + begin = page_range[:begin_pages] + #assert False, str(nb_pages) + ", " + str(page_range) + ", " + str(begin) + middle = page_range[before+1:after+1] + end = page_range[-end_pages:] + last_page_number = end[-1] + #assert False, "a - cur_page_nb = " + str(cur_page_nb) + ", before = " + str(before) + ", after = " + str(after) + ", begin = " + str(begin) + ", middle = " + str(middle) + ", end = " + str(end) + + def collides(firstlist, secondlist): + """ Returns true if lists collides (have same entries) + >>> collides([1,2,3,4],[3,4,5,6,7]) + True + >>> collides([1,2,3,4],[5,6,7]) + False + """ + return any(item in secondlist for item in firstlist) + + # If middle and end has same entries, then end is what we want + if collides(middle, end): + end = range(max(cur_page_nb-before_current_pages, 1), last_page_number+1) + middle = [] + + #assert False, "0, " + str(nb_pages) + ", " + str(page_range) + ", " + str(begin) + # If begin and middle ranges has same entries, then begin is what we want + if collides(begin, middle): + begin = range(0, min(cur_page_nb + after_current_pages - 1, last_page_number)+1) + middle = [] + #assert False, "1 - cur_page_nb = " + str(cur_page_nb) + ", before = " + str(before) + ", after = " + str(after) + ", begin = " + str(begin) + ", middle = " + str(middle) + ", end = " + str(end) + + # If begin and end has same entries then begin is what we want + if collides(begin, end): + begin = range(1, last_page_number+1) + end = [] + #assert False, "2 - " + str(nb_pages) + ", " + str(page_range) + ", " + str(begin) + + #assert False, str(nb_pages) + ", " + str(page_range) + ", " + str(begin) + + context.update({'begin' : begin, + 'middle' : middle, + 'end' : end, + 'nb_pages' : nb_pages, + 'cur_page_nb' : cur_page_nb, + 'a_class' : a_class}) + #assert False, begin + middle + end + return context