changeset 321:469bdacd96b0

Add "dichotomy" when page range is very big
author Sylvain Beucler <beuc@beuc.net>
date Thu, 19 Aug 2010 01:07:45 +0200
parents 5891fb49de1f
children 3f005a413dfc
files savane/svmain/templatetags/range.py
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/savane/svmain/templatetags/range.py
+++ b/savane/svmain/templatetags/range.py
@@ -46,15 +46,23 @@
     short_page_range = range(middle_start, middle_end+1)
 
     if middle_start > 1:
-        if middle_start > 1+FAR:
+        if middle_start <= 1+FAR:
+            short_page_range = range(1, middle_start) + short_page_range
+        elif middle_start <= 1+FAR+(2*ADJACENT+1):
             short_page_range = range(1, FAR+1) + ['...'] + short_page_range
         else:
-            short_page_range = range(1, middle_start) + short_page_range
+            # dichotomy if you can fit more than the display range in the '...'
+            short_page_range = range(1, FAR+1) + ['...'] \
+                + [1+FAR + ((middle_start-1) - FAR) / 2] + ['...'] + short_page_range
 
     if middle_end < orig_last:
-        if middle_end < orig_last-FAR:
+        if middle_end >= orig_last-FAR:
+            short_page_range = short_page_range + range(middle_end+1, orig_last+1)
+        elif middle_end >= orig_last-FAR-(2*ADJACENT+1):
             short_page_range = short_page_range + ['...'] + range(orig_last-FAR+1, orig_last+1)
         else:
-            short_page_range = short_page_range + range(middle_end+1, orig_last+1)
+            # dichotomy if you can fit more than the display range in the '...'
+            short_page_range = short_page_range + ['...'] \
+                + [orig_last-FAR - ((orig_last-FAR) - middle_end) / 2] + ['...'] + range(orig_last-FAR+1, orig_last+1)
 
     return short_page_range