Author: jmorliaguet Date: Sun Jul 2 22:38:26 2006 New Revision: 3591 Removed: cpsskins/branches/paris-sprint-2006/configuration/engines/configure.zcml Modified: cpsskins/branches/paris-sprint-2006/browser/rendering/__init__.py cpsskins/branches/paris-sprint-2006/browser/rendering/configure.zcml cpsskins/branches/paris-sprint-2006/browser/rendering/renderer.py cpsskins/branches/paris-sprint-2006/configuration/configure.zcml cpsskins/branches/paris-sprint-2006/configuration/engines/__init__.py cpsskins/branches/paris-sprint-2006/locations/sources.py cpsskins/branches/paris-sprint-2006/standard/filters/effect/__init__.py cpsskins/branches/paris-sprint-2006/standard/filters/widget/__init__.py cpsskins/branches/paris-sprint-2006/standard/filters/widget/widgets.css cpsskins/branches/paris-sprint-2006/standard/filters/widget/widgets.py
Log: - fixed bugs in the rendering of widgets - moved the ++engine++ traversal adapter to browser/rendering Modified: cpsskins/branches/paris-sprint-2006/browser/rendering/__init__.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/rendering/__init__.py (original) +++ cpsskins/branches/paris-sprint-2006/browser/rendering/__init__.py Sun Jul 2 22:38:26 2006 @@ -17,3 +17,13 @@ """ __docformat__ = "reStructuredText" +from zope.traversing.namespace import view + +# ++engine++ traverser + +class engine(view): + + def traverse(self, name, ignored): + self.request.annotations['cpsskins.engine'] = name + return self.context + Modified: cpsskins/branches/paris-sprint-2006/browser/rendering/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/rendering/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/browser/rendering/configure.zcml Sun Jul 2 22:38:26 2006 @@ -10,4 +10,21 @@ permission="zope.Public" /> + <!-- /++engine++.../ traverser --> + + <adapter + for="*" + name="engine" + provides="zope.traversing.interfaces.ITraversable" + factory=".engine" + /> + + <view + for="*" + name="engine" + type="cpsskins.browser.skin.cpsskins" + provides="zope.traversing.interfaces.ITraversable" + factory=".engine" + /> + </configure> 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 Sun Jul 2 22:38:26 2006 @@ -70,6 +70,8 @@ # apply all the filters in sequence for f in self._getFilters(info): markup = f(markup, info) + if not isinstance(markup, unicode): + logger.warning("%s did not return a unicode string.", f) return markup @@ -85,7 +87,7 @@ # look for renderers associated to the element's content type type = IType(element) iface = type.getContentType() - name = engine + '.renderer' + name = engine + u'.renderer' renderer = queryUtility(iface, name) if renderer is None: # fall back to the element's resource type @@ -126,7 +128,7 @@ # the adapted object is a URI which must be resolved if isinstance(adapted, basestring): - adapted = resources.resolve(adapted, element) + adapted = resources.resolve(uri=adapted, context=element) # get the adapter filter = queryMultiAdapter((adapted,), IFilterView, Modified: cpsskins/branches/paris-sprint-2006/configuration/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/configuration/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/configuration/configure.zcml Sun Jul 2 22:38:26 2006 @@ -2,6 +2,4 @@ <include package=".i18n" /> - <include package=".engines" /> - </configure> Modified: cpsskins/branches/paris-sprint-2006/configuration/engines/__init__.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/configuration/engines/__init__.py (original) +++ cpsskins/branches/paris-sprint-2006/configuration/engines/__init__.py Sun Jul 2 22:38:26 2006 @@ -11,20 +11,10 @@ # FOR A PARTICULAR PURPOSE. # ############################################################################## -"""Rendering engine traverser /++engine++name +""" $Id$ """ __docformat__ = "reStructuredText" -from zope.traversing.namespace import view - -# ++engine++ traverser -class engine(view): - - def traverse(self, name, ignored): - self.request.annotations['cpsskins.engine'] = name - - return self.context - Modified: cpsskins/branches/paris-sprint-2006/locations/sources.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/locations/sources.py (original) +++ cpsskins/branches/paris-sprint-2006/locations/sources.py Sun Jul 2 22:38:26 2006 @@ -79,8 +79,9 @@ choices[perspective.name] = perspective.name elif root == u'engines': - # FIXME + # FIXME: hardcoded choices[u'default'] = u'default' + choices[u'tableless'] = u'tableless' return iter( [SimpleTerm(value=k, title=v) for k, v in choices.items()]) Modified: cpsskins/branches/paris-sprint-2006/standard/filters/effect/__init__.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/filters/effect/__init__.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/filters/effect/__init__.py Sun Jul 2 22:38:26 2006 @@ -57,7 +57,7 @@ element = info.element if not (PILImage and IImage.providedBy(data)): - return data + return markup new_size = (context.width, context.height) if context.keep_ratio: @@ -86,7 +86,7 @@ except IOError: logger.warning("Effect filter: the image in '%s' " "could not be opened.", repr(element)) - return data + return markup else: if new_size == (0, 0): image = Image(image_io) @@ -97,7 +97,7 @@ data.path = './cpsskins_getimage?key=%s' % key data.url = '' # The cached image may be stored on an external server info.data = data - return '' + return markup def _resize(self, im, size): new_data = StringIO() Modified: cpsskins/branches/paris-sprint-2006/standard/filters/widget/__init__.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/filters/widget/__init__.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/filters/widget/__init__.py Sun Jul 2 22:38:26 2006 @@ -66,6 +66,7 @@ # look for a widget specific to the engine factory = queryMultiAdapter((data, request), IWidgetView, name='%s-%s' % (engine, type)) + # found a factory if factory is not None: break Modified: cpsskins/branches/paris-sprint-2006/standard/filters/widget/widgets.css ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/filters/widget/widgets.css (original) +++ cpsskins/branches/paris-sprint-2006/standard/filters/widget/widgets.css Sun Jul 2 22:38:26 2006 @@ -14,6 +14,9 @@ display: inline; } +div.standardHorizontalScrollbar { + overflow-x: scroll; +} /* Box decoration */ Modified: cpsskins/branches/paris-sprint-2006/standard/filters/widget/widgets.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/filters/widget/widgets.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/filters/widget/widgets.py Sun Jul 2 22:38:26 2006 @@ -26,7 +26,7 @@ """ markup = '' # the content will be inserted in %(content)s - def __call__(self, markup, info, **kw): + def __call__(self, markup, info): markup = self.markup % {'content': markup} # TODO: rendering optional link return markup @@ -39,7 +39,7 @@ separator = '' # Optional end = '' # Optional - def __call__(self, markup, info, **kw): + def __call__(self, markup, info): start = self.start repeat = self.repeat separator = self.separator @@ -81,26 +81,32 @@ </div> """ - def __call__(self, markup, info, **kw): + def __call__(self, markup, info): return '<div>%s</div>' % markup class PlainImage(WidgetView): """Display an image with minimal formatting """ - def __call__(self, markup, info, **kw): + preview = u'<img src="" alt="" />' + + def __call__(self, markup, info): return Image(self.context, self.request)(info.data) class PlainMenuItem(WidgetView): """Display an item with minimal formatting """ - def __call__(self, markup, info, **kw): + preview = u'<a href="">Item</a>' + + def __call__(self, markup, info): data = info.data return u'<a href="%s">%s</a>' % (data.url, data.title) class PlainMenuItems(WidgetView): """Display a series of items with minimal formatting """ - def __call__(self, markup, info, **kw): + preview = u'<a href="">Item 1</a> <a href="">Item 2</a>' + + def __call__(self, markup, info): data = info.data markup = [] items_append = markup.append @@ -114,9 +120,9 @@ class Image(WidgetView): """Display an image """ - preview = u'<img src="#" alt="" style="border: none" />' + preview = u'<img src="" alt="" style="border: none" />' - def __call__(self, markup, info, **kw): + def __call__(self, markup, info): data = info.data markup = '' url = data.path or data.url @@ -205,10 +211,9 @@ '<a label="link" href="#">some link</a>' \ '</fieldset>' - def __call__(self, markup, info, **kw): - data = info.data + def __call__(self, markup, info): metadata = info.metadata - title = metadata and metadata.title or '' + title = metadata and metadata.title or u'' return '<fieldset><legend>%s</legend>%s</fieldset>' % ( title, PlainHTML(self.context, self.request)(markup, info)) @@ -216,8 +221,8 @@ class HorizontalScrollBar(HTMLView): """Display horizontal scroll bars in case of horizontal overflow """ - markup = u'<div style="overflow-x:scroll;">%(content)s</div>' - preview = u'<div label="box" style="overflow-x:scroll;">Box content</div>' + markup = u'<div>%(content)s</div>' + preview = u'<div label="box" style="overflow-x: scroll;">Box content</div>' class PageBlockFrame(HTMLView): """Display a <table><tr> tag -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins