Author: jmorliaguet Date: Mon Jun 5 00:45:52 2006 New Revision: 3307 Added: cpsskins/branches/paris-sprint-2006/browser/tree/theme.py (contents, props changed) Modified: cpsskins/branches/paris-sprint-2006/browser/rendering/viewer.py cpsskins/branches/paris-sprint-2006/browser/tree/__init__.py cpsskins/branches/paris-sprint-2006/browser/tree/configure.zcml cpsskins/branches/paris-sprint-2006/browser/tree/interfaces.py cpsskins/branches/paris-sprint-2006/browser/tree/slot.py cpsskins/branches/paris-sprint-2006/browser/tree/views.py cpsskins/branches/paris-sprint-2006/elements/adapters.py cpsskins/branches/paris-sprint-2006/elements/configure.zcml cpsskins/branches/paris-sprint-2006/elements/interfaces.py cpsskins/branches/paris-sprint-2006/elements/slot.py cpsskins/branches/paris-sprint-2006/elements/theme.py cpsskins/branches/paris-sprint-2006/setup/manager.py
Log: - moved the node traversing adapters to cpsskins.browser.tree views Modified: cpsskins/branches/paris-sprint-2006/browser/rendering/viewer.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/rendering/viewer.py (original) +++ cpsskins/branches/paris-sprint-2006/browser/rendering/viewer.py Mon Jun 5 00:45:52 2006 @@ -29,7 +29,8 @@ from cpsskins.browser.rendering.context import ContextInfo from cpsskins.browser.rendering.interfaces import IUpdateData, IViewer from cpsskins.browser.rendering.interfaces import IRendererView, IViewNodeEvent -from cpsskins.elements.interfaces import INodeTraverser, INode, IElement, ISlot +from cpsskins.browser.tree.interfaces import INodeTraversing +from cpsskins.elements.interfaces import INode, IElement, ISlot from cpsskins.elements.interfaces import IDisplayable from cpsskins.utils import getThemeManager @@ -114,7 +115,7 @@ if ISlot.providedBy(parent): display = IDisplayable(parent).getEffectiveDisplay(perspective) - traverser = INodeTraverser(node) + traverser = getMultiAdapter((node, globals.request), INodeTraversing) children = traverser.getChildNodes(display=display, perspective=perspective) info = ContextInfo({ Modified: cpsskins/branches/paris-sprint-2006/browser/tree/__init__.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/tree/__init__.py (original) +++ cpsskins/branches/paris-sprint-2006/browser/tree/__init__.py Mon Jun 5 00:45:52 2006 @@ -20,4 +20,4 @@ from zope.deferredimport import defineFrom defineFrom('cpsskins.browser.tree.views', 'NodeAdding', 'NodeMoving', - 'NodeRemoving', 'NodeOrdering', 'NodeDuplicating') + 'NodeRemoving', 'NodeOrdering', 'NodeDuplicating', 'NodeTraversing') Modified: cpsskins/branches/paris-sprint-2006/browser/tree/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/tree/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/browser/tree/configure.zcml Mon Jun 5 00:45:52 2006 @@ -18,6 +18,13 @@ <adapter for="cpsskins.elements.interfaces.ITheme zope.publisher.interfaces.IRequest" + factory=".theme.NodeTraversing" + provides=".interfaces.INodeTraversing" + /> + + <adapter + for="cpsskins.elements.interfaces.ITheme + zope.publisher.interfaces.IRequest" factory=".NodeAdding" provides=".interfaces.INodeAdding" /> @@ -55,6 +62,13 @@ <adapter for="cpsskins.elements.interfaces.IThemePage zope.publisher.interfaces.IRequest" + factory=".NodeTraversing" + provides=".interfaces.INodeTraversing" + /> + + <adapter + for="cpsskins.elements.interfaces.IThemePage + zope.publisher.interfaces.IRequest" factory=".NodeAdding" provides=".interfaces.INodeAdding" /> @@ -92,6 +106,13 @@ <adapter for="cpsskins.elements.interfaces.IPageBlock zope.publisher.interfaces.IRequest" + factory=".NodeTraversing" + provides=".interfaces.INodeTraversing" + /> + + <adapter + for="cpsskins.elements.interfaces.IPageBlock + zope.publisher.interfaces.IRequest" factory=".NodeAdding" provides=".interfaces.INodeAdding" /> @@ -129,6 +150,13 @@ <adapter for="cpsskins.elements.interfaces.ICell zope.publisher.interfaces.IRequest" + factory=".NodeTraversing" + provides=".interfaces.INodeTraversing" + /> + + <adapter + for="cpsskins.elements.interfaces.ICell + zope.publisher.interfaces.IRequest" factory=".NodeAdding" provides=".interfaces.INodeAdding" /> @@ -166,6 +194,13 @@ <adapter for="cpsskins.elements.interfaces.ISlot zope.publisher.interfaces.IRequest" + factory=".slot.NodeTraversing" + provides=".interfaces.INodeTraversing" + /> + + <adapter + for="cpsskins.elements.interfaces.ISlot + zope.publisher.interfaces.IRequest" factory=".slot.SlotAdding" provides=".interfaces.INodeAdding" /> @@ -198,4 +233,12 @@ provides=".interfaces.INodeDuplicating" /> + <!-- Portlet --> + <adapter + for="cpsskins.elements.interfaces.IPortlet + zope.publisher.interfaces.IRequest" + factory=".NodeTraversing" + provides=".interfaces.INodeTraversing" + /> + </configure> Modified: cpsskins/branches/paris-sprint-2006/browser/tree/interfaces.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/tree/interfaces.py (original) +++ cpsskins/branches/paris-sprint-2006/browser/tree/interfaces.py Mon Jun 5 00:45:52 2006 @@ -19,6 +19,12 @@ from zope.component.interfaces import IView +# Travesing tree nodes +class INodeTraversing(IView): + + def getChildNodes(display, perspective): + """Return the list of child nodes""" + # Adding elements to nodes class INodeAdding(IView): """Adding elements to nodes.""" Modified: cpsskins/branches/paris-sprint-2006/browser/tree/slot.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/tree/slot.py (original) +++ cpsskins/branches/paris-sprint-2006/browser/tree/slot.py Mon Jun 5 00:45:52 2006 @@ -26,13 +26,43 @@ from cpsskins.browser.negotiation.interfaces import INegotiation from cpsskins.browser.tree.interfaces import INodeAdding, INodeRemoving from cpsskins.browser.tree.interfaces import INodeOrdering, INodeMoving -from cpsskins.browser.tree.interfaces import INodeDuplicating +from cpsskins.browser.tree.interfaces import INodeDuplicating, INodeTraversing from cpsskins.elements.interfaces import IPortlet, IDisplayable from cpsskins.ontology import hasPortlet, hasPortletFromPerspective from cpsskins.relations import DyadicRelation, TriadicRelation from cpsskins.relations.interfaces import IRelationTool from cpsskins.utils import getThemeManager +class NodeTraversing(BrowserView): + """This adapter makes slot nodes traversable. + """ + implements(INodeTraversing) + + def getChildNodes(self, display=None, perspective=None): + """Return the list of child nodes implementing the specified interface + Override this method if the element is a virtual container. + """ + context = self.context + reltool = IRelationTool(context) + + if perspective is None or display.mode == IGNORE_PERSPECTIVES: + portlets = reltool.getSeconds(predicate=hasPortlet, first=context) + elif display.mode == USE_CURRENT_PERSPECTIVE: + portlets = reltool.getSeconds(predicate=hasPortletFromPerspective, + first=context, third=perspective) + + # the portlet order is obtained from the display, if the display is + # iterable otherwise the portlets are sorted by their identifier. + def cmp_by_order(a, b): + if a in display and b in display: + index = display.index + return cmp(index(a), index(b)) + return cmp(a.identifier, b.identifier) + + # sort the portlets + #portlets.sort(cmp_by_order) + return portlets + class SlotAdding(Adding): """A view for adding elements into slots """ Added: cpsskins/branches/paris-sprint-2006/browser/tree/theme.py ============================================================================== --- (empty file) +++ cpsskins/branches/paris-sprint-2006/browser/tree/theme.py Mon Jun 5 00:45:52 2006 @@ -0,0 +1,35 @@ +############################################################################## +# +# Copyright (c) 2005-2006 Nuxeo 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$ +""" +__docformat__ = "reStructuredText" + +from zope.interface import implements +from zope.publisher.browser import BrowserView + +from cpsskins.browser.tree.interfaces import INodeTraversing + +class NodeTraversing(BrowserView): + """A view to make theme nodes traversable. + """ + implements(INodeTraversing) + + def getChildNodes(self, display=None, perspective=None): + """Get the child elements in the rendering tree. + TODO: Return the effective page instead + """ + return [self.context.getDefaultPage()] + Modified: cpsskins/branches/paris-sprint-2006/browser/tree/views.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/tree/views.py (original) +++ cpsskins/branches/paris-sprint-2006/browser/tree/views.py Mon Jun 5 00:45:52 2006 @@ -24,9 +24,24 @@ from zope.traversing.api import getName, getParent from zope.interface import implements +from cpsskins.elements.interfaces import ILeaf from cpsskins.browser.tree.interfaces import INodeAdding, INodeRemoving from cpsskins.browser.tree.interfaces import INodeOrdering, INodeMoving -from cpsskins.browser.tree.interfaces import INodeDuplicating +from cpsskins.browser.tree.interfaces import INodeDuplicating, INodeTraversing + +class NodeTraversing(BrowserView): + """A view for traversing tree nodes. + """ + implements(INodeTraversing) + + def getChildNodes(self, display=None, perspective=None): + """Return the list of child nodes implementing the specified interface + Override this method if the element is a virtual container. + """ + context = self.context + if ILeaf.providedBy(context): + return [] + return context.values() class NodeAdding(Adding): """A view for adding element into nodes Modified: cpsskins/branches/paris-sprint-2006/elements/adapters.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/adapters.py (original) +++ cpsskins/branches/paris-sprint-2006/elements/adapters.py Mon Jun 5 00:45:52 2006 @@ -21,8 +21,7 @@ from zope.interface import implements from zope.traversing.api import getParent -from cpsskins.elements.interfaces import IElement, INode -from cpsskins.elements.interfaces import ILeaf, INodeTraverser +from cpsskins.elements.interfaces import IElement from cpsskins.relations.interfaces import IRelatable from cpsskins.setup.interfaces import IType, IIdentifiable @@ -62,21 +61,3 @@ return 'cpsskins://%s:%s' % (type_name, identifier) -class NodeTraverser(object): - """An adapter for traversing the tree. - """ - adapts(INode) - implements(INodeTraverser) - - def __init__(self, node): - self.node = node - - def getChildNodes(self, display=None, perspective=None): - """Return the list of child nodes implementing the specified interface - Override this method if the element is a virtual container. - """ - node = self.node - if ILeaf.providedBy(node): - return [] - return node.values() - Modified: cpsskins/branches/paris-sprint-2006/elements/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/elements/configure.zcml Mon Jun 5 00:45:52 2006 @@ -17,21 +17,6 @@ /> - <!-- these adapters make nodes traversable --> - - <adapter - factory=".adapters.NodeTraverser" - /> - - <adapter - factory=".theme.NodeTraverser" - /> - - <adapter - factory=".slot.NodeTraverser" - /> - - <!-- this adapter makes elements displayable --> <adapter Modified: cpsskins/branches/paris-sprint-2006/elements/interfaces.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/interfaces.py (original) +++ cpsskins/branches/paris-sprint-2006/elements/interfaces.py Mon Jun 5 00:45:52 2006 @@ -43,11 +43,6 @@ class ILeaf(INode): """A leaf node has no children""" -class INodeTraverser(Interface): - - def getChildNodes(display, perspective): - """Return the list of child nodes - """ class ICanvas(IElement): """A canvas element""" Modified: cpsskins/branches/paris-sprint-2006/elements/slot.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/slot.py (original) +++ cpsskins/branches/paris-sprint-2006/elements/slot.py Mon Jun 5 00:45:52 2006 @@ -21,12 +21,9 @@ from zope.component import adapts, getUtility from zope.component.factory import Factory -from cpsskins.elements.display import IGNORE_PERSPECTIVES -from cpsskins.elements.display import USE_CURRENT_PERSPECTIVE from cpsskins.elements.element import InnerNode -from cpsskins.elements.interfaces import ISlot, INodeTraverser -from cpsskins.ontology import hasPortlet, hasPortletFromPerspective -from cpsskins.relations.interfaces import IRelatable, IRelationTool +from cpsskins.elements.interfaces import ISlot +from cpsskins.relations.interfaces import IRelatable from cpsskins.storage.portlets import IPortletStorage class Slot(InnerNode): @@ -90,39 +87,6 @@ """ return str(self.element) -class NodeTraverser(object): - """This adapter makes slot nodes traversable. - """ - adapts(ISlot) - implements(INodeTraverser) - - def __init__(self, node): - self.node = node - - def getChildNodes(self, display=None, perspective=None): - """Return the list of child nodes implementing the specified interface - Override this method if the element is a virtual container. - """ - node = self.node - reltool = IRelationTool(node) - - if perspective is None or display.mode == IGNORE_PERSPECTIVES: - portlets = reltool.getSeconds(predicate=hasPortlet, first=node) - elif display.mode == USE_CURRENT_PERSPECTIVE: - portlets = reltool.getSeconds(predicate=hasPortletFromPerspective, - first=node, third=perspective) - - # the portlet order is obtained from the display, if the display is - # iterable otherwise the portlets are sorted by their identifier. - def cmp_by_order(a, b): - if a in display and b in display: - index = display.index - return cmp(index(a), index(b)) - return cmp(a.identifier, b.identifier) - - # sort the portlets - #portlets.sort(cmp_by_order) - return portlets class Sublocations(object): """Get the sublocations of the slot Modified: cpsskins/branches/paris-sprint-2006/elements/theme.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/theme.py (original) +++ cpsskins/branches/paris-sprint-2006/elements/theme.py Mon Jun 5 00:45:52 2006 @@ -17,13 +17,11 @@ """ __docformat__ = "reStructuredText" -from zope.component import adapts from zope.component.factory import Factory from zope.component.persistentregistry import PersistentComponents from zope.interface import implements from zope.app.container.btree import BTreeContainer -from cpsskins.elements.interfaces import INodeTraverser from cpsskins.elements.interfaces import ITheme from cpsskins.utils import getThemeManager @@ -72,19 +70,4 @@ name = property(getThemeName) -class NodeTraverser(object): - """This adapter makes theme nodes traversable. - """ - adapts(ITheme) - implements(INodeTraverser) - - def __init__(self, node): - self.node = node - - def getChildNodes(self, iface=None, display=None, perspective=None): - """Get the child elements in the rendering tree. - TODO: Return the effective page instead - """ - return [self.node.getDefaultPage()] - ThemeFactory = Factory(Theme) Modified: cpsskins/branches/paris-sprint-2006/setup/manager.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/setup/manager.py (original) +++ cpsskins/branches/paris-sprint-2006/setup/manager.py Mon Jun 5 00:45:52 2006 @@ -18,7 +18,6 @@ __docformat__ = "reStructuredText" import logging -from copy import deepcopy from zope.app.container.interfaces import INameChooser from zope.interface import implements -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins