156 siderelations = [] |
156 siderelations = [] |
157 self.render_entity_title(entity) |
157 self.render_entity_title(entity) |
158 self.render_entity_metadata(entity) |
158 self.render_entity_metadata(entity) |
159 # entity's attributes and relations, excluding meta data |
159 # entity's attributes and relations, excluding meta data |
160 # if the entity isn't meta itself |
160 # if the entity isn't meta itself |
|
161 boxes = self._preinit_side_related(entity) or siderelations |
|
162 if boxes: |
|
163 self.w(u'<table width="100%"><tr><td width="75%">') |
161 self.w(u'<div>') |
164 self.w(u'<div>') |
162 self.w(u'<div class="mainInfo">') |
165 self.w(u'<div class="mainInfo">') |
163 self.render_entity_attributes(entity, siderelations) |
166 self.render_entity_attributes(entity, siderelations) |
164 self.w(u'</div>') |
167 self.w(u'</div>') |
165 self.content_navigation_components('navcontenttop') |
168 self.content_navigation_components('navcontenttop') |
166 if self.main_related_section: |
169 if self.main_related_section: |
167 self.render_entity_relations(entity, siderelations) |
170 self.render_entity_relations(entity, siderelations) |
168 self.w(u'</div>') |
171 self.w(u'</div>') |
169 # side boxes |
172 if boxes: |
170 self.w(u'<div class="primaryRight">') |
173 self.w(u'</td><td>') |
171 self.render_side_related(entity, siderelations) |
174 # side boxes |
172 self.w(u'</div>') |
175 self.w(u'<div class="primaryRight">') |
173 self.w(u'<div class="clear"></div>') |
176 self.render_side_related(entity, siderelations) |
|
177 self.w(u'</div>') |
|
178 self.w(u'</td></tr></table>') |
174 self.content_navigation_components('navcontentbottom') |
179 self.content_navigation_components('navcontentbottom') |
175 |
180 |
|
181 |
176 def content_navigation_components(self, context): |
182 def content_navigation_components(self, context): |
177 self.w(u'<div class="%s">' % context) |
183 self.w(u'<div class="%s">' % context) |
178 for comp in self.vreg.possible_vobjects('contentnavigation', |
184 for comp in self.vreg.possible_vobjects('contentnavigation', |
179 self.req, self.rset, row=self.row, |
185 self.req, self.rset, row=self.row, |
180 view=self, context=context): |
186 view=self, context=context): |
253 if self.is_side_related(rschema, eschema): |
259 if self.is_side_related(rschema, eschema): |
254 siderelations.append((rschema, related, x)) |
260 siderelations.append((rschema, related, x)) |
255 continue |
261 continue |
256 self._render_related_entities(entity, rschema, related, x) |
262 self._render_related_entities(entity, rschema, related, x) |
257 |
263 |
|
264 def _preinit_side_related(self, entity): |
|
265 self._sideboxes = None |
|
266 if hasattr(self, 'get_side_boxes_defs'): |
|
267 self._sideboxes = [(label, rset) for label, rset in self.get_side_boxes_defs(entity) |
|
268 if rset] |
|
269 self._boxes_in_context = list(self.vreg.possible_vobjects('boxes', self.req, self.rset, |
|
270 row=self.row, view=self, |
|
271 context='incontext')) |
|
272 return self._sideboxes or self._boxes_in_context |
|
273 |
|
274 |
258 def render_side_related(self, entity, siderelations): |
275 def render_side_related(self, entity, siderelations): |
259 """display side related relations: |
276 """display side related relations: |
260 non-meta in a first step, meta in a second step |
277 non-meta in a first step, meta in a second step |
261 """ |
278 """ |
262 if hasattr(self, 'get_side_boxes_defs'): |
279 if self._sideboxes: |
263 sideboxes = [(label, rset) for label, rset in self.get_side_boxes_defs(entity) |
280 for label, rset in self._sideboxes: |
264 if rset] |
281 self.w(u'<div class="sideRelated">') |
265 if sideboxes: |
282 self.wview('sidebox', rset, title=label) |
266 for label, rset in sideboxes: |
283 self.w(u'</div>') |
267 self.w(u'<div class="sideRelated">') |
|
268 self.wview('sidebox', rset, title=label) |
|
269 self.w(u'</div>') |
|
270 elif siderelations: |
284 elif siderelations: |
271 self.w(u'<div class="sideRelated">') |
285 self.w(u'<div class="sideRelated">') |
272 for relatedinfos in siderelations: |
286 for relatedinfos in siderelations: |
273 # if not relatedinfos[0].meta: |
287 # if not relatedinfos[0].meta: |
274 # continue |
288 # continue |
275 self._render_related_entities(entity, *relatedinfos) |
289 self._render_related_entities(entity, *relatedinfos) |
276 self.w(u'</div>') |
290 self.w(u'</div>') |
277 boxes = list(self.vreg.possible_vobjects('boxes', self.req, self.rset, |
291 |
278 row=self.row, view=self, |
292 if self._boxes_in_context: |
279 context='incontext')) |
293 for box in self._boxes_in_context: |
280 if boxes: |
|
281 for box in boxes: |
|
282 try: |
294 try: |
283 box.dispatch(w=self.w, row=self.row) |
295 box.dispatch(w=self.w, row=self.row) |
284 except NotImplementedError: |
296 except NotImplementedError: |
285 # much probably a context insensitive box, which only implements |
297 # much probably a context insensitive box, which only implements |
286 # .call() and not cell_call() |
298 # .call() and not cell_call() |