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