Author: jmorliaguet Date: Fri Dec 9 17:58:18 2005 New Revision: 2003 Modified: cpsskins/branches/jmo-perspectives/browser/editing/views.py cpsskins/branches/jmo-perspectives/elements/configure.zcml cpsskins/branches/jmo-perspectives/elements/element.py cpsskins/branches/jmo-perspectives/elements/interfaces.py cpsskins/branches/jmo-perspectives/engines/default/filters/style/__init__.py cpsskins/branches/jmo-perspectives/setup/adapters.py cpsskins/branches/jmo-perspectives/setup/interfaces.py cpsskins/branches/jmo-perspectives/setup/manager.py cpsskins/branches/jmo-perspectives/setup/setting.py Log:
- name / id fixes Modified: cpsskins/branches/jmo-perspectives/browser/editing/views.py ============================================================================== --- cpsskins/branches/jmo-perspectives/browser/editing/views.py (original) +++ cpsskins/branches/jmo-perspectives/browser/editing/views.py Fri Dec 9 17:58:18 2005 @@ -18,6 +18,7 @@ __docformat__ = "reStructuredText" from zope.app.location.traversing import LocationPhysicallyLocatable +from zope.app.location.pickling import locationCopy from zope.app.publisher.browser import BrowserView from zope.app.zapi import queryMultiAdapter, getMultiAdapter, getParent from zope.component import queryUtility, getUtility @@ -191,8 +192,7 @@ container = getParent(context) if not IStorage.providedBy(container): raise TypeError("The element is not located in a storage.") - resource = container.duplicate(removeSecurityProxy(context)) - resource = removeSecurityProxy(resource) + resource = locationCopy(removeSecurityProxy(context)) resources = getUtility(IResourceManager) resources.register(title=title, resource=resource, context=context) target = self.request.get('HTTP_REFERER', '.') Modified: cpsskins/branches/jmo-perspectives/elements/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/elements/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/elements/configure.zcml Fri Dec 9 17:58:18 2005 @@ -21,6 +21,13 @@ provides="cpsskins.relations.interfaces.IRelatable" /> + <!-- this adapter makes elements identifiable --> + <adapter + for=".interfaces.IElement" + factory=".element.Identifiable" + provides="cpsskins.elements.interfaces.IIdentifiable" + /> + <adapter for=".interfaces.ISlot" factory=".slot.Relatable" Modified: cpsskins/branches/jmo-perspectives/elements/element.py ============================================================================== --- cpsskins/branches/jmo-perspectives/elements/element.py (original) +++ cpsskins/branches/jmo-perspectives/elements/element.py Fri Dec 9 17:58:18 2005 @@ -29,6 +29,7 @@ from cpsskins.elements.interfaces import IElement, IElementType, IType, INode from cpsskins.elements.interfaces import IInnerNode, ILeaf, INodeTraverser +from cpsskins.elements.interfaces import IIdentifiable from cpsskins.relations.interfaces import IRelatable class Element(Contained): @@ -48,9 +49,26 @@ self.element = element def __str__(self): - id = getattr(self.element, 'identifier', u'') + """Unless stated otherwise elements are identified in a relation + by their 'identifier' attribute. + """ + id = self.element.identifier or u'' return str(id) +class Identifiable(object): + """This adapter makes elements identifiable. + """ + adapts(IElement) + implements(IIdentifiable) + + def __init__(self, element): + self.element = element + + def getIdentifier(self): + element = self.element + return str(IRelatable(element)) or \ + str(IRelatable(element.__parent__)) or u'' + class Node(Element): """A Node is an element in a tree structure. """ Modified: cpsskins/branches/jmo-perspectives/elements/interfaces.py ============================================================================== --- cpsskins/branches/jmo-perspectives/elements/interfaces.py (original) +++ cpsskins/branches/jmo-perspectives/elements/interfaces.py Fri Dec 9 17:58:18 2005 @@ -33,6 +33,13 @@ identifier = Attribute("The element's unique identifier.") +class IIdentifiable(Interface): + + def getIdentifier(): + """Return the element's identifier which can be a unique + identifer or a name depending of the usage context. + """ + class IType(Interface): def getContentType(): Modified: cpsskins/branches/jmo-perspectives/engines/default/filters/style/__init__.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/filters/style/__init__.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/filters/style/__init__.py Fri Dec 9 17:58:18 2005 @@ -24,6 +24,7 @@ from cpsskins.engines.default.formats.style import IStyle from cpsskins.browser.rendering.interfaces import IFilterView +from cpsskins.elements.interfaces import IIdentifiable startTag = re.compile('<.*?>') classAttr = re.compile(' class="(.*?)"') @@ -134,8 +135,7 @@ self.style = style def __str__(self): - """Return the style's class name""" - return 'style%s' % self.style.identifier + return 'style%s' % IIdentifiable(self.style).getIdentifier() def __call__(self): """Render the style in CSS""" Modified: cpsskins/branches/jmo-perspectives/setup/adapters.py ============================================================================== --- cpsskins/branches/jmo-perspectives/setup/adapters.py (original) +++ cpsskins/branches/jmo-perspectives/setup/adapters.py Fri Dec 9 17:58:18 2005 @@ -41,5 +41,5 @@ self.context = context def __str__(self): - return str(self.context.title) + return self.context.name Modified: cpsskins/branches/jmo-perspectives/setup/interfaces.py ============================================================================== --- cpsskins/branches/jmo-perspectives/setup/interfaces.py (original) +++ cpsskins/branches/jmo-perspectives/setup/interfaces.py Fri Dec 9 17:58:18 2005 @@ -30,6 +30,8 @@ class ISetting(Interface): """ """ + name = Attribute("The setting's name.") + title = TextLine( title=u"Title", description=u"The setting's title", Modified: cpsskins/branches/jmo-perspectives/setup/manager.py ============================================================================== --- cpsskins/branches/jmo-perspectives/setup/manager.py (original) +++ cpsskins/branches/jmo-perspectives/setup/manager.py Fri Dec 9 17:58:18 2005 @@ -46,8 +46,8 @@ """ # register as a global utility if context is None: - setting = GlobalSetting(title=title, resource=resource, - filename=filename) + setting = GlobalSetting(name=name, title=title, + resource=resource, filename=filename) provideUtility(setting, ISetting, name) # register as a local utility @@ -55,8 +55,8 @@ settings = getUtility(ISettings, context=context) chooser = INameChooser(settings) name = name or chooser.chooseName(title, object) - setting = LocalSetting(title=title, resource=resource, - custom=custom) + setting = LocalSetting(name=name, title=title, + resource=resource, custom=custom) settings[name] = setting reg = UtilityRegistration(name, ISetting, settings[name]) Modified: cpsskins/branches/jmo-perspectives/setup/setting.py ============================================================================== --- cpsskins/branches/jmo-perspectives/setup/setting.py (original) +++ cpsskins/branches/jmo-perspectives/setup/setting.py Fri Dec 9 17:58:18 2005 @@ -23,32 +23,28 @@ from cpsskins.setup.interfaces import ISetting, IGlobalSetting, ILocalSetting -class Setting(object): - """A setting configuration item. - """ - implements(ISetting) - - def __init__(self, title=u'', resource=None): - self.title = title - self.resource = resource - -class GlobalSetting(Setting): +class GlobalSetting(object): """A local persistent setting """ implements(IGlobalSetting) - def __init__(self, title=u'', resource=None, filename=None): + def __init__(self, name=u'', title=u'', resource=None, filename=None): + self.name = name self.title = title - self.resource = resource self.filename = filename + self.resource = resource + # add a reference from the resource to the setting + self.resource.__parent__ = self -class LocalSetting(Setting, Persistent, Contained): +class LocalSetting(Persistent, Contained): """A local persistent setting """ implements(ILocalSetting) - def __init__(self, title=u'', resource=None, custom=False): + def __init__(self, name=u'', title=u'', resource=None, custom=False): + self.name = name self.title = title - self.resource = resource self.custom = custom - + self.resource = resource + # add a reference from the resource to the setting + self.resource.__parent__ = self -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins