From 3a5281b047c596b2a54395ce9f16e84c6392dafb Mon Sep 17 00:00:00 2001 From: helmutm Date: Wed, 5 Apr 2006 07:10:41 +0000 Subject: [PATCH] View/Node: added 'viewer' attribute git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1160 fd906abe-77d9-0310-91a1-e0d9ade77398 --- browser/concept.py | 15 ++++++++------- browser/configure.zcml | 13 +++---------- browser/node.pt | 2 +- browser/node.py | 20 ++++++++++++++++---- browser/node_macros.pt | 15 +++++++++++++++ browser/resource_configure.pt | 4 +++- interfaces.py | 16 ++++++++++------ view.py | 8 ++++++++ 8 files changed, 64 insertions(+), 29 deletions(-) diff --git a/browser/concept.py b/browser/concept.py index fb5af05..442cea3 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -25,7 +25,7 @@ $Id$ from zope.app import zapi from zope.app.catalog.interfaces import ICatalog from zope.app.dublincore.interfaces import ICMFDublinCore -from zope.app.event.objectevent import ObjectCreatedEvent +from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent from zope.app.form.browser.interfaces import ITerms from zope.app.pagetemplate import ViewPageTemplateFile from zope.cachedescriptors.property import Lazy @@ -144,24 +144,25 @@ class ConceptConfigureView(ConceptView): type = ITypeManager(self.context).getType(token) factory = type.factory container = type.defaultContainer - concept = factory(title) + concept = removeSecurityProxy(factory(title)) container[name] = concept if IConcept.providedBy(concept): concept.conceptType = type.typeProvider - notify(ObjectCreatedEvent(removeSecurityProxy(concept))) + notify(ObjectCreatedEvent(concept)) + notify(ObjectModifiedEvent(concept)) assignAs = self.request.get('assignAs', 'child') predicate = request.get('create.predicate') or None if predicate: predicate = removeSecurityProxy( self.loopsRoot.loopsTraverse(predicate)) if assignAs == 'child': - self.context.assignChild(removeSecurityProxy(concept), predicate) + self.context.assignChild(concept, predicate) elif assignAs == 'parent': - self.context.assignParent(removeSecurityProxy(concept), predicate) + self.context.assignParent(concept, predicate) elif assignAs == 'resource': - self.context.assignResource(removeSecurityProxy(concept), predicate) + self.context.assignResource(concept, predicate) elif assignAs == 'concept': - self.context.assignConcept(removeSecurityProxy(concept), predicate) + self.context.assignConcept(concept, predicate) else: raise(BadRequest, 'Illegal assignAs parameter: %s.' % assignAs) diff --git a/browser/configure.zcml b/browser/configure.zcml index 357f88d..de89336 100644 --- a/browser/configure.zcml +++ b/browser/configure.zcml @@ -388,7 +388,7 @@ label="Edit Node" name="edit.html" schema="loops.interfaces.INode" - fields="title description nodeType body" + fields="title description nodeType viewer body" for="loops.interfaces.INode" template="edit.pt" permission="zope.ManageContent" @@ -405,20 +405,13 @@ add="zope.ManageContent" /> - - - - - - + + macro item/macro;"> diff --git a/browser/node.py b/browser/node.py index de67d4e..6284b40 100644 --- a/browser/node.py +++ b/browser/node.py @@ -26,7 +26,7 @@ from zope.cachedescriptors.property import Lazy from zope.app import zapi from zope.app.catalog.interfaces import ICatalog from zope.app.container.browser.contents import JustContents -from zope.app.event.objectevent import ObjectCreatedEvent +from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.intid.interfaces import IIntIds from zope.dottedname.resolve import resolve @@ -46,7 +46,13 @@ from loops.browser.concept import ConceptView class NodeView(BaseView): template = ViewPageTemplateFile('node_macros.pt') - macro = template.macros['content'] + + @Lazy + def macro(self): + macroName = self.request.get('viewer') + if not macroName: + macroName = self.context.viewer or 'content' + return self.template.macros[macroName] @Lazy def item(self): @@ -65,7 +71,11 @@ class NodeView(BaseView): def textItems(self): return [NodeView(child, self.request) for child in self.context.getTextItems()] - + + @Lazy + def pageItems(self): + return [NodeView(child, self.request) + for child in self.context.getPageItems()] @Lazy def nodeType(self): @@ -148,8 +158,9 @@ class NodeView(BaseView): if target is None: target = self.targetObject if target is not None: + name = zapi.getDefaultViewName(target, self.request) targetView = zapi.getMultiAdapter((target, self.request), - name=zapi.getDefaultViewName(target, self.request)) + name=name) return targetView() return u'' @@ -212,6 +223,7 @@ class ConfigureView(NodeView): if IConcept.providedBy(target): target.conceptType = type.typeProvider notify(ObjectCreatedEvent(target)) + notify(ObjectModifiedEvent(target)) self.context.target = target return True diff --git a/browser/node_macros.pt b/browser/node_macros.pt index 6b58772..5b24b8b 100644 --- a/browser/node_macros.pt +++ b/browser/node_macros.pt @@ -84,6 +84,21 @@ + +
+ Listing +

+
+ Item +
+
+ + diff --git a/browser/resource_configure.pt b/browser/resource_configure.pt index a11d52d..b8bc723 100644 --- a/browser/resource_configure.pt +++ b/browser/resource_configure.pt @@ -9,7 +9,9 @@ Concept Title X + tal:attributes="href string:${context/@@absolute_url}/external_edit" + >