allow customizing of (macro) templates when using Zope 2

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@4028 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-10-03 13:38:34 +00:00
parent 56f75689aa
commit d26d8727e5
4 changed files with 40 additions and 3 deletions

View file

@ -3,7 +3,8 @@
<body> <body>
<div metal:fill-slot="main"> <div metal:fill-slot="main"
tal:define="view view/wrap">
<metal:content use-macro="view/contentMacro" /> <metal:content use-macro="view/contentMacro" />
</div> </div>

View file

@ -39,6 +39,9 @@ class BaseView(object):
resource_prefix = '/@@/' resource_prefix = '/@@/'
view_mode = 'view' view_mode = 'view'
def wrap(self):
return self
def __call__(self): def __call__(self):
return self.index(self) return self.index(self)

View file

@ -149,14 +149,14 @@ class WikiPageView(WikiBaseView):
title = form.get('title') title = form.get('title')
if title and title != self.context.title: if title and title != self.context.title:
self.context.title = title self.context.title = title
text = form.get('text') text = toUnicode(form.get('text'))
if text and text != self.context.text: if text and text != self.context.text:
self.context.text = text self.context.text = text
notify(ObjectModifiedEvent(self.context)) notify(ObjectModifiedEvent(self.context))
return True return True
def render(self): def render(self):
return self.context.render(self.request) return toUnicode(self.context.render(self.request))
def edit(self): def edit(self):
self.view_mode = 'edit' self.view_mode = 'edit'
@ -164,3 +164,13 @@ class WikiPageView(WikiBaseView):
def showEditButton(self): def showEditButton(self):
return self.view_mode != 'edit' return self.view_mode != 'edit'
def toUnicode(text, encoding='UTF-8'):
if not isinstance(text, str):
return text
try:
return text.decode(encoding)
except UnicodeDecodeError:
return text.decode('ISO8859-15')

View file

@ -22,6 +22,7 @@ Base classes for views.
$Id$ $Id$
""" """
from Acquisition import aq_chain
from Products.Five import BrowserView from Products.Five import BrowserView
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
@ -34,7 +35,29 @@ zmi_page = ViewPageTemplateFile('main_zmi.pt')
class BaseView(BrowserView, BaseView): class BaseView(BrowserView, BaseView):
# make Zope 2 restricted Python happy
__allow_access_to_unprotected_subobjects__ = 1
def wrap(self):
if len(aq_chain(self)) < 2:
return self.__of__(self.context)
return self
resource_prefix = '/++resource++' resource_prefix = '/++resource++'
template_name = 'view_macros'
content_renderer = 'content'
def defaultMacros(self):
template = getattr(self.context, self.template_name, None)
if template is None:
return super(BaseView, self).defaultMacros()
return template.macros
def contentMacro(self):
macroName = self.content_renderer
macro = self.defaultMacros().get(macroName)
if macro is None:
return super(BaseView, self).defaultMacros()[macroName]
return macro
# generic views for use with generic persistent objects with type-based adapters # generic views for use with generic persistent objects with type-based adapters