provide RendererFactory class that allows transparent dynamic retrieval of macros
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2905 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									d44621628a
								
							
						
					
					
						commit
						f58b622ddd
					
				
					 5 changed files with 60 additions and 11 deletions
				
			
		
							
								
								
									
										46
									
								
								browser/renderer.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								browser/renderer.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -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 ('<RendererFactory, template=%r, macros=%r>' % | ||||||
|  |                     (self.template, self.template.macros.keys())) | ||||||
|  | @ -1 +1 @@ | ||||||
| <metal:render use-macro="nocall:view/renderer" /> | <metal:render use-macro="view/renderer" /> | ||||||
|  |  | ||||||
|  | @ -24,28 +24,29 @@ $Id$ | ||||||
| 
 | 
 | ||||||
| from zope.app.pagetemplate import ViewPageTemplateFile | from zope.app.pagetemplate import ViewPageTemplateFile | ||||||
| 
 | 
 | ||||||
|  | from cybertools.browser.renderer import RendererFactory | ||||||
| from cybertools.composer.layout.base import Layout | from cybertools.composer.layout.base import Layout | ||||||
| from cybertools.composer.layout.browser.standard import standardRenderers | 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'], | page = Layout('page', 'page', renderer=standardRenderers['page'], | ||||||
|               sublayouts=set(['css.liquid', 'body.liquid'])) |               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', | top_actions = Layout('top_actions.default', 'body.top_actions', | ||||||
|                      renderer=defaultRenderers['top_actions']) |                      renderer=defaultRenderers.top_actions) | ||||||
| 
 | 
 | ||||||
| column1 = Layout('column1.default', 'body.column1', | column1 = Layout('column1.default', 'body.column1', | ||||||
|                  renderer=defaultRenderers['column1']) |                  renderer=defaultRenderers.column1) | ||||||
| 
 | 
 | ||||||
| content = Layout('content.default', 'body.content', | content = Layout('content.default', 'body.content', | ||||||
|                  renderer=defaultRenderers['content']) |                  renderer=defaultRenderers.content) | ||||||
| 
 | 
 | ||||||
| column2 = Layout('column2.default', 'body.column2', | 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) | ||||||
|  |  | ||||||
|  | @ -28,15 +28,16 @@ from zope import component | ||||||
| from zope.interface import implements | from zope.interface import implements | ||||||
| 
 | 
 | ||||||
| from cybertools.browser.liquid import Liquid | from cybertools.browser.liquid import Liquid | ||||||
|  | from cybertools.browser.renderer import RendererFactory | ||||||
| from cybertools.composer.layout.base import Layout | from cybertools.composer.layout.base import Layout | ||||||
| from cybertools.composer.layout.browser.standard import standardRenderers | 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'], | css = Layout('css.liquid', 'page.css', renderer=standardRenderers['css'], | ||||||
|              media='all', resource='liquid.css', skin=Liquid) |              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) |               skin=Liquid) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,8 +24,9 @@ $Id$ | ||||||
| 
 | 
 | ||||||
| from zope.app.pagetemplate import ViewPageTemplateFile | from zope.app.pagetemplate import ViewPageTemplateFile | ||||||
| 
 | 
 | ||||||
|  | from cybertools.browser.renderer import RendererFactory | ||||||
| from cybertools.composer.layout.base import Layout | from cybertools.composer.layout.base import Layout | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| standardRenderers = ViewPageTemplateFile('standard.pt').macros | standardRenderers = RendererFactory(ViewPageTemplateFile('standard.pt')) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm