web/component.py
changeset 9821 2077c8da1893
parent 9784 790956c311ef
child 9914 30b56a56c1f4
equal deleted inserted replaced
9819:95902c0b991b 9821:2077c8da1893
     1 # copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     1 # copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     3 #
     3 #
     4 # This file is part of CubicWeb.
     4 # This file is part of CubicWeb.
     5 #
     5 #
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
   446     @property
   446     @property
   447     def domid(self):
   447     def domid(self):
   448         return domid(self.__regid__) + unicode(self.entity.eid)
   448         return domid(self.__regid__) + unicode(self.entity.eid)
   449 
   449 
   450     def lazy_view_holder(self, w, entity, oid, registry='views'):
   450     def lazy_view_holder(self, w, entity, oid, registry='views'):
   451         """add a holder and return an url that may be used to replace this
   451         """add a holder and return a URL that may be used to replace this
   452         holder by the html generate by the view specified by registry and
   452         holder by the html generate by the view specified by registry and
   453         identifier. Registry defaults to 'views'.
   453         identifier. Registry defaults to 'views'.
   454         """
   454         """
   455         holderid = '%sHolder' % self.domid
   455         holderid = '%sHolder' % self.domid
   456         w(u'<div id="%s"></div>' % holderid)
   456         w(u'<div id="%s"></div>' % holderid)
   506                      for e in rset.entities()]
   506                      for e in rset.entities()]
   507         self.render_items(w, items)
   507         self.render_items(w, items)
   508 
   508 
   509 
   509 
   510 class EditRelationMixIn(ReloadableMixIn):
   510 class EditRelationMixIn(ReloadableMixIn):
   511     def box_item(self, entity, etarget, rql, label):
   511 
       
   512     def box_item(self, entity, etarget, fname, label):
   512         """builds HTML link to edit relation between `entity` and `etarget`"""
   513         """builds HTML link to edit relation between `entity` and `etarget`"""
   513         args = {role(self)[0] : entity.eid, target(self)[0] : etarget.eid}
   514         args = {role(self) : entity.eid, target(self): etarget.eid}
   514         url = self._cw.user_rql_callback((rql, args))
       
   515         # for each target, provide a link to edit the relation
   515         # for each target, provide a link to edit the relation
   516         return u'[<a href="%s" class="action">%s</a>] %s' % (
   516         jscall = unicode(js.cw.utils.callAddOrDeleteThenReload(fname,
   517             xml_escape(url), label, etarget.view('incontext'))
   517                                                                self.rtype,
       
   518                                                                args['subject'],
       
   519                                                                args['object']))
       
   520         return u'[<a href="javascript: %s" class="action">%s</a>] %s' % (
       
   521             xml_escape(jscall), label, etarget.view('incontext'))
   518 
   522 
   519     def related_boxitems(self, entity):
   523     def related_boxitems(self, entity):
   520         rql = 'DELETE S %s O WHERE S eid %%(s)s, O eid %%(o)s' % self.rtype
   524         return [self.box_item(entity, etarget, 'delete_relation', u'-')
   521         return [self.box_item(entity, etarget, rql, u'-')
       
   522                 for etarget in self.related_entities(entity)]
   525                 for etarget in self.related_entities(entity)]
   523 
   526 
   524     def related_entities(self, entity):
   527     def related_entities(self, entity):
   525         return entity.related(self.rtype, role(self), entities=True)
   528         return entity.related(self.rtype, role(self), entities=True)
   526 
   529 
   527     def unrelated_boxitems(self, entity):
   530     def unrelated_boxitems(self, entity):
   528         rql = 'SET S %s O WHERE S eid %%(s)s, O eid %%(o)s' % self.rtype
   531         return [self.box_item(entity, etarget, 'add_relation', u'+')
   529         return [self.box_item(entity, etarget, rql, u'+')
       
   530                 for etarget in self.unrelated_entities(entity)]
   532                 for etarget in self.unrelated_entities(entity)]
   531 
   533 
   532     def unrelated_entities(self, entity):
   534     def unrelated_entities(self, entity):
   533         """returns the list of unrelated entities, using the entity's
   535         """returns the list of unrelated entities, using the entity's
   534         appropriate vocabulary function
   536         appropriate vocabulary function