hosts: two-way sorting
authorTero Marttila <terom@paivola.fi>
Wed, 24 Oct 2012 22:11:36 +0300
changeset 36 90af93caef84
parent 35 4a76d20f205f
child 37 9039238f8885
hosts: two-way sorting
pvl/verkko/hosts.py
--- a/pvl/verkko/hosts.py	Wed Oct 24 21:28:32 2012 +0300
+++ b/pvl/verkko/hosts.py	Wed Oct 24 22:11:36 2012 +0300
@@ -153,9 +153,24 @@
         sort = self.request.args.get('sort')
 
         if sort :
-            order_by = self.HOST_ATTRS[sort]
+            name = sort.lstrip('+-')
+        else :
+            name = None
+
+        if name :
+            order_by = self.HOST_ATTRS[name]
         else :
             order_by = default
+        
+        # prefix
+        if not sort :
+            pass
+        elif sort.startswith('+') :
+            order_by = order_by.asc()
+        elif sort.startswith('-') :
+            order_by = order_by.desc()
+        else :
+            pass
 
         log.debug("sort: %s", order_by)
         
@@ -273,6 +288,18 @@
 
             return self.url(**args)
 
+        def sortlink (attr) :
+            if not self.sorts :
+                sort = attr
+            elif self.sorts.lstrip('+-') != attr :
+                sort = attr
+            elif self.sorts.startswith('-') :
+                sort = "+" + attr
+            else :
+                sort = "-" + attr
+
+            return html.a(href=url(sort=sort))
+
         def paginate (page, count=None) :
             """
                 Render pagination.
@@ -326,7 +353,7 @@
                     html.th('#'),
                     (
                         html.th(
-                            html.a(href=url(sort=sort))(title) if sort else (title)
+                            sortlink(sort)(title) if sort else (title)
                         ) for title, sort, filter, class_ in COLS
                     )
                 ),