equal
deleted
inserted
replaced
21 |
21 |
22 |
22 |
23 from cubicweb import _ |
23 from cubicweb import _ |
24 |
24 |
25 from warnings import warn |
25 from warnings import warn |
26 |
|
27 from six import PY3, add_metaclass, text_type |
|
28 |
26 |
29 from logilab.common.deprecation import class_deprecated, class_renamed, deprecated |
27 from logilab.common.deprecation import class_deprecated, class_renamed, deprecated |
30 from logilab.mtconverter import xml_escape |
28 from logilab.mtconverter import xml_escape |
31 |
29 |
32 from cubicweb import Unauthorized, role, target, tags |
30 from cubicweb import Unauthorized, role, target, tags |
237 def __init__(self, href, label, **attrs): |
235 def __init__(self, href, label, **attrs): |
238 self.href = href |
236 self.href = href |
239 self.label = label |
237 self.label = label |
240 self.attrs = attrs |
238 self.attrs = attrs |
241 |
239 |
242 def __unicode__(self): |
240 def __str__(self): |
243 return tags.a(self.label, href=self.href, **self.attrs) |
241 return tags.a(self.label, href=self.href, **self.attrs) |
244 |
|
245 if PY3: |
|
246 __str__ = __unicode__ |
|
247 |
242 |
248 def render(self, w): |
243 def render(self, w): |
249 w(tags.a(self.label, href=self.href, **self.attrs)) |
244 w(tags.a(self.label, href=self.href, **self.attrs)) |
250 |
245 |
251 def __repr__(self): |
246 def __repr__(self): |
453 args['entity'] = self.entity |
448 args['entity'] = self.entity |
454 return args |
449 return args |
455 |
450 |
456 @property |
451 @property |
457 def domid(self): |
452 def domid(self): |
458 return domid(self.__regid__) + text_type(self.entity.eid) |
453 return domid(self.__regid__) + str(self.entity.eid) |
459 |
454 |
460 def lazy_view_holder(self, w, entity, oid, registry='views'): |
455 def lazy_view_holder(self, w, entity, oid, registry='views'): |
461 """add a holder and return a URL that may be used to replace this |
456 """add a holder and return a URL that may be used to replace this |
462 holder by the html generate by the view specified by registry and |
457 holder by the html generate by the view specified by registry and |
463 identifier. Registry defaults to 'views'. |
458 identifier. Registry defaults to 'views'. |
526 jscall = js.cw.utils.callAjaxFuncThenReload(fname, |
521 jscall = js.cw.utils.callAjaxFuncThenReload(fname, |
527 self.rtype, |
522 self.rtype, |
528 args['subject'], |
523 args['subject'], |
529 args['object']) |
524 args['object']) |
530 return u'[<a href="javascript: %s" class="action">%s</a>] %s' % ( |
525 return u'[<a href="javascript: %s" class="action">%s</a>] %s' % ( |
531 xml_escape(text_type(jscall)), label, etarget.view('incontext')) |
526 xml_escape(str(jscall)), label, etarget.view('incontext')) |
532 |
527 |
533 def related_boxitems(self, entity): |
528 def related_boxitems(self, entity): |
534 return [self.box_item(entity, etarget, 'delete_relation', u'-') |
529 return [self.box_item(entity, etarget, 'delete_relation', u'-') |
535 for etarget in self.related_entities(entity)] |
530 for etarget in self.related_entities(entity)] |
536 |
531 |
543 |
538 |
544 def unrelated_entities(self, entity): |
539 def unrelated_entities(self, entity): |
545 """returns the list of unrelated entities, using the entity's |
540 """returns the list of unrelated entities, using the entity's |
546 appropriate vocabulary function |
541 appropriate vocabulary function |
547 """ |
542 """ |
548 skip = set(text_type(e.eid) for e in entity.related(self.rtype, role(self), |
543 skip = set(str(e.eid) for e in entity.related(self.rtype, role(self), |
549 entities=True)) |
544 entities=True)) |
550 skip.add(None) |
545 skip.add(None) |
551 skip.add(INTERNAL_FIELD_VALUE) |
546 skip.add(INTERNAL_FIELD_VALUE) |
552 filteretype = getattr(self, 'etype', None) |
547 filteretype = getattr(self, 'etype', None) |
553 entities = [] |
548 entities = [] |
661 # for each related entity, provide a link to remove the relation |
656 # for each related entity, provide a link to remove the relation |
662 subview = rentity.view(self.item_vid) |
657 subview = rentity.view(self.item_vid) |
663 if maydel: |
658 if maydel: |
664 if not js_css_added: |
659 if not js_css_added: |
665 js_css_added = self.add_js_css() |
660 js_css_added = self.add_js_css() |
666 jscall = text_type(js.ajaxBoxRemoveLinkedEntity( |
661 jscall = str(js.ajaxBoxRemoveLinkedEntity( |
667 self.__regid__, entity.eid, rentity.eid, |
662 self.__regid__, entity.eid, rentity.eid, |
668 self.fname_remove, |
663 self.fname_remove, |
669 self.removed_msg and _(self.removed_msg))) |
664 self.removed_msg and _(self.removed_msg))) |
670 w(u'<tr><td class="dellink">[<a href="javascript: %s">-</a>]</td>' |
665 w(u'<tr><td class="dellink">[<a href="javascript: %s">-</a>]</td>' |
671 '<td class="entity"> %s</td></tr>' % (xml_escape(jscall), |
666 '<td class="entity"> %s</td></tr>' % (xml_escape(jscall), |
676 else: |
671 else: |
677 w(_('no related entity')) |
672 w(_('no related entity')) |
678 if mayadd: |
673 if mayadd: |
679 multiple = self.rdef.role_cardinality(self.role) in '*+' |
674 multiple = self.rdef.role_cardinality(self.role) in '*+' |
680 w(u'<table><tr><td>') |
675 w(u'<table><tr><td>') |
681 jscall = text_type(js.ajaxBoxShowSelector( |
676 jscall = str(js.ajaxBoxShowSelector( |
682 self.__regid__, entity.eid, self.fname_vocabulary, |
677 self.__regid__, entity.eid, self.fname_vocabulary, |
683 self.fname_validate, self.added_msg and _(self.added_msg), |
678 self.fname_validate, self.added_msg and _(self.added_msg), |
684 _(stdmsgs.BUTTON_OK[0]), _(stdmsgs.BUTTON_CANCEL[0]), |
679 _(stdmsgs.BUTTON_OK[0]), _(stdmsgs.BUTTON_CANCEL[0]), |
685 multiple and self.separator)) |
680 multiple and self.separator)) |
686 w('<a class="button sglink" href="javascript: %s">%s</a>' % ( |
681 w('<a class="button sglink" href="javascript: %s">%s</a>' % ( |
705 self._cw.view(self.vid, rset, w=w) |
700 self._cw.view(self.vid, rset, w=w) |
706 |
701 |
707 |
702 |
708 # old contextual components, deprecated ######################################## |
703 # old contextual components, deprecated ######################################## |
709 |
704 |
710 @add_metaclass(class_deprecated) |
705 class EntityVComponent(Component, metaclass=class_deprecated): |
711 class EntityVComponent(Component): |
|
712 """abstract base class for additinal components displayed in content |
706 """abstract base class for additinal components displayed in content |
713 headers and footer according to: |
707 headers and footer according to: |
714 |
708 |
715 * the displayed entity's type |
709 * the displayed entity's type |
716 * a context (currently 'header' or 'footer') |
710 * a context (currently 'header' or 'footer') |