diff --git a/composer/layout/README.txt b/composer/layout/README.txt index ce998f7..6b8b1a0 100644 --- a/composer/layout/README.txt +++ b/composer/layout/README.txt @@ -7,8 +7,10 @@ Layout Management >>> from zope import component >>> from zope.interface import Interface + >>> from cybertools.composer.layout.base import LayoutManager + >>> component.provideUtility(LayoutManager()) + >>> from cybertools.composer.layout.base import Layout, LayoutInstance - >>> from cybertools.composer.layout.region import Region, regions Browser Views @@ -25,16 +27,12 @@ Browser Views >>> bodyLayout = Layout() >>> bodyLayout.renderer = ViewPageTemplateFile('browser/liquid/body.pt').macros['body'] - >>> bodyRegion = Region('body') - >>> bodyRegion.layouts.append(LayoutInstance(bodyLayout)) - >>> regions['page.body'] = bodyRegion + >>> LayoutInstance(bodyLayout).registerFor('page.body') >>> standardRenderers = ViewPageTemplateFile('browser/standard.pt').macros >>> footerLayout = Layout() >>> footerLayout.renderer = standardRenderers['footer'] - >>> footerRegion = Region('footer') - >>> footerRegion.layouts.append(LayoutInstance(footerLayout)) - >>> regions['body.footer'] = footerRegion + >>> LayoutInstance(footerLayout).registerFor('body.footer') >>> from cybertools.composer.layout.browser.view import Page >>> from zope.publisher.browser import TestRequest diff --git a/composer/layout/base.py b/composer/layout/base.py index f0d4ca4..b40a8c2 100644 --- a/composer/layout/base.py +++ b/composer/layout/base.py @@ -22,15 +22,29 @@ Basic classes for layouts and layout components. $Id$ """ +from zope import component from zope.interface import implements from cybertools.composer.base import Component, Element, Compound from cybertools.composer.base import Template +from cybertools.composer.layout.interfaces import ILayoutManager from cybertools.composer.layout.interfaces import ILayout, ILayoutInstance -from cybertools.composer.layout.interfaces import IRegion +from cybertools.composer.layout.region import Region from cybertools.util.jeep import Jeep +class LayoutManager(object): + + implements(ILayoutManager) + + def __init__(self): + self.regions = {} + + def register(self, layout, regionName): + region = self.regions.setdefault(regionName, Region(regionName)) + region.layouts.append(layout) + + class Layout(Template): implements(ILayout) @@ -48,21 +62,10 @@ class LayoutInstance(object): self.template = template self.context = context + def registerFor(self, regionName): + manager = component.getUtility(ILayoutManager) + manager.register(self, regionName) + @property def renderer(self): return self.template.renderer - - -class Region(object): - - implements(IRegion) - - allowedLayoutCategories = None - - def __init__(self, name): - self.name = name - - @property - def layouts(self): - return [] - diff --git a/composer/layout/browser/liquid/body.pt b/composer/layout/browser/liquid/body.pt index de854d7..a10099c 100644 --- a/composer/layout/browser/liquid/body.pt +++ b/composer/layout/browser/liquid/body.pt @@ -1,7 +1,7 @@ - +