41 _('context'): dict(type='String', default='header', |
43 _('context'): dict(type='String', default='header', |
42 vocabulary=(_('navtop'), _('navbottom'), |
44 vocabulary=(_('navtop'), _('navbottom'), |
43 _('navcontenttop'), _('navcontentbottom')), |
45 _('navcontenttop'), _('navcontentbottom')), |
44 #vocabulary=(_('header'), _('incontext'), _('footer')), |
46 #vocabulary=(_('header'), _('incontext'), _('footer')), |
45 help=_('context where this component should be displayed')), |
47 help=_('context where this component should be displayed')), |
46 _('htmlclass'):dict(type='String', default='mainRelated', |
|
47 help=_('html class of the component')), |
|
48 } |
48 } |
49 |
49 |
50 context = 'navcontentbottom' # 'footer' | 'header' | 'incontext' |
50 context = 'navcontentbottom' # 'footer' | 'header' | 'incontext' |
51 |
51 |
52 def call(self, view=None): |
52 def call(self, view=None): |
70 start_param = '__start' |
70 start_param = '__start' |
71 stop_param = '__stop' |
71 stop_param = '__stop' |
72 page_link_templ = u'<span class="slice"><a href="%s" title="%s">%s</a></span>' |
72 page_link_templ = u'<span class="slice"><a href="%s" title="%s">%s</a></span>' |
73 selected_page_link_templ = u'<span class="selectedSlice"><a href="%s" title="%s">%s</a></span>' |
73 selected_page_link_templ = u'<span class="selectedSlice"><a href="%s" title="%s">%s</a></span>' |
74 previous_page_link_templ = next_page_link_templ = page_link_templ |
74 previous_page_link_templ = next_page_link_templ = page_link_templ |
75 no_previous_page_link = no_next_page_link = u'' |
75 no_previous_page_link = u'<<' |
|
76 no_next_page_link = u'>>' |
76 |
77 |
77 def __init__(self, req, rset, **kwargs): |
78 def __init__(self, req, rset, **kwargs): |
78 super(NavigationComponent, self).__init__(req, rset=rset, **kwargs) |
79 super(NavigationComponent, self).__init__(req, rset=rset, **kwargs) |
79 self.starting_from = 0 |
80 self.starting_from = 0 |
80 self.total = rset.rowcount |
81 self.total = rset.rowcount |
110 if self.start_param in params: |
111 if self.start_param in params: |
111 del params[self.start_param] |
112 del params[self.start_param] |
112 if self.stop_param in params: |
113 if self.stop_param in params: |
113 del params[self.stop_param] |
114 del params[self.stop_param] |
114 |
115 |
|
116 def page_url(self, path, params, start, stop): |
|
117 params = merge_dicts(params, {self.start_param : start, |
|
118 self.stop_param : stop,}) |
|
119 if path == 'json': |
|
120 rql = params.pop('rql', self.rset.printable_rql()) |
|
121 # latest 'true' used for 'swap' mode |
|
122 url = 'javascript: replacePageChunk(%s, %s, %s, %s, true)' % ( |
|
123 dumps(params.get('divid', 'paginated-content')), |
|
124 dumps(rql), dumps(params.pop('vid', None)), dumps(params)) |
|
125 else: |
|
126 url = self.build_url(path, **params) |
|
127 return url |
|
128 |
115 def page_link(self, path, params, start, stop, content): |
129 def page_link(self, path, params, start, stop, content): |
116 url = self.build_url(path, **merge_dicts(params, {self.start_param : start, |
130 url = xml_escape(self.page_url(path, params, start, stop)) |
117 self.stop_param : stop,})) |
|
118 url = xml_escape(url) |
|
119 if start == self.starting_from: |
131 if start == self.starting_from: |
120 return self.selected_page_link_templ % (url, content, content) |
132 return self.selected_page_link_templ % (url, content, content) |
121 return self.page_link_templ % (url, content, content) |
133 return self.page_link_templ % (url, content, content) |
122 |
134 |
123 def previous_link(self, params, content='<<', title=_('previous_results')): |
135 def previous_link(self, path, params, content='<<', title=_('previous_results')): |
124 start = self.starting_from |
136 start = self.starting_from |
125 if not start : |
137 if not start : |
126 return self.no_previous_page_link |
138 return self.no_previous_page_link |
127 start = max(0, start - self.page_size) |
139 start = max(0, start - self.page_size) |
128 stop = start + self.page_size - 1 |
140 stop = start + self.page_size - 1 |
129 url = self.build_url(**merge_dicts(params, {self.start_param : start, |
141 url = xml_escape(self.page_url(path, params, start, stop)) |
130 self.stop_param : stop,})) |
|
131 url = xml_escape(url) |
|
132 return self.previous_page_link_templ % (url, title, content) |
142 return self.previous_page_link_templ % (url, title, content) |
133 |
143 |
134 def next_link(self, params, content='>>', title=_('next_results')): |
144 def next_link(self, path, params, content='>>', title=_('next_results')): |
135 start = self.starting_from + self.page_size |
145 start = self.starting_from + self.page_size |
136 if start >= self.total: |
146 if start >= self.total: |
137 return self.no_next_page_link |
147 return self.no_next_page_link |
138 stop = start + self.page_size - 1 |
148 stop = start + self.page_size - 1 |
139 url = self.build_url(**merge_dicts(params, {self.start_param : start, |
149 url = xml_escape(self.page_url(path, params, start, stop)) |
140 self.stop_param : stop,})) |
|
141 url = xml_escape(url) |
|
142 return self.next_page_link_templ % (url, title, content) |
150 return self.next_page_link_templ % (url, title, content) |
143 |
151 |
144 |
152 |
145 class RelatedObjectsVComponent(EntityVComponent): |
153 class RelatedObjectsVComponent(EntityVComponent): |
146 """a section to display some related entities""" |
154 """a section to display some related entities""" |