Author: jmorliaguet Date: Tue Oct 11 00:08:53 2005 New Revision: 28115 Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/authoring/__init__.py z3lab/cpsskins/branches/jmo-perspectives/browser/elements/__init__.py z3lab/cpsskins/branches/jmo-perspectives/browser/elements/configure.zcml z3lab/cpsskins/branches/jmo-perspectives/browser/elements/interfaces.py z3lab/cpsskins/branches/jmo-perspectives/browser/elements/slot.py Log:
- saving work in progress - added a NodeDuplicating view for duplicating nodes. (working for everything except for portlets in slots) Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/authoring/__init__.py ============================================================================== --- z3lab/cpsskins/branches/jmo-perspectives/browser/authoring/__init__.py (original) +++ z3lab/cpsskins/branches/jmo-perspectives/browser/authoring/__init__.py Tue Oct 11 00:08:53 2005 @@ -37,6 +37,7 @@ from cpsskins.elements.interfaces import IViewable, IDisplayable, IFormattable from cpsskins.browser.elements.interfaces import INodeAdding, INodeRemoving from cpsskins.browser.elements.interfaces import INodeMoving, INodeOrdering +from cpsskins.browser.elements.interfaces import INodeDuplicating from cpsskins.browser.renderers.interfaces import IRenderer from cpsskins.thememanager import getThemeManager @@ -276,19 +277,11 @@ """Duplicate an element specified by its id. Return the id of the duplicated element. """ + request = self.request element = self._getElementById(id) container = getParent(element) - # save the element's order - order = list(container.keys()) - element_order = order.index(element.name()) - # duplicate the element - copier = IObjectCopier(element) - copied_name = copier.copyTo(container) - copied = container[copied_name] - # move the copied element just below the original element - copied_id = copied.getIdentifier() - self.reorderElement(copied_id, int(element_order)+1) - return copied_id + duplicating = getMultiAdapter((container, request), INodeDuplicating) + return duplicating.duplicate(element) def getCanvasMode(self): """Get the canvas view mode Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/elements/__init__.py ============================================================================== --- z3lab/cpsskins/branches/jmo-perspectives/browser/elements/__init__.py (original) +++ z3lab/cpsskins/branches/jmo-perspectives/browser/elements/__init__.py Tue Oct 11 00:08:53 2005 @@ -19,11 +19,13 @@ from zope.app.publisher.browser import BrowserView from zope.app.container.browser.adding import Adding -from zope.app.copypastemove.interfaces import IObjectMover +from zope.app.copypastemove.interfaces import IObjectCopier, IObjectMover from zope.app.traversing.api import getParent +from zope.app.zapi import queryMultiAdapter, getMultiAdapter from zope.interface import implements from interfaces import INodeAdding, INodeRemoving, INodeOrdering, INodeMoving +from interfaces import INodeDuplicating class NodeAdding(Adding): """A view for adding element into nodes @@ -65,3 +67,23 @@ contents.insert(order, item) container.updateOrder(contents) +class NodeDuplicating(BrowserView): + """A view for duplicating elements in nodes + """ + implements(INodeDuplicating) + + def duplicate(self, content): + request = self.request + container = self.context + # save the element's order + order = list(container.keys()) + content_order = order.index(content.name()) + # duplicate the element + copier = IObjectCopier(content) + copied_name = copier.copyTo(container) + copied = container[copied_name] + # move the copied element just below the original element + reordering = getMultiAdapter((container, request), INodeOrdering) + reordering.reorder(copied, int(content_order)+1) + return copied.getIdentifier() + Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/elements/configure.zcml ============================================================================== --- z3lab/cpsskins/branches/jmo-perspectives/browser/elements/configure.zcml (original) +++ z3lab/cpsskins/branches/jmo-perspectives/browser/elements/configure.zcml Tue Oct 11 00:08:53 2005 @@ -34,6 +34,13 @@ provides=".interfaces.INodeMoving" /> + <adapter + for="cpsskins.elements.interfaces.ITheme + zope.publisher.interfaces.IRequest" + factory=".NodeDuplicating" + provides=".interfaces.INodeDuplicating" + /> + <!-- Page --> <adapter @@ -64,6 +71,13 @@ provides=".interfaces.INodeMoving" /> + <adapter + for="cpsskins.elements.interfaces.IThemePage + zope.publisher.interfaces.IRequest" + factory=".NodeDuplicating" + provides=".interfaces.INodeDuplicating" + /> + <!-- Page block --> <adapter @@ -94,6 +108,13 @@ provides=".interfaces.INodeMoving" /> + <adapter + for="cpsskins.elements.interfaces.IPageBlock + zope.publisher.interfaces.IRequest" + factory=".NodeDuplicating" + provides=".interfaces.INodeDuplicating" + /> + <!-- Cell --> <adapter @@ -124,6 +145,13 @@ provides=".interfaces.INodeMoving" /> + <adapter + for="cpsskins.elements.interfaces.ICell + zope.publisher.interfaces.IRequest" + factory=".NodeDuplicating" + provides=".interfaces.INodeDuplicating" + /> + <!-- Slot --> <adapter @@ -154,4 +182,11 @@ provides=".interfaces.INodeMoving" /> + <adapter + for="cpsskins.elements.interfaces.ISlot + zope.publisher.interfaces.IRequest" + factory=".slot.SlotDuplicating" + provides=".interfaces.INodeDuplicating" + /> + </configure> Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/elements/interfaces.py ============================================================================== --- z3lab/cpsskins/branches/jmo-perspectives/browser/elements/interfaces.py (original) +++ z3lab/cpsskins/branches/jmo-perspectives/browser/elements/interfaces.py Tue Oct 11 00:08:53 2005 @@ -45,3 +45,9 @@ def reorder(order): """Update the order of the element in the node""" + +# Duplicating elements in nodes +class INodeDuplicating(IView): + + def duplicate(): + """Duplicate an element in a node""" Modified: z3lab/cpsskins/branches/jmo-perspectives/browser/elements/slot.py ============================================================================== --- z3lab/cpsskins/branches/jmo-perspectives/browser/elements/slot.py (original) +++ z3lab/cpsskins/branches/jmo-perspectives/browser/elements/slot.py Tue Oct 11 00:08:53 2005 @@ -31,6 +31,7 @@ from cpsskins.relations.tool import RelationTool from cpsskins.thememanager import getThemeManager from interfaces import INodeAdding, INodeRemoving, INodeOrdering, INodeMoving +from interfaces import INodeDuplicating from cpsskins.storage.interfaces import IPortletStorage, IRelationStorage class SlotAdding(Adding): @@ -180,7 +181,7 @@ del portlets[content.name()] # store the portlet's order in the slot's "BoxGroup" display - display = IDisplayable(container).getDisplay(perspective) + display = IDisplayable(container).getEffectiveDisplay(perspective) display.remove(content) class SlotOrdering(BrowserView): @@ -210,3 +211,12 @@ if content in display: display.remove(content) display.insert(order, content) + + +class SlotDuplicating(BrowserView): + """A view for duplicating elements in nodes + """ + implements(INodeDuplicating) + + def duplicate(self, content): + pass -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins