diff --git a/browser/renderer.py b/browser/renderer.py new file mode 100644 index 0000000..24fabe4 --- /dev/null +++ b/browser/renderer.py @@ -0,0 +1,46 @@ +# +# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Use ZPT macros as layout renderers. + +$Id$ +""" + + +class RendererFactory(object): + """ Provider for ZPT macros. + """ + + def __init__(self, template): + self.template = template + + def get(self, key, default=None): + return self.template.macros.get(key, default) + + def __getitem__(self, key): + return self.template.macros[key] + + def __getattr__(self, key): + """ Convenience method for retrieving callable renderer for layout. + """ + return lambda key=key: self[key] + + def __repr__(self): + return ('' % + (self.template, self.template.macros.keys())) diff --git a/composer/layout/browser/base.pt b/composer/layout/browser/base.pt index 5924365..bc62907 100644 --- a/composer/layout/browser/base.pt +++ b/composer/layout/browser/base.pt @@ -1 +1 @@ - + diff --git a/composer/layout/browser/default.py b/composer/layout/browser/default.py index 1b56aa5..28f5697 100644 --- a/composer/layout/browser/default.py +++ b/composer/layout/browser/default.py @@ -24,28 +24,29 @@ $Id$ from zope.app.pagetemplate import ViewPageTemplateFile +from cybertools.browser.renderer import RendererFactory from cybertools.composer.layout.base import Layout from cybertools.composer.layout.browser.standard import standardRenderers -defaultRenderers = ViewPageTemplateFile('default.pt').macros +defaultRenderers = RendererFactory(ViewPageTemplateFile('default.pt')) page = Layout('page', 'page', renderer=standardRenderers['page'], sublayouts=set(['css.liquid', 'body.liquid'])) -logo = Layout('logo.default', 'body.logo', renderer=defaultRenderers['logo']) +logo = Layout('logo.default', 'body.logo', renderer=defaultRenderers.logo) top_actions = Layout('top_actions.default', 'body.top_actions', - renderer=defaultRenderers['top_actions']) + renderer=defaultRenderers.top_actions) column1 = Layout('column1.default', 'body.column1', - renderer=defaultRenderers['column1']) + renderer=defaultRenderers.column1) content = Layout('content.default', 'body.content', - renderer=defaultRenderers['content']) + renderer=defaultRenderers.content) column2 = Layout('column2.default', 'body.column2', - renderer=defaultRenderers['column2']) + renderer=defaultRenderers.column2) -footer = Layout('footer.default', 'body.footer', renderer=defaultRenderers['footer']) +footer = Layout('footer.default', 'body.footer', renderer=defaultRenderers.footer) diff --git a/composer/layout/browser/liquid/default.py b/composer/layout/browser/liquid/default.py index a04fe34..98caa3a 100644 --- a/composer/layout/browser/liquid/default.py +++ b/composer/layout/browser/liquid/default.py @@ -28,15 +28,16 @@ from zope import component from zope.interface import implements from cybertools.browser.liquid import Liquid +from cybertools.browser.renderer import RendererFactory from cybertools.composer.layout.base import Layout from cybertools.composer.layout.browser.standard import standardRenderers -defaultRenderers = ViewPageTemplateFile('default.pt').macros +defaultRenderers = RendererFactory(ViewPageTemplateFile('default.pt')) css = Layout('css.liquid', 'page.css', renderer=standardRenderers['css'], media='all', resource='liquid.css', skin=Liquid) -body = Layout('body.liquid', 'page.body', renderer=defaultRenderers['body'], +body = Layout('body.liquid', 'page.body', renderer=defaultRenderers.body, skin=Liquid) diff --git a/composer/layout/browser/standard.py b/composer/layout/browser/standard.py index 4c0aee4..886b558 100644 --- a/composer/layout/browser/standard.py +++ b/composer/layout/browser/standard.py @@ -24,8 +24,9 @@ $Id$ from zope.app.pagetemplate import ViewPageTemplateFile +from cybertools.browser.renderer import RendererFactory from cybertools.composer.layout.base import Layout -standardRenderers = ViewPageTemplateFile('standard.pt').macros +standardRenderers = RendererFactory(ViewPageTemplateFile('standard.pt'))