web/views/ibreadcrumbs.py
changeset 3090 8184bec7414d
parent 3035 2e4a381ea5b7
parent 3089 72c23fc7fe20
child 3185 bd0126d17e83
equal deleted inserted replaced
3087:dbbaa628f0f9 3090:8184bec7414d
    14 from cubicweb.selectors import (one_line_rset, implements, one_etype_rset,
    14 from cubicweb.selectors import (one_line_rset, implements, one_etype_rset,
    15                                 two_lines_rset, any_rset)
    15                                 two_lines_rset, any_rset)
    16 from cubicweb.view import EntityView, Component
    16 from cubicweb.view import EntityView, Component
    17 # don't use AnyEntity since this may cause bug with isinstance() due to reloading
    17 # don't use AnyEntity since this may cause bug with isinstance() due to reloading
    18 from cubicweb.entity import Entity
    18 from cubicweb.entity import Entity
    19 from cubicweb.common.uilib import cut
    19 from cubicweb.common import tags, uilib
    20 
    20 
    21 
       
    22 def bc_title(entity):
       
    23     textsize = entity.req.property_value('navigation.short-line-size')
       
    24     return xml_escape(cut(entity.dc_title(), textsize))
       
    25 
       
    26 # XXX only provides the component version
       
    27 
    21 
    28 class BreadCrumbEntityVComponent(Component):
    22 class BreadCrumbEntityVComponent(Component):
    29     id = 'breadcrumbs'
    23     id = 'breadcrumbs'
    30     __select__ = one_line_rset() & implements(IBreadCrumbs)
    24     __select__ = one_line_rset() & implements(IBreadCrumbs)
    31 
    25 
    36     title = _('contentnavigation_breadcrumbs')
    30     title = _('contentnavigation_breadcrumbs')
    37     help = _('contentnavigation_breadcrumbs_description')
    31     help = _('contentnavigation_breadcrumbs_description')
    38     separator = u' > '
    32     separator = u' > '
    39 
    33 
    40     def call(self, view=None, first_separator=True):
    34     def call(self, view=None, first_separator=True):
    41         entity = self.rset.get_entity(0,0)
    35         entity = self.rset.get_entity(0, 0)
    42         path = entity.breadcrumbs(view)
    36         path = entity.breadcrumbs(view)
    43         if path:
    37         if path:
    44             self.w(u'<span id="breadcrumbs" class="pathbar">')
    38             self.w(u'<span id="breadcrumbs" class="pathbar">')
    45             if first_separator:
    39             if first_separator:
    46                 self.w(self.separator)
    40                 self.w(self.separator)
    60             self.wpath_part(parent, contextentity, i == len(path) - 1)
    54             self.wpath_part(parent, contextentity, i == len(path) - 1)
    61 
    55 
    62     def wpath_part(self, part, contextentity, last=False):
    56     def wpath_part(self, part, contextentity, last=False):
    63         if isinstance(part, Entity):
    57         if isinstance(part, Entity):
    64             if last and part.eid == contextentity.eid:
    58             if last and part.eid == contextentity.eid:
    65                 self.w(bc_title(part))
    59                 part.view('breadcrumbtext', w=self.w)
    66             else:
    60             else:
    67                 part.view('breadcrumbs', w=self.w)
    61                 part.view('breadcrumbs', w=self.w)
    68         elif isinstance(part, tuple):
    62         elif isinstance(part, tuple):
    69             url, title = part
    63             url, title = part
    70             textsize = self.req.property_value('navigation.short-line-size')
    64             textsize = self.req.property_value('navigation.short-line-size')
    71             self.w(u'<a href="%s">%s</a>' % (
    65             self.w(u'<a href="%s">%s</a>' % (
    72                 xml_escape(url), xml_escape(cut(title, textsize))))
    66                 xml_escape(url), xml_escape(uilib.cut(title, textsize))))
    73         else:
    67         else:
    74             textsize = self.req.property_value('navigation.short-line-size')
    68             textsize = self.req.property_value('navigation.short-line-size')
    75             self.w(cut(unicode(part), textsize))
    69             self.w(uilib.cut(unicode(part), textsize))
    76 
    70 
    77 
    71 
    78 class BreadCrumbETypeVComponent(BreadCrumbEntityVComponent):
    72 class BreadCrumbETypeVComponent(BreadCrumbEntityVComponent):
    79     __select__ = two_lines_rset() & one_etype_rset() & implements(IBreadCrumbs)
    73     __select__ = two_lines_rset() & one_etype_rset() & implements(IBreadCrumbs)
    80 
    74 
   102 class BreadCrumbView(EntityView):
    96 class BreadCrumbView(EntityView):
   103     id = 'breadcrumbs'
    97     id = 'breadcrumbs'
   104 
    98 
   105     def cell_call(self, row, col):
    99     def cell_call(self, row, col):
   106         entity = self.rset.get_entity(row, col)
   100         entity = self.rset.get_entity(row, col)
   107         desc = xml_escape(cut(entity.dc_description(), 50))
   101         desc = xml_escape(uilib.cut(entity.dc_description(), 50))
   108         self.w(u'<a href="%s" title="%s">%s</a>' % (
   102         self.w(tags.a(entity.view('breadcrumbtext'), href=entity.absolute_url(),
   109             xml_escape(entity.absolute_url()), desc, bc_title(entity)))
   103                       title=desc))
       
   104 
       
   105 
       
   106 class BreadCrumbTextView(EntityView):
       
   107     id = 'breadcrumbtext'
       
   108 
       
   109     def cell_call(self, row, col):
       
   110         entity = self.rset.get_entity(row, col)
       
   111         textsize = self.req.property_value('navigation.short-line-size')
       
   112         self.w(uilib.cut(entity.dc_title(), textsize))