From 4f9fa4670c1af37d716399c87e1a1d615627ca70 Mon Sep 17 00:00:00 2001 From: helmutm Date: Wed, 12 Nov 2008 16:57:50 +0000 Subject: [PATCH] work in progress: rearrange package layout git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2978 fd906abe-77d9-0310-91a1-e0d9ade77398 --- layout/base.py | 7 ++- layout/browser.py | 69 ----------------------- layout/browser/__init__.py | 4 ++ layout/browser/browser.py | 110 +++++++++++++++++++++++++++++++++++++ layout/configure.zcml | 26 ++++++++- 5 files changed, 145 insertions(+), 71 deletions(-) delete mode 100644 layout/browser.py create mode 100644 layout/browser/__init__.py create mode 100644 layout/browser/browser.py diff --git a/layout/base.py b/layout/base.py index e4a51da..8f5c496 100644 --- a/layout/base.py +++ b/layout/base.py @@ -22,11 +22,13 @@ Layout node + instance implementations. $Id$ """ +from zope import component from zope.cachedescriptors.property import Lazy from zope.interface import implements from cybertools.composer.layout.base import Layout, LayoutInstance from cybertools.composer.layout.interfaces import ILayoutInstance +from loops.common import adapted from loops.layout.browser import ConceptView from loops.layout.interfaces import ILayoutNode, ILayoutNodeContained from loops.view import Node @@ -70,5 +72,8 @@ class NodeLayoutInstance(LayoutInstance): @Lazy def targetView(self): request = self.view.request - return ConceptView(self.context.target, request, self.context) + target = adapted(self.context.target) + view = component.getMultiAdapter((target, request), name='layout') + view.node = self.context + return view diff --git a/layout/browser.py b/layout/browser.py deleted file mode 100644 index f8e7b2a..0000000 --- a/layout/browser.py +++ /dev/null @@ -1,69 +0,0 @@ -# -# 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 -# - -""" -Layout node views. - -$Id$ -""" - -from zope.cachedescriptors.property import Lazy -from zope.traversing.browser import absoluteURL - -from cybertools.composer.layout.browser.view import Page -from loops.browser.common import BaseView - - -class LayoutNodeView(Page): - - @Lazy - def layoutName(self): - return self.context.viewName or 'page' - - @Lazy - def layoutNames(self): - result = [] - n = self.context - while n is not None: - if n.viewName: - result.append(n.viewName) - n = n.getParentNode() - result.append('page') - return result - - -class ConceptView(object): - - def __init__(self, context, request, node=None): - self.context = context - self.request = request - self.node = node - - @Lazy - def title(self): - return self.context.title - - @Lazy - def url(self): - return absoluteURL(self.node, self.request) - - @property - def children(self): - for c in self.context.getChildren(): - yield ConceptView(c, self.request, self.node) - diff --git a/layout/browser/__init__.py b/layout/browser/__init__.py new file mode 100644 index 0000000..4bc90fb --- /dev/null +++ b/layout/browser/__init__.py @@ -0,0 +1,4 @@ +""" +$Id$ +""" + diff --git a/layout/browser/browser.py b/layout/browser/browser.py new file mode 100644 index 0000000..3fcdc4f --- /dev/null +++ b/layout/browser/browser.py @@ -0,0 +1,110 @@ +# +# 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 +# + +""" +Layout node views. + +$Id$ +""" + +from zope import component +from zope.app.container.traversal import ItemTraverser +from zope.cachedescriptors.property import Lazy +from zope.component import adapts +from zope.interface import implements +from zope.traversing.browser import absoluteURL + +from cybertools.composer.layout.browser.view import Page +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.interfaces import ILayoutNode +from loops.versioning.util import getVersion +from loops import util + + +class LayoutNodeView(Page): + + @Lazy + def layoutName(self): + return self.context.viewName or 'page' + + @Lazy + def layoutNames(self): + result = [] + n = self.context + while n is not None: + if n.viewName: + result.append(n.viewName) + n = n.getParentNode() + result.append('page') + return result + + +class ConceptView(object): + + node = None + + def __init__(self, context, request): + if IConcept.providedBy(context): + self.adapted = adapted(context) + self.context = context + else: + self.adapted = context + self.context = context.context + self.request = request + + @Lazy + def title(self): + return self.context.title + + @Lazy + def url(self): + return '%s/.%s' % (absoluteURL(self.node, self.request), + util.getUidForObject(self.context)) + + @property + def children(self): + for c in self.context.getChildren(): + view = component.getMultiAdapter((adapted(c), self.request), name='layout') + view.node = self.node + yield view + + +class NodeTraverser(ItemTraverser): + + adapts(ILayoutNode) + + def publishTraverse(self, request, name): + if name.startswith('.'): + if len(name) > 1: + uid = int(name[1:]) + target = util.getObjectForUid(uid) + else: + target = self.context.target + if target is not None: + viewAnnotations = request.annotations.setdefault('loops.view', {}) + viewAnnotations['node'] = self.context + target = getVersion(target, request) + target = adapted(target, LanguageInfo(target, request)) + viewAnnotations['target'] = target + return target + #return self.context + obj = super(NodeTraverser, self).publishTraverse(request, name) + return obj diff --git a/layout/configure.zcml b/layout/configure.zcml index 4ab78ff..059d27e 100644 --- a/layout/configure.zcml +++ b/layout/configure.zcml @@ -20,7 +20,7 @@ for="loops.layout.interfaces.ILayoutNode" factory="loops.layout.base.NodeLayoutInstance" /> - + + + + + + + + + + +