Author: jmorliaguet Date: Sat Dec 10 14:33:41 2005 New Revision: 2004 Removed: cpsskins/branches/jmo-perspectives/configuration/formats/format.py cpsskins/branches/jmo-perspectives/engines/default/formats/interfaces.py Modified: cpsskins/branches/jmo-perspectives/browser/editing/views.py cpsskins/branches/jmo-perspectives/configuration/formats/metaconfigure.py cpsskins/branches/jmo-perspectives/configuration/formats/metadirectives.py cpsskins/branches/jmo-perspectives/configuration/presentations/metaconfigure.py cpsskins/branches/jmo-perspectives/configuration/presentations/metadirectives.py cpsskins/branches/jmo-perspectives/configuration/storages/metaconfigure.py cpsskins/branches/jmo-perspectives/configuration/storages/metadirectives.py cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py cpsskins/branches/jmo-perspectives/elements/configure.zcml cpsskins/branches/jmo-perspectives/elements/format.py cpsskins/branches/jmo-perspectives/elements/interfaces.py cpsskins/branches/jmo-perspectives/elements/presentation.py cpsskins/branches/jmo-perspectives/engines/default/displays/configure.zcml cpsskins/branches/jmo-perspectives/engines/default/filters/style/jsonrpc.py cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.js cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.pt cpsskins/branches/jmo-perspectives/engines/default/filters/widget/__init__.py cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml cpsskins/branches/jmo-perspectives/engines/default/formats/effect.py cpsskins/branches/jmo-perspectives/engines/default/formats/layout.py cpsskins/branches/jmo-perspectives/engines/default/formats/storage.py cpsskins/branches/jmo-perspectives/engines/default/formats/style.py cpsskins/branches/jmo-perspectives/engines/default/formats/widget.py cpsskins/branches/jmo-perspectives/portlets/actions/configure.zcml cpsskins/branches/jmo-perspectives/portlets/breadcrumbs/configure.zcml cpsskins/branches/jmo-perspectives/portlets/configure.zcml cpsskins/branches/jmo-perspectives/portlets/custom/configure.zcml cpsskins/branches/jmo-perspectives/portlets/dummy/configure.zcml cpsskins/branches/jmo-perspectives/portlets/image/configure.zcml cpsskins/branches/jmo-perspectives/portlets/image/portlet.py cpsskins/branches/jmo-perspectives/portlets/macroslot/configure.zcml cpsskins/branches/jmo-perspectives/relations/configure.zcml cpsskins/branches/jmo-perspectives/thememanager.py Log:
- some simplifications: - we use persistent mapping instead of BTreeContainer when all we need is a mapping - the IFormat interface now has a 'type' attribute (this will be used for typing) - the format's 'id' was renamed to 'type' - 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 Sat Dec 10 14:33:41 2005 @@ -178,7 +178,7 @@ def createSetting(title): """Create a setting from an object considered as a resource.""" - def useSettingAsFormat(setting_name, format_type): + def useSettingAsFormat(setting_name): """Replace an existing format with a setting.""" class SettingsView(BrowserView): @@ -198,30 +198,29 @@ target = self.request.get('HTTP_REFERER', '.') self.request.response.redirect(target) - def useSettingAsFormat(self, setting_name=u'', format_type=u''): - """Use a setting specified by its name ('setting_name') as a format - of type 'format_type' (e.g. 'style', 'widget'). + def useSettingAsFormat(self, name=u''): + """Use a setting specified by its name ('name') as a format The context is the display """ context = self.context - if not setting_name: + if not name: raise KeyError("Must specify a setting's name.") - if not format_type: - raise KeyError("Must specify a format type.") - if not IDisplay.providedBy(context): raise ValueError("The context must be a display.") - setting = queryUtility(ISetting, setting_name) + setting = queryUtility(ISetting, name) if setting is None: - raise KeyError("No such setting: '%s'." % setting_name) + raise KeyError("No such setting: '%s'." % name) # remove existing display -- format relation reltool = IRelationTool(context) - predicate = getUtility(configuration.IFormat, format_type).predicate + + resource = IResource(setting).getResource() + format_type = queryType(resource, IContentType) + predicate = format_type.getTaggedValue('predicate') old_rel = reltool.search(first=context, predicate=predicate) reltool.remove(old_rel) Modified: cpsskins/branches/jmo-perspectives/configuration/formats/metaconfigure.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/formats/metaconfigure.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/formats/metaconfigure.py Sat Dec 10 14:33:41 2005 @@ -24,6 +24,7 @@ from zope.app.content.interfaces import IContentType from zope.configuration.exceptions import ConfigurationError from zope.component import queryUtility, provideUtility +from zope.component.interfaces import IFactory from zope.interface import alsoProvides from cpsskins import configuration @@ -33,7 +34,8 @@ def getAbsolutePath(_context, file): return os.path.abspath(str(_context.path(file))) -def format(_context, name='', schema=None, factory=None, predicate=None): +def format(_context, name=u'', schema=None, class_=None, factory=None, + predicate=None): if not name: raise ConfigurationError("Must specify the format name.") @@ -42,16 +44,15 @@ raise ConfigurationError( "Format names can only contain alphabetic characters.") - if not (schema or factory): - raise ConfigurationError("Format information is missing.") + if queryUtility(IFactory, name) is not None: + raise ConfigurationError( + "A format with the name '%s' has already been registered." % name) - if queryUtility(configuration.IFormat, name) is not None: - raise ConfigurationError, \ - "A format with the name '%s' has already been registered." % name + if not class_: + raise ConfigurationError("Must specify the format content class.") if not schema: - raise ConfigurationError, \ - "Must specify the format schema." + raise ConfigurationError("Must specify the format schema.") if not factory: raise ConfigurationError("Must specify a format factory.") @@ -60,7 +61,7 @@ raise ConfigurationError("Must specify a format predicate.") # zope:content - c = ContentDirective(_context=_context, class_=factory) + c = ContentDirective(_context=_context, class_=class_) c.implements(_context=_context,interface=(IAttributeAnnotatable,)) c.require(_context=_context, permission="zope.View", @@ -70,8 +71,7 @@ set_schema=(schema,)) # register the format - provideUtility(configuration.Format(factory=factory, predicate=predicate), - configuration.IFormat, name) + provideUtility(factory, IFactory, name) # register the predicate provideUtility(FormatPredicate(predicate), IFormatPredicate, name) @@ -80,4 +80,6 @@ alsoProvides(schema, IContentType) alsoProvides(IFormat, IElementType) + # set tagged values schema.setTaggedValue('name', name) + schema.setTaggedValue('predicate', predicate) Modified: cpsskins/branches/jmo-perspectives/configuration/formats/metadirectives.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/formats/metadirectives.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/formats/metadirectives.py Sat Dec 10 14:33:41 2005 @@ -39,6 +39,12 @@ required=False, ) + class_ = GlobalObject( + title=_("Class"), + description=_("The format's content class."), + required=False, + ) + factory = GlobalObject( title=_("Factory"), description=_("The format's factory."), Modified: cpsskins/branches/jmo-perspectives/configuration/presentations/metaconfigure.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/presentations/metaconfigure.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/presentations/metaconfigure.py Sat Dec 10 14:33:41 2005 @@ -36,8 +36,8 @@ def display(self, _context, type): self._display = type - def format(self, _context, name, id=''): - self._formats[name] = id + def format(self, _context, name, type=u''): + self._formats[name] = type def __call__(self): Modified: cpsskins/branches/jmo-perspectives/configuration/presentations/metadirectives.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/presentations/metadirectives.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/presentations/metadirectives.py Sat Dec 10 14:33:41 2005 @@ -45,13 +45,13 @@ name = TextLine( title=_("Name"), - description=_("The format's name"), + description=_("The format's name (e.g. 'style', 'widget')"), required=False, ) - id = TextLine( - title=_("Id"), - description=_("The format's id"), + type = TextLine( + title=_("Type"), + description=_("The format's type id."), required=False, ) Modified: cpsskins/branches/jmo-perspectives/configuration/storages/metaconfigure.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/storages/metaconfigure.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/storages/metaconfigure.py Sat Dec 10 14:33:41 2005 @@ -23,7 +23,7 @@ from cpsskins.storage.interfaces import IStorage -def storage(_context, id=None, title=None, description=None, factory=None, +def storage(_context, id=None, title=None, description=None, class_=None, interface=None): if not id: @@ -35,14 +35,14 @@ if not description: raise ConfigurationError("Must specify a storage description.") - if not factory: - raise ConfigurationError("Must specify a storage factory.") + if not class_: + raise ConfigurationError("Must specify a storage content class.") if not interface: interface = IStorage # zope:content - c = ContentDirective(_context=_context, class_=factory) + c = ContentDirective(_context=_context, class_=class_) c.factory(_context=_context, title=title, description=description) c.allow(_context=_context, interface=(IReadContainer, interface)) Modified: cpsskins/branches/jmo-perspectives/configuration/storages/metadirectives.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/storages/metadirectives.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/storages/metadirectives.py Sat Dec 10 14:33:41 2005 @@ -46,9 +46,9 @@ default=u'', ) - factory = GlobalObject( - title=_("Factory"), - description=_("Factory for creating the storage."), + class_ = GlobalObject( + title=_("Class"), + description=_("Content class for the storage"), required=False, ) Modified: cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py ============================================================================== --- cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py (original) +++ cpsskins/branches/jmo-perspectives/configuration/widgets/metaconfigure.py Sat Dec 10 14:33:41 2005 @@ -25,7 +25,7 @@ from cpsskins import configuration from cpsskins.engines.default.filters.widget.interfaces import IWidgetView -from cpsskins.engines.default.formats.interfaces import IWidget +from cpsskins.engines.default.formats.widget import IWidget _ = MessageFactory("cpsskins") Modified: cpsskins/branches/jmo-perspectives/elements/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/elements/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/elements/configure.zcml Sat Dec 10 14:33:41 2005 @@ -184,11 +184,6 @@ interface=".interfaces.IPageBlockContainer" /> - <factory - id="themepage.ThemePage" - title="Page" - description="A Page" /> - <require permission="zope.View" interface=".interfaces.IThemePage" @@ -210,12 +205,12 @@ <cpsskins:format name="layout" - id="page" + type="page" /> <cpsskins:format name="widget" - id="page_body" + type="page_body" /> <cpsskins:format @@ -246,11 +241,6 @@ interface=".interfaces.ICellContainer" /> - <factory - id="pageblock.PageBlock" - title="Page Block" - description="A Page Block" /> - <require permission="zope.View" interface=".interfaces.IPageBlock" @@ -272,12 +262,12 @@ <cpsskins:format name="layout" - id="container" + type="container" /> <cpsskins:format name="widget" - id="table_frame" + type="table_frame" /> <cpsskins:format @@ -309,11 +299,6 @@ interface=".interfaces.IPortletOrSlotContainer" /> - <factory - id="cell.Cell" - title="Cell" - description="A Cell" /> - <require permission="zope.View" interface=".interfaces.ICell" @@ -335,12 +320,12 @@ <cpsskins:format name="layout" - id="container" + type="container" /> <cpsskins:format name="widget" - id="table_cell" + type="table_cell" /> <cpsskins:format @@ -378,11 +363,6 @@ interface=".interfaces.IPortletContainer" /> - <factory - id="slot.Slot" - title="Slot" - description="A Slot" /> - <require permission="zope.View" interface=".interfaces.ISlot" @@ -404,12 +384,12 @@ <cpsskins:format name="effect" - id="scale" + type="scale" /> <cpsskins:format name="widget" - id="frame_box" + type="frame_box" /> <cpsskins:format @@ -442,7 +422,7 @@ <cpsskins:format name="widget" - id="plain_html" + type="plain_html" /> <cpsskins:format Modified: cpsskins/branches/jmo-perspectives/elements/format.py ============================================================================== --- cpsskins/branches/jmo-perspectives/elements/format.py (original) +++ cpsskins/branches/jmo-perspectives/elements/format.py Sat Dec 10 14:33:41 2005 @@ -17,17 +17,20 @@ """ __docformat__ = "reStructuredText" +from zope.app.content.interfaces import IContentType from zope.app.location.pickling import locationCopy +from zope.app.interface import queryType from zope.app.traversing.interfaces import IPathAdapter, ITraversable from zope.component import getUtility, queryUtility +from zope.component.interfaces import IFactory from zope.interface import implements from zope.security.proxy import removeSecurityProxy from cpsskins import configuration from cpsskins.elements import Element from cpsskins.elements.interfaces import IType, IFormat, IFormattable -from cpsskins.engines.default.formats.interfaces import IFormatStorage -from cpsskins.ontology import hasFormat +from cpsskins.engines.default.formats.storage import IFormatStorage +from cpsskins.ontology import hasFormat, IFormatPredicate from cpsskins.relations import DyadicRelation from cpsskins.relations.interfaces import IRelationTool from cpsskins.setup.interfaces import IResource, ISetting @@ -36,8 +39,10 @@ implements(IFormat) - def __init__(self, id=u''): - self.id = id + type = u'' + + def __init__(self, type=u''): + self.type = type def _getFormatName(self): return IType(self).getContentType().getTaggedValue('name') @@ -95,7 +100,7 @@ def traverse(self, name, remaining): context = self.context # get a format by name - if queryUtility(configuration.IFormat, name) is not None: + if name in ('layout', 'style', 'widget', 'effect'): return self.getFormat(name) # return a method of the adapter return getattr(self, name) @@ -109,18 +114,17 @@ return formats.remove(format) def getFormats(self, name=u'', resolve=True): + formats = [] context = self.context reltool = IRelationTool(context) - format = queryUtility(configuration.IFormat, name) - predicate = format and format.predicate or hasFormat - formats = [] + predicate = self.getPredicate(name) for format in reltool.getSeconds(first=context, predicate=predicate): if resolve and ISetting.providedBy(format): format = IResource(format).getResource() formats.append(format) return formats - def getFormat(self, name=''): + def getFormat(self, name=u''): res = self.getFormats(name) if res: return res[0] @@ -133,8 +137,10 @@ names.sort() return names - def addFormat(self, name='', id=''): - format = self.factory(name, id) + def addFormat(self, name=u'', type=u''): + factory = getUtility(IFactory, name) + format = factory() + format.type = type self.storeFormat(format) return self.setFormat(format) @@ -147,8 +153,7 @@ context = self.context reltool = IRelationTool(context) - predicate = getUtility(configuration.IFormat, - format.formatname).predicate + predicate = self.getPredicate(format.formatname) relations = reltool.search(first=context, predicate=predicate) reltool.remove(relations) @@ -162,10 +167,7 @@ new_format = locationCopy(removeSecurityProxy(format)) return self.storeFormat(new_format) - def factory(self, name='', id=''): - """Display factory. Return a display element. - """ - context = self.context - factory = getUtility(configuration.IFormat, name).factory - return factory(id=id) - + def getPredicate(self, name=u''): + if not name: + return hasFormat + return queryUtility(IFormatPredicate, name).predicate Modified: cpsskins/branches/jmo-perspectives/elements/interfaces.py ============================================================================== --- cpsskins/branches/jmo-perspectives/elements/interfaces.py (original) +++ cpsskins/branches/jmo-perspectives/elements/interfaces.py Sat Dec 10 14:33:41 2005 @@ -113,6 +113,8 @@ formatname = Attribute(u"Format name") + type = Attribute("The type of format.") + def findDisplays(): """ """ Modified: cpsskins/branches/jmo-perspectives/elements/presentation.py ============================================================================== --- cpsskins/branches/jmo-perspectives/elements/presentation.py (original) +++ cpsskins/branches/jmo-perspectives/elements/presentation.py Sat Dec 10 14:33:41 2005 @@ -62,8 +62,8 @@ if factory_info is None: factory_info = queryUtility(configuration.IPresentation, str(IType(context).getElementType())) - for type, id in factory_info.formats.items(): - formattable.addFormat(type, id) + for name, type in factory_info.formats.items(): + formattable.addFormat(name=name, type=type) def clonePresentation(self, perspective=None): """Clone the default presentation of an element. @@ -96,7 +96,7 @@ displayable = IDisplayable(context) display = displayable.removeDisplay(perspective) - def customizeFormat(self, name='', perspective=None): + def customizeFormat(self, name=u'', perspective=None): """Customize a format in a given perspective. """ if perspective is None: @@ -112,13 +112,13 @@ current_format = formattable.getFormat(name) format = formattable.cloneFormat(current_format) - format = getUtility(configuration.IFormat, name) - relations = reltool.search(first=display, predicate=format.predicate) + predicate = getUtility(IFormatPredicate, name).predicate + relations = reltool.search(first=display, predicate=predicate) reltool.remove(relations) formattable.setFormat(format) - def uncustomizeFormat(self, name='', perspective=None): + def uncustomizeFormat(self, name=u'', perspective=None): """Uncustomize a format in a given perspective. """ if perspective is None: Modified: cpsskins/branches/jmo-perspectives/engines/default/displays/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/displays/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/engines/default/displays/configure.zcml Sat Dec 10 14:33:41 2005 @@ -10,7 +10,7 @@ id="displays" title="Display storage" description="A display storage" - factory=".storage.DisplayStorage" + class=".storage.DisplayStorage" /> <!-- Area display --> Modified: cpsskins/branches/jmo-perspectives/engines/default/filters/style/jsonrpc.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/filters/style/jsonrpc.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/filters/style/jsonrpc.py Sat Dec 10 14:33:41 2005 @@ -69,7 +69,7 @@ if k in self.context: del self.context[k] - def getFieldRange(self, widget_id, sel): + def getFieldRange(self, widget_type, sel): # TODO: this is for testing return { 'color': [], @@ -81,9 +81,9 @@ 'border': ['1px solid #f0f0f0', 'none', '1px inset gray'], } - def renderPreview(self, widget_id): + def renderPreview(self, widget_type): """Render a style preview based on the specified widget""" - widget = getUtility(configuration.IWidget, widget_id) + widget = getUtility(configuration.IWidget, widget_type) return widget.factory(None, None).renderPreview() Modified: cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.js ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.js (original) +++ cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.js Sat Dec 10 14:33:41 2005 @@ -13,7 +13,7 @@ var clientWidgetStyle = null // the widget style (client-side) var serverWidgetStyle = null // the widget style (server-side) -var widget_id = null // current widget +var widget_type = null // current widget var selector = null // the current selector (e.g. "ul li") var selector_schema = null // the current selector's schema @@ -47,12 +47,12 @@ } } -function get_widget_id() { - return widget_id; +function get_widget_type() { + return widget_type; } -function set_widget_id(id) { - widget_id = id; +function set_widget_type(type) { + widget_type = type; } function get_widget_area() { @@ -118,7 +118,7 @@ var elems, selector_style; // Draw the preview area - style_preview = serverWidgetStyle.renderPreview(get_widget_id()); + style_preview = serverWidgetStyle.renderPreview(get_widget_type()); replaceHTML(widget_area, style_preview); // Set the widget area element @@ -144,7 +144,7 @@ function create_form() { var sel = get_selector(); - var widget = get_widget_id(); + var widget = get_widget_type(); var props = clientWidgetStyle[sel]; selector_schema = serverWidgetStyle.getFieldRange(widget, sel); @@ -270,8 +270,8 @@ widget_selector.onchange = select_widget; } -function setupEditor(widget_id) { - set_widget_id(widget_id); +function setupEditor(widget_type) { + set_widget_type(widget_type); // Open a JSON-RPC connection for this style serverWidgetStyle = jsonrpcConnect(addr=".", Modified: cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.pt ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.pt (original) +++ cpsskins/branches/jmo-perspectives/engines/default/filters/style/style_editor.pt Sat Dec 10 14:33:41 2005 @@ -23,7 +23,7 @@ tal:define="displays context/findDisplays; display python: displays[0]; widget display/formattable:widget; - widget_id widget/id"> + widget_type widget/type"> <div class="editArea"> <h1>Style editor</h1> @@ -58,7 +58,7 @@ <!-- Set up the editor --> <script type="text/javascript" - tal:content="string:setupEditor('${widget_id}')" /> + tal:content="string:setupEditor('${widget_type}')" /> </body> </html> Modified: cpsskins/branches/jmo-perspectives/engines/default/filters/widget/__init__.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/filters/widget/__init__.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/filters/widget/__init__.py Sat Dec 10 14:33:41 2005 @@ -26,7 +26,7 @@ from zope.i18nmessageid import MessageFactory from cpsskins.browser.rendering.interfaces import IFilterView -from cpsskins.engines.default.formats.interfaces import IWidget +from cpsskins.engines.default.formats.widget import IWidget from cpsskins.engines.default.filters.widget.interfaces import ( IBasicWidgetView, IWidgetView) @@ -51,11 +51,11 @@ context = self.context request = info.globals.request - widget_id = context.id - if widget_id is None: + widget_type = context.type + if not widget_type: logger.log(INFO, "'%s' cannot be displayed. Widget '%s' is unknown." - % (repr(info.element), widget_id) + % (repr(info.element), widget_type) ) return markup @@ -64,7 +64,7 @@ factory = queryMultiAdapter( objects=(context, request), interface=IWidgetView, - name=widget_id, + name=widget_type, ) if factory is None: @@ -72,7 +72,7 @@ "'%s' with data '%s' could not be displayed " "with the specified widget ('%s'). " "Falling back to the basic widget view." - % (repr(info.element), repr(data), widget_id)) + % (repr(info.element), repr(data), widget_type)) factory = queryMultiAdapter(objects=(data, request), interface=IBasicWidgetView) Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/engines/default/formats/configure.zcml Sat Dec 10 14:33:41 2005 @@ -4,43 +4,42 @@ xmlns:cpsskins="http://namespaces.zope.org/cpsskins"> <!-- Format storage --> - <cpsskins:storage id="formats" title="Format storage" description="A format storage" - factory=".storage.FormatStorage" + class=".storage.FormatStorage" /> <!-- Layout --> - <cpsskins:format name="layout" - factory=".layout.Layout" schema=".layout.ILayout" + class=".layout.Layout" + factory=".layout.LayoutFactory" predicate=".layout.hasLayout" /> <!-- Style --> - <cpsskins:format name="style" - factory=".style.Style" schema=".style.IStyle" + class=".style.Style" + factory=".style.StyleFactory" predicate=".style.hasStyle" /> - <!-- register the 'style' XML directive --> + <!-- Setting --> <cpsskins:setting name="style" + schema=".style.IStyle" factory=".style.StyleFactory" - schema=".interfaces.IStyle" /> <!-- XML export --> <browser:page name="exporter" - for=".interfaces.IStyle" + for=".style.IStyle" class=".style.Exporter" permission="zope.ManageContent" template="style.xml" @@ -52,11 +51,11 @@ /> <!-- Widget --> - <cpsskins:format name="widget" - factory=".widget.Widget" - schema="cpsskins.engines.default.formats.interfaces.IWidget" + schema=".widget.IWidget" + class=".widget.Widget" + factory=".widget.WidgetFactory" predicate=".widget.hasWidget" /> @@ -66,11 +65,11 @@ /> <!-- Effect --> - <cpsskins:format name="effect" - factory=".effect.Effect" schema=".effect.IEffect" + class=".effect.Effect" + factory=".effect.EffectFactory" predicate=".effect.hasEffect" /> Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/effect.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/formats/effect.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/formats/effect.py Sat Dec 10 14:33:41 2005 @@ -18,6 +18,7 @@ __docformat__ = "reStructuredText" from persistent import Persistent +from zope.component.interfaces import IFactory from zope.interface import implements from zope.i18nmessageid import MessageFactory from zope.schema import Choice, Int, Bool @@ -33,9 +34,9 @@ class IEffect(IFormat): """An effect""" - id = Choice( + type = Choice( title=_("Effect"), - description=_("The effect to apply."), + description=_("The type of effect to apply."), vocabulary="effects by type") format = Choice( @@ -66,17 +67,28 @@ """ implements(IEffect) - def __init__(self, id='', format='PNG', width=0, height=0, - keep_ratio=True): - Format.__init__(self, id=id) + def __init__(self, format=u'PNG', width=0, height=0, keep_ratio=True, **kw): + super(Effect, self).__init__(**kw) self.format = format self.width = width self.height = height self.keep_ratio = keep_ratio def __repr__(self): - return "Effect('%s')" % self.getEffectId() + return "<Effect of type: %s>" % self.type - def getEffectId(self): - return self.id +class EffectFactory(object): + + implements(IFactory) + + title = "Effect Factory" + description = "A Factory that creates Effects" + + def __call__(self): + return Effect() + + def getInterfaces(self): + return implementedBy(Effect) + +EffectFactory = EffectFactory() Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/layout.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/formats/layout.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/formats/layout.py Sat Dec 10 14:33:41 2005 @@ -17,10 +17,14 @@ """ __docformat__ = "reStructuredText" +from persistent.mapping import PersistentMapping + from zope.app.container.btree import BTreeContainer from zope.app.container.interfaces import IContainer from zope.app.traversing.interfaces import ITraversable +from zope.component.interfaces import IFactory from zope.interface import implements +from zope.interface.common.mapping import IMapping from zope.interface.interfaces import IInterface from cpsskins.elements.format import Format @@ -29,33 +33,27 @@ hasLayout = Predicate('_ has layout _') -class ILayout(IFormat, IContainer): +class ILayout(IFormat, IMapping): """A layout element""" def traverse(name, remaining): """Get a layout attribute by traversal.""" -class ILayoutType(IInterface): - """The layout type categorizes layout elements.""" - -class Layout(BTreeContainer, Format): +class Layout(Format, PersistentMapping): """A layout is used to format layout elements (cells, blocks, etc) >>> layout = Layout('container') >>> layout Layout('container') - >>> layout._getAllowedKeys() - ['width', 'text-align', 'height'] - >>> dict(layout.items()) {} - >>> layout['width'] = '1em' + >>> layout[u'width'] = u'1em' >>> dict(layout.items()) {u'width': '1em'} - >>> layout['unknown'] = '' + >>> layout[u'unknown'] = u'' Traceback (most recent call last): ... KeyError: "The 'unknown' attribute is not allowed in this layout." @@ -63,51 +61,40 @@ """ implements(ILayout, ITraversable) - __super_setitem = BTreeContainer.__setitem__ + __super_setitem = PersistentMapping.__setitem__ - def __init__(self, id=u''): - super(Layout, self).__init__() - self.id = id + def __init__(self, **kw): + super(Layout, self).__init__(**kw) + self.data = PersistentMapping() def __repr__(self): - return "Layout('%s')" % self.id + return "<Layout of type: %s>" % self.type def traverse(self, name, remaining): - if name in self._getAllowedKeys(): - return str(self.get(name, '')) + if name in self: + return str(self[name]) return getattr(self, name, None) def __setitem__(self, k, v): if not isinstance(v, basestring): raise TypeError, \ """Only strings can be stored in the layout objects.""" - if k not in self._getAllowedKeys(): - raise KeyError, \ - "The '%s' attribute is not allowed in this layout." % k if k in self: del self[k] self.__super_setitem(k, v) - def _getAllowedKeys(self): - return layouts[self.id].keys() +class LayoutFactory(object): + + implements(IFactory) + + title = "Layout Factory" + description = "A Factory that creates Layouts" + + def __call__(self): + return Layout() + + def getInterfaces(self): + return implementedBy(Layout) - def factory(self, type='', id=''): - """Display factory. Return a display element. - """ - context = self.context - factory = format_factories[type] - return apply(factory, (), {'id': id}) - -# TODO this should not be hardcoded -layouts = { - 'page': { - 'margin': [], - }, - - 'container': { - 'width': [], - 'height': [], - 'text-align': ['left', 'center', 'right'], - } -} +LayoutFactory = LayoutFactory() Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/storage.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/formats/storage.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/formats/storage.py Sat Dec 10 14:33:41 2005 @@ -17,10 +17,15 @@ """ __docformat__ = "reStructuredText" +from zope.app.container.constraints import contains from zope.interface import implements +from cpsskins.elements.interfaces import IFormat from cpsskins.storage import Storage -from cpsskins.engines.default.formats.interfaces import IFormatStorage +from cpsskins.storage.interfaces import IStorage + +class IFormatStorage(IStorage): + contains(IFormat) class FormatStorage(Storage): """A BTree-based display container""" Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/style.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/formats/style.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/formats/style.py Sat Dec 10 14:33:41 2005 @@ -26,10 +26,11 @@ from zope.component import adapts from zope.component.interfaces import IFactory from zope.interface import implements +from zope.interface.common.mapping import IMapping from zope.i18nmessageid import MessageFactory +from cpsskins.elements.interfaces import IFormat from cpsskins.elements.format import Format -from cpsskins.engines.default.formats.interfaces import IStyle from cpsskins.relations import Predicate from cpsskins.setup.interfaces import IResourceExporter, IResourceImporter @@ -37,6 +38,9 @@ hasStyle = Predicate('_ has style _') +class IStyle(IFormat, IMapping): + """A style""" + class Style(Format, PersistentMapping): """A style is a collection of properties @@ -106,12 +110,12 @@ __super_get = PersistentMapping.get __super_keys = PersistentMapping.keys - def __init__(self, id=''): - super(Style, self).__init__(id=id) + def __init__(self, **kw): + super(Style, self).__init__(**kw) self.data = PersistentMapping() def __repr__(self): - return "Style('%s')" % self.id + return "<Style of type: %s>" % self.type def _wrap(self, k): if k == u'': @@ -138,6 +142,9 @@ def __delitem__(self, k): return self.__super_delitem(self._wrap(k)) + def __iter__(self): + return iter(self.data) + def keys(self): return [self._unwrap(k) for k in self.__super_keys()] Modified: cpsskins/branches/jmo-perspectives/engines/default/formats/widget.py ============================================================================== --- cpsskins/branches/jmo-perspectives/engines/default/formats/widget.py (original) +++ cpsskins/branches/jmo-perspectives/engines/default/formats/widget.py Sat Dec 10 14:33:41 2005 @@ -19,20 +19,31 @@ from persistent import Persistent from zope.component import getUtilitiesFor +from zope.component.interfaces import IFactory from zope.interface import implements from zope.i18nmessageid import MessageFactory from zope.schema.vocabulary import SimpleVocabulary +from zope.schema import Choice from cpsskins import configuration from cpsskins.elements.format import Format +from cpsskins.elements.interfaces import IFormat from cpsskins.relations import Predicate -from cpsskins.engines.default.formats.interfaces import IWidget hasWidget = Predicate('_ has widget _') _ = MessageFactory("cpsskins") -class Widget(Format, Persistent): +class IWidget(IFormat): + """A presentation widget""" + + type = Choice( + title=_("Widget"), + description=_("The type of widget."), + vocabulary="Widgets", + ) + +class Widget(Persistent, Format): """A presentation element is used to present data with help of widgets. >>> widget = Widget('plain') @@ -41,12 +52,26 @@ """ implements(IWidget) - def __init__(self, id=u'', title=u''): - self.id = id - self.title = title + def __init__(self, type=u''): + self.type = type def __repr__(self): - return "Widget('%s')" % self.id + return "Widget('%s')" % self.type + +class WidgetFactory(object): + + implements(IFactory) + + title = "Widget Factory" + description = "A Factory that creates Widgets" + + def __call__(self): + return Widget() + + def getInterfaces(self): + return implementedBy(Widget) + +WidgetFactory = WidgetFactory() def WidgetsVocabulary(context): """A vocabulary that contains the list of widgets in a given category. @@ -55,3 +80,4 @@ for id, widget in list(getUtilitiesFor(configuration.IWidget)): widgets.append((_(widget.title), id)) return SimpleVocabulary.fromItems(widgets) + Modified: cpsskins/branches/jmo-perspectives/portlets/actions/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/portlets/actions/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/portlets/actions/configure.zcml Sat Dec 10 14:33:41 2005 @@ -25,7 +25,7 @@ <format name="widget" - id="vertical_menu" + type="vertical_menu" /> <format Modified: cpsskins/branches/jmo-perspectives/portlets/breadcrumbs/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/portlets/breadcrumbs/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/portlets/breadcrumbs/configure.zcml Sat Dec 10 14:33:41 2005 @@ -27,7 +27,7 @@ <format name="widget" - id="horizontal_trail" + type="horizontal_trail" /> <format Modified: cpsskins/branches/jmo-perspectives/portlets/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/portlets/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/portlets/configure.zcml Sat Dec 10 14:33:41 2005 @@ -14,7 +14,7 @@ id="portlets" title="Portlet storage" description="A portlet storage contains local portlets" - factory="cpsskins.portlets.storage.PortletStorage" + class="cpsskins.portlets.storage.PortletStorage" /> <!-- macro slot portlet --> Modified: cpsskins/branches/jmo-perspectives/portlets/custom/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/portlets/custom/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/portlets/custom/configure.zcml Sat Dec 10 14:33:41 2005 @@ -28,7 +28,7 @@ <format name="widget" - id="plain_html" + type="plain_html" /> <format Modified: cpsskins/branches/jmo-perspectives/portlets/dummy/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/portlets/dummy/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/portlets/dummy/configure.zcml Sat Dec 10 14:33:41 2005 @@ -27,7 +27,7 @@ <format name="widget" - id="plain_html" + type="plain_html" /> <format Modified: cpsskins/branches/jmo-perspectives/portlets/image/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/portlets/image/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/portlets/image/configure.zcml Sat Dec 10 14:33:41 2005 @@ -27,7 +27,7 @@ <format name="widget" - id="image" + type="image" /> <format @@ -36,7 +36,7 @@ <format name="effect" - id="scale" + type="scale" /> </presentation> Modified: cpsskins/branches/jmo-perspectives/portlets/image/portlet.py ============================================================================== --- cpsskins/branches/jmo-perspectives/portlets/image/portlet.py (original) +++ cpsskins/branches/jmo-perspectives/portlets/image/portlet.py Sat Dec 10 14:33:41 2005 @@ -26,7 +26,7 @@ from cpsskins import Portlet from cpsskins.interfaces import IPortlet -from cpsskins.model import Image +from cpsskins.model import Image as ImageModel _ = MessageFactory("cpsskins") @@ -58,16 +58,16 @@ """ implements(IImage) - def __init__(self, title='', link='', **kw): + def __init__(self, title=u'', link=u'', **kw): self.title = title - self.link = '' + self.link = link ImageFile.__init__(self, **kw) def __call__(self, info): - path = '' + path = u'' if self.data: path = zapi.getPath(self) - info.data = Image(path=path) + info.data = ImageModel(path=path) info.metadata = {'title': self.title, 'link': self.link} Modified: cpsskins/branches/jmo-perspectives/portlets/macroslot/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/portlets/macroslot/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/portlets/macroslot/configure.zcml Sat Dec 10 14:33:41 2005 @@ -28,7 +28,7 @@ <format name="widget" - id="plain_html" + type="plain_html" /> <format Modified: cpsskins/branches/jmo-perspectives/relations/configure.zcml ============================================================================== --- cpsskins/branches/jmo-perspectives/relations/configure.zcml (original) +++ cpsskins/branches/jmo-perspectives/relations/configure.zcml Sat Dec 10 14:33:41 2005 @@ -67,7 +67,7 @@ id="relations" title="Relation storage" description="A relation storage contains relations between objects" - factory="cpsskins.relations.storage.RelationStorage" + class="cpsskins.relations.storage.RelationStorage" interface="cpsskins.relations.interfaces.IRelationStorage" /> Modified: cpsskins/branches/jmo-perspectives/thememanager.py ============================================================================== --- cpsskins/branches/jmo-perspectives/thememanager.py (original) +++ cpsskins/branches/jmo-perspectives/thememanager.py Sat Dec 10 14:33:41 2005 @@ -32,7 +32,7 @@ from cpsskins.elements.interfaces import IFormattable from cpsskins.engines.default.displays.interfaces import IDisplayStorage from cpsskins.engines.default.displays.storage import DisplayStorage -from cpsskins.engines.default.formats.interfaces import IFormatStorage +from cpsskins.engines.default.formats.storage import IFormatStorage from cpsskins.engines.default.formats.storage import FormatStorage from cpsskins.interfaces import IThemeManagement, IImageCache from cpsskins.ontology import isDefault, hasFormat, hasDisplay -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins