src/pyams_skin/viewlet/breadcrumb/__init__.py
changeset 399 33490fd30337
parent 205 538a8adb6d73
child 401 5220ef7b83d6
equal deleted inserted replaced
398:eb90b224add1 399:33490fd30337
    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