]> de.git.xonotic.org Git - xonotic/xonstat.git/commitdiff
Add pagination and fuzzy date to the player_index.
authorAnt Zucaro <azucaro@gmail.com>
Wed, 7 Dec 2011 17:52:32 +0000 (12:52 -0500)
committerAnt Zucaro <azucaro@gmail.com>
Wed, 7 Dec 2011 17:52:32 +0000 (12:52 -0500)
Pagination should be <first page> <previous page> <curr+1>-<curr+4>
<next page> <last page> (page <curr> of <last_page>). The pretty date is
using the same one from util.py, so we get something like "a few days
ago".

xonstat/models.py
xonstat/static/css/style.css
xonstat/templates/player_index.mako
xonstat/views/player.py

index 0dcda1fc904815ef1928e81be2c90d661a342849..23d4a4181972e39136edb94ee56b6b5c30612925 100755 (executable)
@@ -22,6 +22,9 @@ class Player(object):
         else:
             return strip_colors(self.nick)
 
+    def joined_pretty_date(self):
+        return pretty_date(self.create_dt)
+
     def __repr__(self):
         return "<Player(%s, %s)>" % (self.player_id, 
                 self.nick.encode('utf-8'))
index c275ff62022715fd290ba4df5007cbd46bdff021..a5b3e6c46dcc919cb2127577be9beb9c453b6519 100755 (executable)
@@ -191,6 +191,12 @@ input { font-family: 'Xolonium', 'Arial', 'Helvetica'; }
        text-align:center;
 }
 
+/* pagination */
+.pagination {
+    padding-right: 8px;
+}
+
+
 /* drop-down navigation */
 .nav, .nav ul {
        list-style: none;
index b8a68c790ecf52be6fc0a1ac4ba5a117131afb40..15f3a058bb57a5daaca7f229287c95896adbbc7b 100755 (executable)
@@ -17,15 +17,27 @@ Player Index - ${parent.title()}
 % for player in players:\r
   <tr>\r
     <td><a href="${request.route_url("player_info", id=player.player_id)}" title="Go to this player's info page">${player.nick_html_colors()|n}</a></th>\r
-    <td>${player.create_dt.strftime('%m/%d/%Y at %H:%M')}</th>\r
+    <td>${player.joined_pretty_date()}</th>\r
   </tr>\r
 % endfor\r
 </table>\r
 % endif\r
 \r
+<!-- pagination -->\r
+<a class="pagination" href="${request.route_url("player_index_paged", page=1)}" name="First Page"><<</a>\r
+\r
 % if players.previous_page:\r
-<a href="${request.route_url("player_index_paged", page=players.previous_page)}" name="Previous Page">Previous</a>\r
+<a class="pagination" href="${request.route_url("player_index_paged", page=players.previous_page)}" name="Previous Page"><</a>\r
 % endif\r
+\r
+% for page in pages_to_link:\r
+<a class="pagination" href="${request.route_url("player_index_paged", page=page)}" name="Go to page ${page}">${page}</a>\r
+% endfor\r
+\r
 % if players.next_page:\r
-<a href="${request.route_url("player_index_paged", page=players.next_page)}" name="Next Page">Next</a>\r
+<a class="pagination" href="${request.route_url("player_index_paged", page=players.next_page)}" name="Next Page">></a>\r
 % endif\r
+\r
+<a class="pagination" href="${request.route_url("player_index_paged", page=players.last_page)}" name="Last Page">>></a>\r
+\r
+(Page <a href="${request.route_url("player_index_paged", page=players.page)}" name="Go to page ${players.page}">${players.page}</a> of <a href="${request.route_url("player_index_paged", page=players.last_page)}" name="Last Page">${players.last_page}</a>)\r
index 239cf064557db803209137730ba525de8456bcf7..96c8990f283cf610bcbce6c261ea9cda61368b28 100755 (executable)
@@ -1,8 +1,10 @@
 import datetime\r
 import logging\r
 import re\r
+import sqlalchemy as sa\r
 import time\r
 from pyramid.response import Response\r
+from pyramid.url import current_route_url\r
 from sqlalchemy import desc\r
 from webhelpers.paginate import Page, PageURL\r
 from xonstat.models import *\r
@@ -16,22 +18,31 @@ def player_index(request):
     Provides a list of all the current players. \r
     """\r
     if 'page' in request.matchdict:\r
-        current_page = request.matchdict['page']\r
+        current_page = int(request.matchdict['page'])\r
     else:\r
         current_page = 1\r
 \r
     try:\r
         player_q = DBSession.query(Player).\\r
                 filter(Player.player_id > 2).\\r
+                filter(sa.not_(Player.nick.like('Anonymous Player%'))).\\r
                 order_by(Player.player_id.desc())\r
 \r
         players = Page(player_q, current_page, url=page_url)\r
 \r
-        \r
+        last_linked_page = current_page + 4\r
+        if last_linked_page > players.last_page:\r
+            last_linked_page = players.last_page\r
+\r
+        pages_to_link = range(current_page+1, last_linked_page+1)\r
+\r
     except Exception as e:\r
         players = None\r
+        raise e\r
 \r
-    return {'players':players, }\r
+    return {'players':players,\r
+            'pages_to_link':pages_to_link,\r
+            }\r
 \r
 \r
 def player_info(request):\r