Author: jmorliaguet
Date: Sat Jun 17 16:33:56 2006
New Revision: 3433

Modified:
   cpsskins/branches/paris-sprint-2006/browser/rendering/renderer.py
   cpsskins/branches/paris-sprint-2006/browser/rendering/viewer.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/portlet.py
   cpsskins/branches/paris-sprint-2006/elements/slot.py

Log:

- added a IBase adapter, used for portlets located in slots.

  their format is inherited from the slot



Modified: cpsskins/branches/paris-sprint-2006/browser/rendering/renderer.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/browser/rendering/renderer.py   
(original)
+++ cpsskins/branches/paris-sprint-2006/browser/rendering/renderer.py   Sat Jun 
17 16:33:56 2006
@@ -26,7 +26,7 @@
 
 from cpsskins import configuration
 from cpsskins.browser.rendering.interfaces import IRendererView, IFilterView
-from cpsskins.elements.interfaces import INode, IElement, ILeaf
+from cpsskins.elements.interfaces import INode, IElement, ILeaf, IBase
 from cpsskins.setup.interfaces import IType
 
 logger = logging.getLogger("cpsskins")
@@ -60,7 +60,7 @@
             rendered = []
             for node in tree_element['children']:
                 if not INode.providedBy(node):
-                    logger.warning("The object '%s' is not a valid node.", 
+                    logger.warning("The object '%s' is not a valid node.",
                                    repr(node))
                     continue
                 renderer = getMultiAdapter((node, request), IRendererView)
@@ -101,7 +101,7 @@
         for filter_name in renderer.filters:
             filter_proxy = queryUtility(configuration.IFilter, filter_name)
             if filter_proxy is None:
-                logger.warning("Filter '%s' is not registered.", 
+                logger.warning("Filter '%s' is not registered.",
                                repr(filter_proxy))
                 continue
 
@@ -111,21 +111,22 @@
 
             # the filter has a dyadic predicate
             if predicate is not None:
+                element_base = IBase(element).getBase()
                 if len(predicate) != 2:
                     logger.warning("The filter '%s' will not be applied. "
                         "Filter predicates of arity %s are not supported.",
                         filter_proxy, len(predicate))
                     continue
                 adapted = relations.getSeconds(predicate=predicate,
-                                               first=element)
+                                               first=element_base)
                 if not adapted:
                     continue
                 adapted = adapted[0]
 
-                # the adapted object is a URI
+                # the adapted object is a URI which must be resolved
                 if isinstance(adapted, basestring):
                     uri = adapted
-                    adapted = info.globals.resources.resolve(uri, self.element)
+                    adapted = info.globals.resources.resolve(uri, element)
 
                 # get the adapter
                 filter = queryMultiAdapter((adapted,), IFilterView,

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     Sat Jun 
17 16:33:56 2006
@@ -23,14 +23,13 @@
 from zope.event import notify
 from zope.interface import implements
 from zope.publisher.interfaces import IRequest
-from zope.traversing.api import getParent
 
 from cpsskins.browser.negotiation.interfaces import INegotiation
 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.browser.tree.interfaces import INodeTraversing
-from cpsskins.elements.interfaces import INode, IElement, ISlot
+from cpsskins.elements.interfaces import INode, IElement
 from cpsskins.setup.interfaces import IResourceManager
 from cpsskins.utils import getThemeManager
 

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    Sat Jun 17 
16:33:56 2006
@@ -21,7 +21,7 @@
 from zope.interface import implements
 from zope.traversing.api import getParent
 
-from cpsskins.elements.interfaces import IElement
+from cpsskins.elements.interfaces import IElement, IBase
 from cpsskins.relations.interfaces import IRelatable
 from cpsskins.setup.interfaces import IType, IIdentifiable
 
@@ -61,3 +61,14 @@
 
         return 'cpsskins://%s:%s' % (type_name, identifier)
 
+class Base(object):
+    """Return the element's base.
+    """
+    adapts(IElement)
+    implements(IBase)
+
+    def __init__(self, element):
+        self.element = element
+
+    def getBase(self):
+        return self.element

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 Sat Jun 17 
16:33:56 2006
@@ -15,6 +15,9 @@
       factory=".adapters.Identifiable"
   />
 
+  <adapter
+      factory=".adapters.Base"
+  />
 
   <!-- this adapter makes display elements formattable -->
 
@@ -339,6 +342,10 @@
       for=".interfaces.IPortlet"
   />
 
+  <adapter
+      factory=".portlet.Base"
+  />
+
   <interface
       interface=".interfaces.IPortlet"
       type="cpsskins.setup.interfaces.IResourceType"

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  Sat Jun 17 
16:33:56 2006
@@ -43,6 +43,12 @@
 class ILeaf(INode):
     """A leaf node has no children"""
 
+class IBase(Interface):
+    """A node can have a base node onto which relations are attached"""
+
+    def getBase():
+        """Return the node's base"""
+
 class ICanvas(IElement):
     """A canvas element"""
 
@@ -122,10 +128,15 @@
 
     def __call__(info):
         """Return the portlet's data to display"""
- 
+
 class ISlot(ICanvas, IInnerNode, IItemContainer):
     """A slot.
     """
+    name = TextLine(
+        title=_(u"Slot's name"),
+        description=_(u"The slot name is used to identify the slot "
+            "inside a theme. Slot names must be unique on a same page."),
+        required=True)
 
     title = TextLine(
         title=_(u"Slot's title"),
@@ -135,12 +146,6 @@
         title=_(u"Slot's description"),
         required=False)
 
-    name = TextLine(
-        title=_(u"Slot's name"),
-        description=_(u"The slot name is used to identify the slot "
-            "inside a theme. Slot names must be unique on a same page."),
-        required=True)
-
     perspective = Choice(
         title=_(u"Perspective"),
         description=_(u"The perspective used to add and look up portlets"),
@@ -278,7 +283,7 @@
 # Portlets
 
 class IPortletContained(IPortlet, IContained):
-    """The types of objects contained in 
+    """The types of objects contained in
     """
     containers(IPortletContainer, IPortletOrSlotContainer)
 

Modified: cpsskins/branches/paris-sprint-2006/elements/portlet.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/elements/portlet.py     (original)
+++ cpsskins/branches/paris-sprint-2006/elements/portlet.py     Sat Jun 17 
16:33:56 2006
@@ -20,12 +20,13 @@
 from persistent import Persistent
 
 from zope.app.container.contained import Contained
+from zope.component import adapts
 from zope.copypastemove import ObjectMover
 from zope.copypastemove.interfaces import IObjectMover
 from zope.interface import implements
 from zope.traversing.api import getName, getParent
 
-from cpsskins.elements.interfaces import IPortlet, ISlot
+from cpsskins.elements.interfaces import IPortlet, ISlot, IBase
 from cpsskins.ontology import hasPortlet, hasPortletFromPerspective
 from cpsskins.relations import DyadicRelation, TriadicRelation
 from cpsskins.utils import getRelationStorage
@@ -46,6 +47,22 @@
     def __repr__(self):
         return "Portlet('%s')" % self.title
 
+class Base(object):
+    """Return the element's base.
+    """
+    adapts(IPortlet)
+    implements(IBase)
+
+    def __init__(self, element):
+        self.element = element
+
+    def getBase(self):
+        element = self.element
+        parent = getParent(element)
+        if ISlot.providedBy(parent):
+            return parent
+        return element
+
 class PortletMover(ObjectMover):
     """Use `IObjectMover(obj)` to move an object somewhere."""
 
@@ -93,8 +110,9 @@
             relations.remove(parents)
 
             return getName(portlet)
+
+        # Use copypastemove's object mover explicitly
         else:
-            # Use copypastemove's object mover explicitly
             mover = ObjectMover(portlet)
             return mover.moveTo(target, new_name)
 

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        Sat Jun 17 
16:33:56 2006
@@ -24,7 +24,7 @@
 from zope.schema.vocabulary import SimpleVocabulary
 
 from cpsskins.elements.element import InnerNode
-from cpsskins.elements.interfaces import ISlot
+from cpsskins.elements.interfaces import ISlot, IBase
 from cpsskins.relations.interfaces import IRelatable
 from cpsskins.storage.portlets import IPortletStorage
 from cpsskins.utils import getThemeManager
@@ -109,8 +109,8 @@
     """A vocabulary that contains the list of perspective choices
     """
     tmutil = getThemeManager(context)
-    perspectives = [(_(u'Ignore perspectives'), u''),
-                    (_(u'Use the current perspective'), u'.')]
+    perspectives = [(_(u'Do not use perspectives'), u''),
+                    (_(u'Always use the current perspective'), u'.')]
     for name, title in tmutil.listPerspectives():
         perspectives.append((_(title), name))
 
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to