web/component.py
branchstable
changeset 6777 1d423b7aa6c9
parent 6743 d2d7a5d9164d
child 6800 3f3d576b87d9
equal deleted inserted replaced
6776:eebe86b89285 6777:1d423b7aa6c9
   332 
   332 
   333 
   333 
   334 # high level abstract classes ##################################################
   334 # high level abstract classes ##################################################
   335 
   335 
   336 class RQLCtxComponent(CtxComponent):
   336 class RQLCtxComponent(CtxComponent):
   337     """abstract box for boxes displaying the content of a rql query not
   337     """abstract box for boxes displaying the content of a rql query not related
   338     related to the current result set.
   338     to the current result set.
       
   339 
       
   340     Notice that this class's init_rendering implemention is overwriting context
       
   341     result set (eg `cw_rset`) with the result set returned by execution of
       
   342     `to_display_rql()`.
   339     """
   343     """
   340     rql  = None
   344     rql = None
   341 
   345 
   342     def to_display_rql(self):
   346     def to_display_rql(self):
       
   347         """return arguments to give to self._cw.execute, as a tuple, to build
       
   348         the result set to be displayed by this box.
       
   349         """
   343         assert self.rql is not None, self.__regid__
   350         assert self.rql is not None, self.__regid__
   344         return (self.rql,)
   351         return (self.rql,)
   345 
   352 
   346     def init_rendering(self):
   353     def init_rendering(self):
   347         rset = self._cw.execute(*self.to_display_rql())
   354         super(RQLCtxComponent, self).init_rendering()
   348         if not rset:
   355         self.cw_rset = self._cw.execute(*self.to_display_rql())
       
   356         if not self.cw_rset:
   349             raise EmptyComponent()
   357             raise EmptyComponent()
       
   358 
       
   359     def render_body(self, w):
       
   360         rset = self.cw_rset
   350         if len(rset[0]) == 2:
   361         if len(rset[0]) == 2:
   351             self.items = []
   362             items = []
   352             for i, (eid, label) in enumerate(rset):
   363             for i, (eid, label) in enumerate(rset):
   353                 entity = rset.get_entity(i, 0)
   364                 entity = rset.get_entity(i, 0)
   354                 self.items.append(self.build_link(label, entity.absolute_url()))
   365                 items.append(self.build_link(label, entity.absolute_url()))
   355         else:
   366         else:
   356             self.items = [self.build_link(e.dc_title(), e.absolute_url())
   367             items = [self.build_link(e.dc_title(), e.absolute_url())
   357                           for e in rset.entities()]
   368                      for e in rset.entities()]
   358 
   369         self.render_items(w, items)
   359     def render_body(self, w):
       
   360         self.render_items(w)
       
   361 
   370 
   362 
   371 
   363 class EditRelationMixIn(ReloadableMixIn):
   372 class EditRelationMixIn(ReloadableMixIn):
   364     def box_item(self, entity, etarget, rql, label):
   373     def box_item(self, entity, etarget, rql, label):
   365         """builds HTML link to edit relation between `entity` and `etarget`"""
   374         """builds HTML link to edit relation between `entity` and `etarget`"""