web/views/baseviews.py
changeset 1590 7f523ae475d2
parent 1589 496fdc081e25
parent 1413 ad19d7e6a291
child 1598 8f400d5f6742
equal deleted inserted replaced
1589:496fdc081e25 1590:7f523ae475d2
   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()