# HG changeset patch # User Thierry Florac # Date 1453138615 -3600 # Node ID 12d6e8ef52840b739e71e15fdb68f3801b5c762e # Parent e49d9bb000aec5ef6cc49c838e84e308ad78e57d Added breadcrumbs management interface and viewlet diff -r e49d9bb000ae -r 12d6e8ef5284 src/pyams_skin/interfaces/viewlet.py --- a/src/pyams_skin/interfaces/viewlet.py Mon Jan 04 13:30:37 2016 +0100 +++ b/src/pyams_skin/interfaces/viewlet.py Mon Jan 18 18:36:55 2016 +0100 @@ -18,7 +18,7 @@ from pyams_viewlet.interfaces import IViewlet, IViewletManager # import packages -from zope.interface import Interface +from zope.interface import Interface, Attribute from zope.schema import Text, TextLine, List, Object, Dict, Bool from pyams_skin import _ @@ -140,7 +140,11 @@ # class IMainMenusViewletManager(IViewletManager): - """Main menu viewlet manager""" + """Main menus viewlet manager""" + + +class IUserMenusViewletManager(IViewletManager): + """User menus viewlet manager""" class IMenu(IViewlet): @@ -209,6 +213,23 @@ # +# Breadcrumbs interfaces +# + +class IBreadcrumbItem(Interface): + """Breadcrumb item interface""" + + label = TextLine(title="Item label") + + view_name = TextLine(title="Link view name", + default='admin.html') + + css_class = TextLine(title="CSS class") + + url = Attribute("Link absolute target URL") + + +# # Extensions viewlet manager # diff -r e49d9bb000ae -r 12d6e8ef5284 src/pyams_skin/viewlet/breadcrumb/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pyams_skin/viewlet/breadcrumb/__init__.py Mon Jan 18 18:36:55 2016 +0100 @@ -0,0 +1,62 @@ +# +# Copyright (c) 2008-2015 Thierry Florac +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# + +__docformat__ = 'restructuredtext' + + +# import standard library + +# import interfaces +from pyams_skin.interfaces.viewlet import IBreadcrumbItem +from pyams_skin.layer import IPyAMSLayer + +# import packages +from pyams_template.template import template_config +from pyams_utils.adapter import ContextRequestAdapter +from pyams_utils.url import absolute_url +from pyams_viewlet.viewlet import contentprovider_config, ContentProvider +from pyramid.location import lineage +from zope.interface import implementer +from zope.schema.fieldproperty import FieldProperty + + +@implementer(IBreadcrumbItem) +class BreadcrumbItem(ContextRequestAdapter): + """Breadcrumb item""" + + label = FieldProperty(IBreadcrumbItem['label']) + css_class = FieldProperty(IBreadcrumbItem['css_class']) + view_name = FieldProperty(IBreadcrumbItem['view_name']) + + @property + def url(self): + return absolute_url(self.context, self.request, self.view_name) + + +@contentprovider_config(name='pyams.breadcrumbs', layer=IPyAMSLayer) +@template_config(template='breadcrumbs.pt', layer=IPyAMSLayer) +class BreadcrumbsContentProvider(ContentProvider): + """Breadcrumbs content provider""" + + @property + def items(self): + result = [] + registry = self.request.registry + for context in lineage(self.context): + item = registry.queryMultiAdapter((context, self.request, self.view), IBreadcrumbItem) + if item is None: + item = registry.queryMultiAdapter((context, self.request), IBreadcrumbItem) + if item is None: + item = registry.queryAdapter(context, IBreadcrumbItem) + if item is not None: + result.insert(0, item) + return result diff -r e49d9bb000ae -r 12d6e8ef5284 src/pyams_skin/viewlet/breadcrumb/breadcrumbs.pt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pyams_skin/viewlet/breadcrumb/breadcrumbs.pt Mon Jan 18 18:36:55 2016 +0100 @@ -0,0 +1,5 @@ +
  • + Label +