[Checkins] SVN: five.megrok.menu/trunk/ Add context and action parameters for menuitems
Martin Peeters
martin at affinitic.be
Tue May 31 09:41:44 EDT 2011
Log message for revision 121849:
Add context and action parameters for menuitems
Changed:
U five.megrok.menu/trunk/docs/HISTORY.txt
U five.megrok.menu/trunk/five/megrok/menu/component.py
U five.megrok.menu/trunk/five/megrok/menu/grokker.py
U five.megrok.menu/trunk/five/megrok/menu/tests/menus/menus.py
-=-
Modified: five.megrok.menu/trunk/docs/HISTORY.txt
===================================================================
--- five.megrok.menu/trunk/docs/HISTORY.txt 2011-05-31 13:25:19 UTC (rev 121848)
+++ five.megrok.menu/trunk/docs/HISTORY.txt 2011-05-31 13:41:44 UTC (rev 121849)
@@ -4,7 +4,7 @@
0.2 (unreleased)
----------------
-- Nothing changed yet.
+- Add context and action parameters for menuitems.
0.1 (2009-05-28)
Modified: five.megrok.menu/trunk/five/megrok/menu/component.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/component.py 2011-05-31 13:25:19 UTC (rev 121848)
+++ five.megrok.menu/trunk/five/megrok/menu/component.py 2011-05-31 13:41:44 UTC (rev 121849)
@@ -24,11 +24,12 @@
scope = martian.CLASS
store = martian.ONCE
- def factory(self, menu, icon=None, filter=None, order=0, extra=None):
+ def factory(self, menu, icon=None, filter=None, order=0, extra=None,\
+ action=None, context=None):
if martian.util.check_subclass(menu, Menu):
menu = grokcore.component.name.bind().get(menu)
if martian.util.not_unicode_or_ascii(menu):
raise GrokImportError(
"You can only pass unicode, ASCII, or a subclass "
"of megrok.menu.Menu to the '%s' directive." % self.name)
- return (menu, icon, filter, order, extra)
+ return (menu, icon, filter, order, extra, action, context)
Modified: five.megrok.menu/trunk/five/megrok/menu/grokker.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/grokker.py 2011-05-31 13:25:19 UTC (rev 121848)
+++ five.megrok.menu/trunk/five/megrok/menu/grokker.py 2011-05-31 13:41:44 UTC (rev 121849)
@@ -61,8 +61,8 @@
menu_id, icon, filter, order, extra = menuitem
try:
- menu = config.resolve('zope.app.menus.'+menu_id)
- except ConfigurationError, v:
+ menu = config.resolve('zope.app.menus.%s' % menu_id)
+ except ConfigurationError:
raise GrokError("The %r menu could not be found. Please use "
"megrok.menu.Menu to register a menu first."
% menu_id, factory)
@@ -90,18 +90,24 @@
title=u''):
if menuitem is None:
return False
- menu_id, icon, filter, order, extra = menuitem
+ menu_id, icon, filter, order, extra, action, menuContext = menuitem
try:
- menu = config.resolve('zope.app.menus.'+menu_id)
- except ConfigurationError, v:
+ menu = config.resolve('zope.app.menus.%s' % menu_id)
+ except ConfigurationError:
raise GrokError("The %r menu could not be found. Please use "
"megrok.menu.Menu to register a menu first."
% menu_id, factory)
- if permission == None:
+ if permission is None:
permission = CheckerPublic
- menuItemDirective(config, menu=menu, for_=context, action=name,
+ if action is None:
+ action = name
+
+ if menuContext is not None:
+ context = menuContext
+
+ menuItemDirective(config, menu=menu, for_=context, action=action,
title=title, description=description, icon=icon,
filter=filter, permission=permission, layer=layer,
order=order, extra=extra)
Modified: five.megrok.menu/trunk/five/megrok/menu/tests/menus/menus.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/tests/menus/menus.py 2011-05-31 13:25:19 UTC (rev 121848)
+++ five.megrok.menu/trunk/five/megrok/menu/tests/menus/menus.py 2011-05-31 13:41:44 UTC (rev 121849)
@@ -23,12 +23,19 @@
>>> from pprint import pprint
>>> pprint(menu.getMenuItems(manfred, request))
- [{'action': 'edit',
+ [{'action': '/path/customcontext',
'description': u'',
'extra': None,
'icon': None,
'selected': u'',
'submenu': None,
+ 'title': 'CustomContext'},
+ {'action': 'edit',
+ 'description': u'',
+ 'extra': None,
+ 'icon': None,
+ 'selected': u'',
+ 'submenu': None,
'title': 'Edit'},
{'action': 'index',
'description': u'',
@@ -46,12 +53,19 @@
from five.megrok import menu
import grokcore.security
+
class Mammoth(Context):
pass
+
+class Smilodon(Context):
+ pass
+
+
class Tabs(menu.Menu):
grok.name('tabs')
grok.title('Tabs')
+ grok.context(Mammoth)
grok.description('')
# You can either refer to the menu class itself:
@@ -59,7 +73,9 @@
class Index(grok.View):
grok.title('View')
+ grok.context(Mammoth)
menu.menuitem(Tabs)
+
def render(self):
return 'index'
@@ -67,8 +83,20 @@
class Edit(grok.View):
grok.title('Edit')
+ grok.context(Mammoth)
menu.menuitem('tabs')
grokcore.security.require('zope2.Public')
def render(self):
return 'edit'
+
+# You can define custom context and action for menuitem
+
+class CustomContext(grok.View):
+ grok.title('CustomContext')
+ grok.context(Smilodon)
+ grok.require('zope2.Public')
+ menu.menuitem('tabs', context=Mammoth, action='/path/customcontext')
+
+ def render(self):
+ return 'custom-context'
More information about the checkins
mailing list