[Checkins] SVN: z3c.menu.ready2go/trunk/ Added interface for menu
manager and item
Roger Ineichen
roger at projekt01.ch
Fri Dec 28 21:49:28 EST 2007
Log message for revision 82531:
Added interface for menu manager and item
Added unit tests for menu manager and item
Changed:
U z3c.menu.ready2go/trunk/CHANGES.txt
U z3c.menu.ready2go/trunk/buildout.cfg
_U z3c.menu.ready2go/trunk/externals/
U z3c.menu.ready2go/trunk/setup.py
A z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/interfaces.py
U z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/item.pt
U z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/item.py
U z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/manager.py
A z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py
-=-
Modified: z3c.menu.ready2go/trunk/CHANGES.txt
===================================================================
--- z3c.menu.ready2go/trunk/CHANGES.txt 2007-12-29 02:09:18 UTC (rev 82530)
+++ z3c.menu.ready2go/trunk/CHANGES.txt 2007-12-29 02:49:28 UTC (rev 82531)
@@ -2,7 +2,7 @@
CHANGES
=======
-Version 0.5.0 (unreleased)
---------------------------
+Version 0.5.0dev (unreleased)
+-----------------------------
- Initial Release
Modified: z3c.menu.ready2go/trunk/buildout.cfg
===================================================================
--- z3c.menu.ready2go/trunk/buildout.cfg 2007-12-29 02:09:18 UTC (rev 82530)
+++ z3c.menu.ready2go/trunk/buildout.cfg 2007-12-29 02:49:28 UTC (rev 82531)
@@ -1,7 +1,16 @@
[buildout]
develop = .
-parts = test
+ externals/zope.viewlet
+parts = test checker coverage
[test]
recipe = zc.recipe.testrunner
eggs = z3c.menu.ready2go [test]
+
+[checker]
+recipe = lovely.recipe:importchecker
+path = src/z3c/menu/ready2go
+
+[coverage]
+recipe = zc.recipe.egg
+eggs = z3c.coverage
Property changes on: z3c.menu.ready2go/trunk/externals
___________________________________________________________________
Name: svn:externals
+ zope.viewlet svn://svn.zope.org/repos/main/zope.viewlet/trunk
Modified: z3c.menu.ready2go/trunk/setup.py
===================================================================
--- z3c.menu.ready2go/trunk/setup.py 2007-12-29 02:09:18 UTC (rev 82530)
+++ z3c.menu.ready2go/trunk/setup.py 2007-12-29 02:49:28 UTC (rev 82531)
@@ -23,7 +23,7 @@
setup (
name='z3c.menu.ready2go',
- version='0.5.0',
+ version='0.5.0dev',
author = "Stephan Richter, Roger Ineichen and the Zope Community",
author_email = "zope3-dev at zope.org",
description = "A ready to go menu for Zope3",
@@ -52,18 +52,19 @@
extras_require = dict(
test = [
'zope.testbrowser',
- 'zope.app.securitypolicy',
+ 'zope.component',
'zope.app.testing',
- 'zope.app.zcmlfiles',
- 'zope.app.twisted',
+ 'z3c.testing',
],
),
install_requires = [
'setuptools',
- 'zope.configuration',
+ 'z3c.i18n',
+ 'zope.app.component',
+ 'zope.app.pagetemplate',
+ 'zope.schema',
'zope.traversing',
- 'zope.app.http',
- 'zope.app.publisher',
+ 'zope.viewlet',
],
zip_safe = False,
)
\ No newline at end of file
Added: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/interfaces.py
===================================================================
--- z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/interfaces.py (rev 0)
+++ z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/interfaces.py 2007-12-29 02:49:28 UTC (rev 82531)
@@ -0,0 +1,118 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# 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.
+#
+##############################################################################
+"""
+$Id: layer.py 197 2007-04-13 05:03:32Z rineichen $
+"""
+
+import zope.schema
+from zope.viewlet import interfaces
+
+from z3c.i18n import MessageFactory as _
+
+
+class IMenuManager(interfaces.IViewletManager):
+ """Generic nenu manager."""
+
+ def render():
+ """Represent the menu"""
+
+
+class IMenuItem(interfaces.IViewlet):
+ """Menu item base."""
+
+ template = zope.interface.Attribute("""Page template""")
+
+ contextInterface = zope.interface.Attribute(
+ """Context discriminator interface""")
+
+ viewInterface = zope.interface.Attribute(
+ """View discriminator interface""")
+
+ title = zope.schema.TextLine(
+ title=_('Title'),
+ description=_('Menu item title'),
+ default=u''
+ )
+
+ viewName = zope.schema.TextLine(
+ title=_('View name'),
+ description=_('Name of the view which the menu points to.'),
+ default=u''
+ )
+
+ weight = zope.schema.TextLine(
+ title=_('Weight'),
+ description=_('Weight of the menu item order.'),
+ default=u''
+ )
+
+ cssActive = zope.schema.TextLine(
+ title=_('Active CSS class name'),
+ description=_('CSS class name for active menu items'),
+ default=u''
+ )
+
+ cssInActive = zope.schema.TextLine(
+ title=_('In-Active CSS class name'),
+ description=_('CSS class name for inactive menu items'),
+ default=u''
+ )
+
+ css = zope.schema.TextLine(
+ title=_('CSS class name'),
+ description=_('CSS class name'),
+ default=u''
+ )
+
+ available = zope.schema.Bool(
+ title=_('Available'),
+ description=_('Marker for available menu item'),
+ default=True
+ )
+
+ selected = zope.schema.Bool(
+ title=_('Selected'),
+ description=_('Marker for selected menu item'),
+ default=False
+ )
+
+ url = zope.schema.TextLine(
+ title=_('URL'),
+ description=_('URL or other url like javascript function.'),
+ default=u''
+ )
+
+ subProviderName = zope.schema.TextLine(
+ title=_('Sub menu provider name'),
+ description=_('Name of the sub menu provider.'),
+ default=u''
+ )
+
+ def getURLContext():
+ """Returns the context the base url."""
+
+ def render():
+ """Return the template with the option 'menus'"""
+
+
+class IGlobalMenuItem(IMenuItem):
+ """Menu item with nearest site as url base."""
+
+
+class IContextMenuItem(IMenuItem):
+ """Menu item with context as url base."""
+
+
+class IAddMenuItem(IMenuItem):
+ """Add menu item with context as url base."""
Property changes on: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/interfaces.py
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/item.pt
===================================================================
--- z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/item.pt 2007-12-29 02:09:18 UTC (rev 82530)
+++ z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/item.pt 2007-12-29 02:49:28 UTC (rev 82531)
@@ -1,5 +1,8 @@
<li class="current"
- tal:attributes="class view/css">
+ tal:attributes="class view/css"
+ tal:define="subProviderName view/subProviderName">
<a href="#"
tal:attributes="href view/url"><span i18n:translate="" tal:content="view/title">Title</span></a>
+ <tal:block condition="subProviderName"
+ replace="structure provider:${subProviderName}">sub menu items</tal:block>
</li>
Modified: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/item.py
===================================================================
--- z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/item.py 2007-12-29 02:09:18 UTC (rev 82530)
+++ z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/item.py 2007-12-29 02:49:28 UTC (rev 82531)
@@ -22,7 +22,9 @@
from zope.app.component import hooks
from zope.app.pagetemplate import ViewPageTemplateFile
+from z3c.menu.ready2go import interfaces
+
# base menu item mixin
class MenuItem(viewlet.ViewletBase):
"""Menu item base."""
@@ -36,6 +38,7 @@
cssActive = u'selected'
cssInActive = u''
weight = 0
+ subMenuProviderName = None
# override it and use i18n msg ids
@property
@@ -43,13 +46,6 @@
return self.__name__
@property
- def available(self):
- return True
-
- def getURLContext(self):
- return hooks.getSite()
-
- @property
def css(self):
if self.selected:
return self.cssActive
@@ -73,6 +69,14 @@
context = self.getURLContext()
return absoluteURL(context, self.request) + '/' + self.viewName
+ @property
+ def subProviderName(self):
+ """Name of the sub item menu provider."""
+ return self.subMenuProviderName
+
+ def getURLContext(self):
+ return hooks.getSite()
+
def render(self):
"""Return the template with the option 'menus'"""
return self.template()
@@ -84,6 +88,8 @@
class GlobalMenuItem(MenuItem):
"""Global menu item."""
+ zope.interface.implements(interfaces.IGlobalMenuItem)
+
@property
def selected(self):
if self.viewInterface.providedBy(self.__parent__) and \
@@ -98,5 +104,24 @@
class ContextMenuItem(MenuItem):
"""Context menu item."""
+ zope.interface.implements(interfaces.IContextMenuItem)
+
def getURLContext(self):
return self.context
+
+
+class AddMenuItem(MenuItem):
+ """Add menu item."""
+
+ zope.interface.implements(interfaces.IAddMenuItem)
+
+ @property
+ def selected(self):
+ return False
+
+ @property
+ def subProviderName(self):
+ return None
+
+ def getURLContext(self):
+ return self.context
Modified: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/manager.py
===================================================================
--- z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/manager.py 2007-12-29 02:09:18 UTC (rev 82530)
+++ z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/manager.py 2007-12-29 02:49:28 UTC (rev 82531)
@@ -17,39 +17,12 @@
__docformat__ = "reStructuredText"
import zope.interface
-import zope.security
-from zope.traversing.browser import absoluteURL
from zope.viewlet import manager
-from zope.app.component import hooks
-from zope.app.pagetemplate import ViewPageTemplateFile
+from z3c.menu.ready2go import interfaces
-def getWeight((name, viewlet)):
- try:
- return int(viewlet.weight)
- except AttributeError:
- return 0
-
-# base menu manager mixin
-class MenuManager(manager.ViewletManagerBase):
+class MenuManager(manager.ConditionalViewletManager):
"""Menu manager for all kind of menu items"""
- def sort(self, viewlets):
- return sorted(viewlets, key=getWeight)
-
- def filter(self, viewlets):
- """Filter available menu items."""
- # Only return viewlets accessible to the principal
- return [(name, viewlet) for name, viewlet in viewlets
- if zope.security.canAccess(viewlet, 'render') and
- viewlet.available == True]
-
- def render(self):
- """Return the template whihc renders the menu items."""
- if not self.viewlets:
- return u''
- return self.template()
-
- def __repr__(self):
- return '<%s %r>' % (self.__class__.__name__, self.__name__)
+ zope.interface.implements(interfaces.IMenuManager)
Added: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py
===================================================================
--- z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py (rev 0)
+++ z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py 2007-12-29 02:49:28 UTC (rev 82531)
@@ -0,0 +1,100 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# 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.
+#
+##############################################################################
+"""
+$Id: __init__.py 97 2007-03-29 22:58:27Z rineichen $
+"""
+
+import unittest
+import zope.component
+from zope.traversing.browser.interfaces import IAbsoluteURL
+from zope.app.component import hooks
+from zope.app.testing import setup
+
+import z3c.testing
+from z3c.menu.ready2go import interfaces
+from z3c.menu.ready2go import item
+from z3c.menu.ready2go import manager
+
+
+class ParentStub(object):
+ """Just an object supporting a context attribtute."""
+
+ context = None
+ __name__ = None
+
+
+class AbsoulteURLStub(object):
+ """Absolute url stub."""
+
+ def __init__(self, context, request):
+ pass
+
+ def __str__(self):
+ return u'here'
+
+ __call__ = __str__
+
+
+class MenuManagerTest(z3c.testing.InterfaceBaseTest):
+
+ def getTestInterface(self):
+ return interfaces.IMenuManager
+
+ def getTestClass(self):
+ return manager.MenuManager
+
+ def getTestPos(self):
+ return (None, None, None)
+
+
+class GlobalMenuItemTest(z3c.testing.InterfaceBaseTest):
+
+ def setUp(self):
+ site = setup.placefulSetUp(site=True)
+ hooks.setSite(site)
+ zope.component.provideAdapter(AbsoulteURLStub, (None, None),
+ IAbsoluteURL)
+ super(GlobalMenuItemTest, self).setUp()
+
+ def getTestInterface(self):
+ return interfaces.IGlobalMenuItem
+
+ def getTestClass(self):
+ return item.GlobalMenuItem
+
+ def getTestPos(self):
+ return (None, None, ParentStub(), None)
+
+
+class ContextMenuItemTest(z3c.testing.InterfaceBaseTest):
+
+ def getTestInterface(self):
+ return interfaces.IContextMenuItem
+
+ def getTestClass(self):
+ return item.ContextMenuItem
+
+ def getTestPos(self):
+ return (None, None, ParentStub(), None)
+
+
+def test_suite():
+ return unittest.TestSuite((
+ unittest.makeSuite(MenuManagerTest),
+ unittest.makeSuite(GlobalMenuItemTest),
+ unittest.makeSuite(ContextMenuItemTest),
+ ))
+
+if __name__ == '__main__':
+ unittest.main(defaultTest='test_suite')
Property changes on: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Checkins
mailing list