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" />
-
+
+
+
+
+
+
+
+
+
+
+