web/component.py
changeset 9784 790956c311ef
parent 9700 da7d341cca76
child 9914 30b56a56c1f4
equal deleted inserted replaced
9783:59c582ce68c8 9784:790956c311ef
     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
   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