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)) |