--- a/web/views/navigation.py Tue Jun 01 08:34:35 2010 +0200
+++ b/web/views/navigation.py Wed Jun 02 13:02:47 2010 +0200
@@ -36,29 +36,52 @@
def call(self):
"""displays a resultset by page"""
- w = self.w
- req = self._cw
+ params = dict(self._cw.form)
+ self.clean_params(params)
+ basepath = self._cw.relative_path(includeparams=False)
+ self.w(u'<div class="pagination">')
+ self.w(u'%s ' % self.previous_link(basepath, params))
+ self.w(u'[ %s ]' %
+ u' | '.join(self.iter_page_links(basepath, params)))
+ self.w(u' %s' % self.next_link(basepath, params))
+ self.w(u'</div>')
+
+ def index_display(self, start, stop):
+ return u'%s - %s' % (start+1, stop+1)
+
+ def iter_page_links(self, basepath, params):
rset = self.cw_rset
page_size = self.page_size
start = 0
- blocklist = []
- params = dict(req.form)
- self.clean_params(params)
- basepath = req.relative_path(includeparams=False)
while start < rset.rowcount:
stop = min(start + page_size - 1, rset.rowcount - 1)
- blocklist.append(self.page_link(basepath, params, start, stop,
- self.index_display(start, stop)))
+ yield self.page_link(basepath, params, start, stop,
+ self.index_display(start, stop))
start = stop + 1
+
+
+class PageNavigationSelect(PageNavigation):
+ """displays a resultset by page as PageNavigationSelect but in a <select>,
+ better when there are a lot of results.
+ """
+ __select__ = paginated_rset(4)
+
+ page_link_templ = u'<option value="%s" title="%s">%s</option>'
+ selected_page_link_templ = u'<option value="%s" selected="selected" title="%s">%s</option>'
+ def call(self):
+ params = dict(self._cw.form)
+ self.clean_params(params)
+ basepath = self._cw.relative_path(includeparams=False)
+ w = self.w
w(u'<div class="pagination">')
w(u'%s ' % self.previous_link(basepath, params))
- w(u'[ %s ]' % u' | '.join(blocklist))
+ w(u'<select onchange="javascript: document.location=this.options[this.selectedIndex].value">')
+ for option in self.iter_page_links(basepath, params):
+ w(option)
+ w(u'</select>')
w(u' %s' % self.next_link(basepath, params))
w(u'</div>')
- def index_display(self, start, stop):
- return u'%s - %s' % (start+1, stop+1)
-
class SortedNavigation(NavigationComponent):
"""sorted navigation apply if navigation is needed (according to page size)
@@ -234,7 +257,7 @@
if w is None:
w = view.w
nav = req.vreg['components'].select_or_none(
- 'navigation', req, rset=rset, page_size=page_size)
+ 'navigation', req, rset=rset, page_size=page_size, view=view)
if nav:
if w is None:
w = view.w