From da8c54e0ea5eab286727f559b4a9c139affe30e6 Mon Sep 17 00:00:00 2001 From: helmutm Date: Tue, 20 Jan 2009 20:04:01 +0000 Subject: [PATCH] provide resource standard layout git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3166 fd906abe-77d9-0310-91a1-e0d9ade77398 --- layout/base.py | 3 +- layout/browser/base.py | 85 +++++++++++++++++++++++++++++++++++ layout/browser/concept.py | 53 ++-------------------- layout/browser/configure.zcml | 11 +++++ layout/browser/resource.pt | 4 ++ layout/browser/resource.py | 52 +++++++++++++++++++++ 6 files changed, 157 insertions(+), 51 deletions(-) create mode 100644 layout/browser/base.py create mode 100644 layout/browser/resource.pt create mode 100644 layout/browser/resource.py diff --git a/layout/base.py b/layout/base.py index 16205f8..ac1ae97 100644 --- a/layout/base.py +++ b/layout/base.py @@ -92,7 +92,8 @@ class TargetLayoutInstance(NodeLayoutInstance): return [] result = [] names = region.layouts.keys() - tp = target.context.conceptType + #tp = target.context.conceptType + tp = target.context.getType() for n in tp.getClients(): if n.nodeType == 'info' and n.viewName in names: if pageName != n.pageName: diff --git a/layout/browser/base.py b/layout/browser/base.py new file mode 100644 index 0000000..2c25214 --- /dev/null +++ b/layout/browser/base.py @@ -0,0 +1,85 @@ +# +# Copyright (c) 2009 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 +# + +""" +Base classes for layout-based views. + +$Id$ +""" + +import re + +from zope import component +from zope.cachedescriptors.property import Lazy +from zope.proxy import removeAllProxies +from zope.traversing.browser import absoluteURL + +from loops.common import adapted +from loops.i18n.browser import LanguageInfo +from loops import util + + +class BaseView(object): + + def __init__(self, context, request): + self.context = context # this is the adapted concept! + self.request = request + + @Lazy + def title(self): + return self.context.title + + @Lazy + def description(self): + return self.context.description + + @Lazy + def uid(self): + return util.getUidForObject(self.context.context) + + @Lazy + def menu(self): + return self.node.getMenu() + + @Lazy + def url(self): + return '%s/.%s-%s' % (absoluteURL(self.menu, self.request), + self.context.uid, normalize(self.context.title)) + + def requireDojo(self, *packages): + # TODO: make sure dojo and dojo_require are displayed in page.js + djInfo = self.request.annotations.setdefault('ajax.dojo', {}) + requirements = djInfo.setdefault('requirements', set()) + for p in packages: + requirements.add(p) + + def renderText(self, text, contentType): + typeKey = util.renderingFactories.get(contentType, None) + if typeKey is None: + if contentType == u'text/html': + return util.toUnicode(text) + return u'
%s
' % util.html_quote(util.toUnicode(text)) + source = component.createObject(typeKey, text) + view = component.getMultiAdapter((removeAllProxies(source), self.request)) + return view.render() + + +pattern = re.compile(r'[ /\?\+%]') + +def normalize(text): + return pattern.sub('-', text) diff --git a/layout/browser/concept.py b/layout/browser/concept.py index fe93752..563d6c4 100644 --- a/layout/browser/concept.py +++ b/layout/browser/concept.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2008 Helmut Merz helmutm@cy55.de +# Copyright (c) 2009 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 @@ -29,39 +29,14 @@ from zope.cachedescriptors.property import Lazy from zope.proxy import removeAllProxies from zope.traversing.browser import absoluteURL -from loops.browser.common import BaseView from loops.common import adapted from loops.i18n.browser import LanguageInfo from loops.interfaces import IConcept +from loops.layout.browser.base import BaseView from loops import util -class ConceptView(object): - - def __init__(self, context, request): - self.context = context # this is the adapted concept! - self.request = request - - @Lazy - def title(self): - return self.context.title - - @Lazy - def description(self): - return self.context.description - - @Lazy - def uid(self): - return util.getUidForObject(self.context.context) - - @Lazy - def menu(self): - return self.node.getMenu() - - @Lazy - def url(self): - return '%s/.%s-%s' % (absoluteURL(self.menu, self.request), - self.context.uid, normalize(self.context.title)) +class ConceptView(BaseView): @property def children(self): @@ -70,25 +45,3 @@ class ConceptView(object): view.node = self.node yield view - def requireDojo(self, *packages): - # TODO: make sure dojo and dojo_require are displayed in page.js - djInfo = self.request.annotations.setdefault('ajax.dojo', {}) - requirements = djInfo.setdefault('requirements', set()) - for p in packages: - requirements.add(p) - - def renderText(self, text, contentType): - typeKey = util.renderingFactories.get(contentType, None) - if typeKey is None: - if contentType == u'text/html': - return util.toUnicode(text) - return u'
%s
' % util.html_quote(util.toUnicode(text)) - source = component.createObject(typeKey, text) - view = component.getMultiAdapter((removeAllProxies(source), self.request)) - return view.render() - - -pattern = re.compile(r'[ /\?\+%]') - -def normalize(text): - return pattern.sub('-', text) diff --git a/layout/browser/configure.zcml b/layout/browser/configure.zcml index d902170..12fc4f8 100644 --- a/layout/browser/configure.zcml +++ b/layout/browser/configure.zcml @@ -53,6 +53,13 @@ provides="zope.interface.Interface" factory="loops.layout.browser.concept.ConceptView" /> + + + + + + diff --git a/layout/browser/resource.pt b/layout/browser/resource.pt new file mode 100644 index 0000000..f365f25 --- /dev/null +++ b/layout/browser/resource.pt @@ -0,0 +1,4 @@ + +
+ \ No newline at end of file diff --git a/layout/browser/resource.py b/layout/browser/resource.py new file mode 100644 index 0000000..a6f343a --- /dev/null +++ b/layout/browser/resource.py @@ -0,0 +1,52 @@ +# +# Copyright (c) 2009 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 +# + +""" +Layout-based concept views. + +$Id$ +""" + +import re + +from zope import component +from zope.app.pagetemplate import ViewPageTemplateFile +from zope.cachedescriptors.property import Lazy +from zope.proxy import removeAllProxies +from zope.traversing.browser import absoluteURL + +from cybertools.browser.renderer import RendererFactory +from cybertools.composer.layout.base import Layout +from loops.common import adapted +from loops.i18n.browser import LanguageInfo +from loops.interfaces import IConcept +from loops.layout.browser.base import BaseView +from loops import util + + +resourceRenderers = RendererFactory(ViewPageTemplateFile('resource.pt')) + + +Layout('text.standard', 'center.content', + renderer=resourceRenderers.text, instanceName='target') + + +class TextView(BaseView): + + def render(self): + return self.renderText(self.context.data, self.context.contentType)