23 from pyams_template.template import template_config |
23 from pyams_template.template import template_config |
24 from pyams_utils.adapter import ContextRequestAdapter |
24 from pyams_utils.adapter import ContextRequestAdapter |
25 from pyams_utils.url import absolute_url |
25 from pyams_utils.url import absolute_url |
26 from pyams_viewlet.viewlet import contentprovider_config, ViewContentProvider |
26 from pyams_viewlet.viewlet import contentprovider_config, ViewContentProvider |
27 from pyramid.location import lineage |
27 from pyramid.location import lineage |
28 from zope.interface import implementer |
28 from zope.interface import implementer, Interface |
29 from zope.schema.fieldproperty import FieldProperty |
29 from zope.schema.fieldproperty import FieldProperty |
30 |
30 |
31 |
31 |
32 @implementer(IBreadcrumbItem) |
32 @implementer(IBreadcrumbItem) |
33 class BreadcrumbItem(ContextRequestAdapter): |
33 class BreadcrumbItem(ContextRequestAdapter): |
40 @property |
40 @property |
41 def url(self): |
41 def url(self): |
42 return absolute_url(self.context, self.request, self.view_name) |
42 return absolute_url(self.context, self.request, self.view_name) |
43 |
43 |
44 |
44 |
45 @contentprovider_config(name='pyams.breadcrumbs', layer=IPyAMSLayer) |
45 @contentprovider_config(name='pyams.breadcrumbs', layer=IPyAMSLayer, view=Interface) |
46 @template_config(template='breadcrumbs.pt', layer=IPyAMSLayer) |
46 @template_config(template='breadcrumbs.pt', layer=IPyAMSLayer) |
47 class BreadcrumbsContentProvider(ViewContentProvider): |
47 class BreadcrumbsContentProvider(ViewContentProvider): |
48 """Breadcrumbs content provider""" |
48 """Breadcrumbs content provider""" |
49 |
49 |
50 @property |
50 @property |
51 def items(self): |
51 def items(self): |
52 result = [] |
|
53 registry = self.request.registry |
52 registry = self.request.registry |
54 for context in lineage(self.context): |
53 for context in reversed(tuple(lineage(self.context))): |
55 item = registry.queryMultiAdapter((context, self.request, self.view), IBreadcrumbItem) |
54 item = registry.queryMultiAdapter((context, self.request, self.view), IBreadcrumbItem) |
56 if item is None: |
55 if item is None: |
57 item = registry.queryMultiAdapter((context, self.request), IBreadcrumbItem) |
56 item = registry.queryMultiAdapter((context, self.request), IBreadcrumbItem) |
58 if item is None: |
57 if item is None: |
59 item = registry.queryAdapter(context, IBreadcrumbItem) |
58 item = registry.queryAdapter(context, IBreadcrumbItem) |
60 if item is not None: |
59 if item is not None: |
61 result.insert(0, item) |
60 yield item |
62 return result |
|