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>
|
||||
|
||||
<div metal:fill-slot="main">
|
||||
<div metal:fill-slot="main"
|
||||
tal:define="view view/wrap">
|
||||
<metal:content use-macro="view/contentMacro" />
|
||||
</div>
|
||||
|
||||
|
|
|
@ -39,6 +39,9 @@ class BaseView(object):
|
|||
resource_prefix = '/@@/'
|
||||
view_mode = 'view'
|
||||
|
||||
def wrap(self):
|
||||
return self
|
||||
|
||||
def __call__(self):
|
||||
return self.index(self)
|
||||
|
||||
|
|
|
@ -149,14 +149,14 @@ class WikiPageView(WikiBaseView):
|
|||
title = form.get('title')
|
||||
if title and title != self.context.title:
|
||||
self.context.title = title
|
||||
text = form.get('text')
|
||||
text = toUnicode(form.get('text'))
|
||||
if text and text != self.context.text:
|
||||
self.context.text = text
|
||||
notify(ObjectModifiedEvent(self.context))
|
||||
return True
|
||||
|
||||
def render(self):
|
||||
return self.context.render(self.request)
|
||||
return toUnicode(self.context.render(self.request))
|
||||
|
||||
def edit(self):
|
||||
self.view_mode = 'edit'
|
||||
|
@ -164,3 +164,13 @@ class WikiPageView(WikiBaseView):
|
|||
|
||||
def showEditButton(self):
|
||||
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$
|
||||
"""
|
||||
|
||||
from Acquisition import aq_chain
|
||||
from Products.Five import BrowserView
|
||||
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
|
||||
|
||||
|
@ -34,7 +35,29 @@ zmi_page = ViewPageTemplateFile('main_zmi.pt')
|
|||
|
||||
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++'
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue