diff --git a/CHANGES.txt b/CHANGES.txt index 68216b5..ed4e35b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,8 +6,13 @@ $Id$ 1.1 --- +<<<<<<< HEAD - provide controlling of rendering macro via field instance method getRenderer() - add getRelations() method to child relation set +======= +- use targetView entry in request annotations for calling views declared + for adapted concept map objects (i.e. type interfaces) +>>>>>>> master - Lobo layout: provide new part: image grid; make sure image is not repeated if it already appears in header part - new special view 'listsubobjects' for nodes diff --git a/browser/common.py b/browser/common.py index eb48a6e..641ee5f 100644 --- a/browser/common.py +++ b/browser/common.py @@ -131,6 +131,7 @@ class BaseView(GenericView, I18NView): actions = {} icon = None modeName = 'view' + isToplevel = False def __init__(self, context, request): context = baseObject(context) diff --git a/browser/concept.py b/browser/concept.py index 6d349d2..9265492 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -234,13 +234,16 @@ class ConceptView(BaseView): def description(self): return self.adapted.description + @Lazy + def targetUrl(self): + return self.nodeView.getUrlForTarget(self.context) + def breadcrumbs(self): data = [] if self.breadcrumbsParent is not None: data.extend(self.breadcrumbsParent.breadcrumbs()) if self.context != self.nodeView.targetObject: - data.append(dict(label=self.title, - url=self.nodeView.getUrlForTarget(self.context))) + data.append(dict(label=self.title, url=self.targetUrl)) return data @Lazy diff --git a/browser/node.py b/browser/node.py index 051e2f0..ce9063c 100644 --- a/browser/node.py +++ b/browser/node.py @@ -51,7 +51,7 @@ from cybertools.typology.interfaces import IType, ITypeManager from cybertools.util.jeep import Jeep from cybertools.xedit.browser import ExternalEditorView from loops.browser.action import actions, DialogAction -from loops.common import adapted, AdapterBase +from loops.common import adapted, AdapterBase, baseObject from loops.i18n.browser import i18n_macros, LanguageInfo from loops.interfaces import IConcept, IResource, IDocument, IMediaAsset, INode from loops.interfaces import IViewConfiguratorSchema @@ -83,6 +83,13 @@ class NodeView(BaseView): viewConfig = getViewConfiguration(context, request) self.setSkin(viewConfig.get('skinName')) + def __call__(self, *args, **kw): + tv = self.viewAnnotations.get('targetView') + if tv is not None: + if tv.isToplevel: + return tv(*args, **kw) + return super(NodeView, self).__call__(*args, **kw) + @Lazy def macro(self): return self.template.macros['content'] @@ -422,9 +429,10 @@ class NodeView(BaseView): return None def targetView(self, name='index.html', methodName='show'): - tv = self.viewAnnotations.get('targetView') - if tv is not None: - return tv + if name == 'index.html': # only when called for default view + tv = self.viewAnnotations.get('targetView') + if tv is not None: + return tv() if '?' in name: name, params = name.split('?', 1) target = self.virtualTargetObject @@ -514,6 +522,7 @@ class NodeView(BaseView): if isinstance(target, BaseView): return self.makeTargetUrl(self.url, target.uniqueId, target.title) else: + target = baseObject(target) return self.makeTargetUrl(self.url, util.getUidForObject(target), target.title)