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:
parent
56f75689aa
commit
d26d8727e5
4 changed files with 40 additions and 3 deletions
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
@ -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')
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue