diff --git a/browser/common.py b/browser/common.py index dd8a2e5..019769c 100644 --- a/browser/common.py +++ b/browser/common.py @@ -109,6 +109,11 @@ class BaseView(GenericView): except ForbiddenAttribute: # ignore when testing pass + @Lazy + def target(self): + # allow for having a separate object the view acts upon + return self.context + def setSkin(self, skinName): skin = None if skinName and IView.providedBy(self.context): @@ -279,33 +284,38 @@ class BaseView(GenericView): @Lazy def versionId(self): - versionable = IVersionable(self.context, None) + #versionable = IVersionable(self.context, None) + versionable = IVersionable(self.target, None) return versionable and versionable.versionId or '' @Lazy def currentVersionId(self): - versionable = IVersionable(self.context, None) + #versionable = IVersionable(self.context, None) + versionable = IVersionable(self.target, None) return versionable and versionable.currentVersion.versionId or '' @Lazy def hasVersions(self): - versionable = IVersionable(self.context, None) + #versionable = IVersionable(self.context, None) + versionable = IVersionable(self.target, None) return versionable and len(versionable.versions) > 1 or False @Lazy def versionInfo(self): if not self.useVersioning: return None - context = self.context - versionable = IVersionable(context, None) + #context = self.context + #versionable = IVersionable(context, None) + target = self.target + versionable = IVersionable(target, None) if versionable is None: return '' versionId = versionable.versionId td = component.getUtility(ITranslationDomain, _._domain) - current = ((versionable.currentVersion == context) + current = ((versionable.currentVersion == target) and td.translate(_(u'current'), context=self.request) or u'') - released = ((versionable.releasedVersion == context) + released = ((versionable.releasedVersion == target) and td.translate(_(u'released'), context=self.request) or u'') if not current and not released: diff --git a/browser/node.py b/browser/node.py index d421f25..674ab7f 100644 --- a/browser/node.py +++ b/browser/node.py @@ -53,6 +53,7 @@ from loops import util from loops.util import _ from loops.browser.common import BaseView from loops.browser.concept import ConceptView +from loops.versioning.util import getVersion node_macros = ViewPageTemplateFile('node_macros.pt') @@ -148,25 +149,33 @@ class NodeView(BaseView): def targetObject(self): # xxx: use virtualTargetObject #return self.virtualTargetObject - return self.context.target + target = self.context.target + if target is not None: + target = getVersion(target, self.request) + return target @Lazy - def target(self): + def targetObjectView(self): obj = self.targetObject if obj is not None: basicView = zapi.getMultiAdapter((obj, self.request)) basicView._viewName = self.context.viewName return basicView.view + #@Lazy + #def target(self): + # # obsolete and confusing - TODO: remove... + # return self.targetObjectView + @Lazy def targetUrl(self): - t = self.target + t = self.targetObjectView if t is not None: return '%s/.target%s' % (self.url, t.uniqueId) return '' def renderTarget(self): - target = self.target + target = self.targetObjectView return target is not None and target.render() or u'' @Lazy @@ -256,6 +265,15 @@ class NodeView(BaseView): # virtual target support + @Lazy + def virtualTargetObject(self): + target = self.request.annotations.get('loops.view', {}).get('target') + if target is None: + target = self.context.target + if target is not None: + target = getVersion(target, self.request) + return target + def targetView(self, name='index.html', methodName='show'): target = self.virtualTargetObject if target is not None: @@ -286,13 +304,6 @@ class NodeView(BaseView): def targetDownload(self): return self.targetView('download.html', 'download') - @Lazy - def virtualTargetObject(self): - target = self.request.annotations.get('loops.view', {}).get('target') - if target is None: - target = self.context.target - return target - @Lazy def virtualTarget(self): obj = self.virtualTargetObject diff --git a/browser/node_macros.pt b/browser/node_macros.pt index 3e3fdde..412bee2 100644 --- a/browser/node_macros.pt +++ b/browser/node_macros.pt @@ -23,7 +23,7 @@ tal:content="structure body"> The body -
Node Body
-
@@ -131,7 +131,7 @@ + tal:define="target nocall:item/targetObjectView">