changeset 320:5891fb49de1f

Simpler implementation for pagination short range + fix some issues when browsing the last pages
author Sylvain Beucler <beuc@beuc.net>
date Thu, 19 Aug 2010 00:20:00 +0200
parents 93a8358aca79
children 469bdacd96b0
files savane/svmain/templatetags/range.py
diffstat 1 files changed, 20 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/savane/svmain/templatetags/range.py
+++ b/savane/svmain/templatetags/range.py
@@ -34,18 +34,27 @@
     short_page_range = []
     orig_last = page_range[-1]
 
-    middle_start = max(1, cur_page - ADJACENT)
-    middle_end = min(middle_start + ADJACENT*2, page_range[-1])
-    if middle_start < (1 + FAR + 1):
-        middle_start = 1
-    if middle_end > (orig_last - FAR - 1):
-        middle_end = orig_last
+    middle = cur_page
+    if middle - ADJACENT < 1:
+        middle = 1 + ADJACENT
+    if middle + ADJACENT > orig_last:
+        middle = orig_last - ADJACENT
+
+    middle_start = max(middle - ADJACENT, 1)
+    middle_end = min(middle + ADJACENT, orig_last)
+
     short_page_range = range(middle_start, middle_end+1)
-    
-    if middle_start > 1+FAR:
-        short_page_range = range(1, FAR+1) + ['...'] + short_page_range
 
-    if middle_end < orig_last-FAR:
-        short_page_range = short_page_range + ['...'] + range(orig_last-FAR+1, orig_last+1)
+    if middle_start > 1:
+        if middle_start > 1+FAR:
+            short_page_range = range(1, FAR+1) + ['...'] + short_page_range
+        else:
+            short_page_range = range(1, middle_start) + short_page_range
+
+    if middle_end < orig_last:
+        if middle_end < orig_last-FAR:
+            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)
 
     return short_page_range