[Checkins] SVN: megrok.menu/trunk/ Added the support of the grokcore.viewlet 'order' directive to reorder the menu items and sub menus.
Souheil CHELFOUH
souheil at chelfouh.com
Fri Oct 2 16:56:48 EDT 2009
Log message for revision 104757:
Added the support of the grokcore.viewlet 'order' directive to reorder the menu items and sub menus.
Changed:
U megrok.menu/trunk/CHANGES.txt
U megrok.menu/trunk/setup.py
U megrok.menu/trunk/src/megrok/menu/component.py
U megrok.menu/trunk/src/megrok/menu/grokker.py
-=-
Modified: megrok.menu/trunk/CHANGES.txt
===================================================================
--- megrok.menu/trunk/CHANGES.txt 2009-10-02 18:56:50 UTC (rev 104756)
+++ megrok.menu/trunk/CHANGES.txt 2009-10-02 20:56:47 UTC (rev 104757)
@@ -3,6 +3,13 @@
0.3 (unreleased)
----------------
+ * Added the support of the grokcore.viewlet 'order' directive to
+ reorder the menu items and sub menus. This permits to have a
+ baseclass defining the basic menu and to keep the ordering
+ possibility in the sublasses. We probably should do that for the
+ different arguments of the menuitem directive. That would allow more
+ genericity and reusability. Note : this change is 100% backward
+ compatible. Simply added tests to show the behavior. [trollfot]
* Get rid of the grok dependency. Now depends only on grokcore.* packages
* Updated the build process
Modified: megrok.menu/trunk/setup.py
===================================================================
--- megrok.menu/trunk/setup.py 2009-10-02 18:56:50 UTC (rev 104756)
+++ megrok.menu/trunk/setup.py 2009-10-02 20:56:47 UTC (rev 104757)
@@ -28,6 +28,7 @@
'setuptools',
'grokcore.component',
'grokcore.view',
+ 'grokcore.viewlet',
'grokcore.security',
],
entry_points="""
Modified: megrok.menu/trunk/src/megrok/menu/component.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/component.py 2009-10-02 18:56:50 UTC (rev 104756)
+++ megrok.menu/trunk/src/megrok/menu/component.py 2009-10-02 20:56:47 UTC (rev 104757)
@@ -14,7 +14,7 @@
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=None, extra=None):
if martian.util.check_subclass(menu, Menu):
menu = grokcore.component.name.bind().get(menu)
if martian.util.not_unicode_or_ascii(menu):
Modified: megrok.menu/trunk/src/megrok/menu/grokker.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/grokker.py 2009-10-02 18:56:50 UTC (rev 104756)
+++ megrok.menu/trunk/src/megrok/menu/grokker.py 2009-10-02 20:56:47 UTC (rev 104757)
@@ -1,21 +1,24 @@
import martian
from martian.error import GrokError
-import grokcore.component
import grokcore.view
+import grokcore.viewlet
import grokcore.security
+import grokcore.component
+
from grokcore.security.util import protect_getattr
from grokcore.view.meta.views import ViewSecurityGrokker, default_view_name
from zope.configuration.exceptions import ConfigurationError
from zope.app.publisher.browser.menumeta import menuDirective, \
- menuItemDirective, subMenuItemDirective
+ menuItemDirective, subMenuItemDirective
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
from zope.publisher.interfaces.browser import IBrowserPage
import megrok.menu
+
class MenuGrokker(martian.ClassGrokker):
martian.component(megrok.menu.Menu)
martian.priority(1500)
@@ -28,6 +31,7 @@
title=title, description=description)
return True
+
class SubMenuItemGrokker(martian.ClassGrokker):
martian.component(megrok.menu.SubMenuItem)
@@ -37,22 +41,28 @@
martian.directive(grokcore.component.name, get_default=default_view_name)
martian.directive(grokcore.component.title, default=u'')
martian.directive(grokcore.component.description, default=u'')
+ martian.directive(grokcore.viewlet.order)
martian.directive(grokcore.component.context)
martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
martian.directive(grokcore.security.require, name='permission')
martian.directive(megrok.menu.menuitem)
- def execute(self, factory, config, name, title, description, \
- menuitem=None, context=None, layer=None, permission=None):
+ def execute(self, factory, config, name, title, description,
+ order = None, menuitem=None, context=None,
+ layer=None, permission=None):
menuDirective(config, id=name, class_=factory,
title=title, description=description)
-
+
if menuitem is None:
return False
- menu_id, icon, filter, order, extra = menuitem
+ menu_id, icon, filter, enforced_order, extra = menuitem
+
+ if enforced_order is None:
+ enforced_order = order[0] or 0
+
try:
menu = config.resolve('zope.app.menus.'+menu_id)
except ConfigurationError, v:
@@ -60,10 +70,12 @@
"megrok.menu.Menu to register a menu first."
% menu_id, factory)
- subMenuItemDirective(config, menu=menu, for_=context, submenu=name,
- title=title, description=description, icon=icon,
- filter=filter, permission=permission, layer=layer,
- order=order, action='', extra=extra)
+ subMenuItemDirective(
+ config, menu=menu, for_=context, submenu=name,
+ title=title, description=description, icon=icon,
+ filter=filter, permission=permission, layer=layer,
+ order=enforced_order, action='', extra=extra
+ )
for method_name in IBrowserPage:
if method_name == '__call__':
@@ -73,23 +85,30 @@
callable=protect_getattr,
args=(factory, method_name, permission),
)
-
return True
+
class MenuItemGrokker(ViewSecurityGrokker):
martian.directive(megrok.menu.menuitem)
martian.directive(grokcore.component.context)
+ martian.directive(grokcore.viewlet.order)
martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
martian.directive(grokcore.component.name, get_default=default_view_name)
martian.directive(grokcore.component.title, default=u'')
martian.directive(grokcore.component.description, default=u'')
- def execute(self, factory, config, permission, context=None, layer=None, \
- name=u'', menuitem=None, description=u'', title=u''):
+ def execute(self, factory, config, permission, order, context=None,
+ layer=None, name=u'', menuitem=None, description=u'',
+ title=u''):
if menuitem is None:
return False
- menu_id, icon, filter, order, extra = menuitem
+
+ menu_id, icon, filter, enforced_order, extra = menuitem
+
+ if enforced_order is None:
+ enforced_order = order[0] or 0
+
try:
menu = config.resolve('zope.app.menus.'+menu_id)
except ConfigurationError, v:
@@ -99,7 +118,7 @@
menuItemDirective(config, menu=menu, for_=context, action=name,
title=title, description=description, icon=icon,
filter=filter, permission=permission, layer=layer,
- order=order, extra=extra)
+ order=enforced_order, extra=extra)
# Menu items check whether the view that they refer to can be
# traversed to. Unfortunately, views will end up being
More information about the checkins
mailing list