use targetView entry in request annotations for calling views declared for adapted concept map objects (i.e. type interfaces)
This commit is contained in:
parent
a06447bade
commit
b686716754
4 changed files with 27 additions and 9 deletions
|
@ -6,6 +6,8 @@ $Id$
|
||||||
1.1
|
1.1
|
||||||
---
|
---
|
||||||
|
|
||||||
|
- use targetView entry in request annotations for calling views declared
|
||||||
|
for adapted concept map objects (i.e. type interfaces)
|
||||||
- Lobo layout: provide new part: image grid; make sure image is not repeated if
|
- Lobo layout: provide new part: image grid; make sure image is not repeated if
|
||||||
it already appears in header part
|
it already appears in header part
|
||||||
- new special view 'listsubobjects' for nodes
|
- new special view 'listsubobjects' for nodes
|
||||||
|
|
|
@ -133,6 +133,7 @@ class BaseView(GenericView, I18NView):
|
||||||
modeName = 'view'
|
modeName = 'view'
|
||||||
|
|
||||||
def __init__(self, context, request):
|
def __init__(self, context, request):
|
||||||
|
context = baseObject(context)
|
||||||
super(BaseView, self).__init__(context, request)
|
super(BaseView, self).__init__(context, request)
|
||||||
# TODO: get rid of removeSecurityProxy() call - not yet...
|
# TODO: get rid of removeSecurityProxy() call - not yet...
|
||||||
self.context = removeSecurityProxy(context)
|
self.context = removeSecurityProxy(context)
|
||||||
|
@ -211,7 +212,7 @@ class BaseView(GenericView, I18NView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def viewAnnotations(self):
|
def viewAnnotations(self):
|
||||||
return self.request.annotations.get('loops.view', {})
|
return self.request.annotations.setdefault('loops.view', {})
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def node(self):
|
def node(self):
|
||||||
|
|
|
@ -234,13 +234,16 @@ class ConceptView(BaseView):
|
||||||
def description(self):
|
def description(self):
|
||||||
return self.adapted.description
|
return self.adapted.description
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def targetUrl(self):
|
||||||
|
return self.nodeView.getUrlForTarget(self.context)
|
||||||
|
|
||||||
def breadcrumbs(self):
|
def breadcrumbs(self):
|
||||||
data = []
|
data = []
|
||||||
if self.breadcrumbsParent is not None:
|
if self.breadcrumbsParent is not None:
|
||||||
data.extend(self.breadcrumbsParent.breadcrumbs())
|
data.extend(self.breadcrumbsParent.breadcrumbs())
|
||||||
if self.context != self.nodeView.targetObject:
|
if self.context != self.nodeView.targetObject:
|
||||||
data.append(dict(label=self.title,
|
data.append(dict(label=self.title, url=self.targetUrl))
|
||||||
url=self.nodeView.getUrlForTarget(self.context)))
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
|
|
|
@ -51,7 +51,7 @@ from cybertools.typology.interfaces import IType, ITypeManager
|
||||||
from cybertools.util.jeep import Jeep
|
from cybertools.util.jeep import Jeep
|
||||||
from cybertools.xedit.browser import ExternalEditorView
|
from cybertools.xedit.browser import ExternalEditorView
|
||||||
from loops.browser.action import actions, DialogAction
|
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.i18n.browser import i18n_macros, LanguageInfo
|
||||||
from loops.interfaces import IConcept, IResource, IDocument, IMediaAsset, INode
|
from loops.interfaces import IConcept, IResource, IDocument, IMediaAsset, INode
|
||||||
from loops.interfaces import IViewConfiguratorSchema
|
from loops.interfaces import IViewConfiguratorSchema
|
||||||
|
@ -204,9 +204,8 @@ class NodeView(BaseView):
|
||||||
name = self.request.get('loops.viewName', '') or self.context.viewName
|
name = self.request.get('loops.viewName', '') or self.context.viewName
|
||||||
if name and '?' in name:
|
if name and '?' in name:
|
||||||
name, params = name.split('?', 1)
|
name, params = name.split('?', 1)
|
||||||
ann = self.request.annotations.get('loops.view', {})
|
ann = self.viewAnnotations
|
||||||
ann['params'] = params
|
ann['params'] = params
|
||||||
self.request.annotations['loops.view'] = ann
|
|
||||||
if name:
|
if name:
|
||||||
adapter = component.queryMultiAdapter(
|
adapter = component.queryMultiAdapter(
|
||||||
(self.context, self.request), name=name)
|
(self.context, self.request), name=name)
|
||||||
|
@ -216,10 +215,13 @@ class NodeView(BaseView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def item(self):
|
def item(self):
|
||||||
|
tv = self.viewAnnotations.get('targetView')
|
||||||
|
if tv is not None:
|
||||||
|
return tv
|
||||||
viewName = self.request.get('loops.viewName') or ''
|
viewName = self.request.get('loops.viewName') or ''
|
||||||
# was there a .target... element in the URL?
|
# was there a .target... element in the URL?
|
||||||
#target = self.virtualTargetObject # ignores page even for direktly assignd target
|
#target = self.virtualTargetObject # ignores page even for direktly assignd target
|
||||||
target = self.request.annotations.get('loops.view', {}).get('target')
|
target = self.viewAnnotations.get('target')
|
||||||
if target is not None:
|
if target is not None:
|
||||||
basicView = component.getMultiAdapter((target, self.request), name=viewName)
|
basicView = component.getMultiAdapter((target, self.request), name=viewName)
|
||||||
# xxx: obsolete when self.targetObject is virtual target:
|
# xxx: obsolete when self.targetObject is virtual target:
|
||||||
|
@ -230,6 +232,9 @@ class NodeView(BaseView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def targetItem(self):
|
def targetItem(self):
|
||||||
|
tv = self.viewAnnotations.get('targetView')
|
||||||
|
if tv is not None:
|
||||||
|
return tv
|
||||||
viewName = self.request.get('loops.viewName') or ''
|
viewName = self.request.get('loops.viewName') or ''
|
||||||
target = self.virtualTargetObject
|
target = self.virtualTargetObject
|
||||||
if target is not None:
|
if target is not None:
|
||||||
|
@ -400,7 +405,7 @@ class NodeView(BaseView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def virtualTargetObject(self):
|
def virtualTargetObject(self):
|
||||||
target = self.request.annotations.get('loops.view', {}).get('target')
|
target = self.viewAnnotations.get('target')
|
||||||
if target is None:
|
if target is None:
|
||||||
target = self.context.target
|
target = self.context.target
|
||||||
if target is not None:
|
if target is not None:
|
||||||
|
@ -417,6 +422,9 @@ class NodeView(BaseView):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def targetView(self, name='index.html', methodName='show'):
|
def targetView(self, name='index.html', methodName='show'):
|
||||||
|
tv = self.viewAnnotations.get('targetView')
|
||||||
|
if tv is not None:
|
||||||
|
return tv
|
||||||
if '?' in name:
|
if '?' in name:
|
||||||
name, params = name.split('?', 1)
|
name, params = name.split('?', 1)
|
||||||
target = self.virtualTargetObject
|
target = self.virtualTargetObject
|
||||||
|
@ -462,6 +470,9 @@ class NodeView(BaseView):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def virtualTarget(self):
|
def virtualTarget(self):
|
||||||
|
tv = self.viewAnnotations.get('targetView')
|
||||||
|
if tv is not None:
|
||||||
|
return tv
|
||||||
return self.getViewForTarget(self.virtualTargetObject)
|
return self.getViewForTarget(self.virtualTargetObject)
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
|
@ -503,6 +514,7 @@ class NodeView(BaseView):
|
||||||
if isinstance(target, BaseView):
|
if isinstance(target, BaseView):
|
||||||
return self.makeTargetUrl(self.url, target.uniqueId, target.title)
|
return self.makeTargetUrl(self.url, target.uniqueId, target.title)
|
||||||
else:
|
else:
|
||||||
|
target = baseObject(target)
|
||||||
return self.makeTargetUrl(self.url, util.getUidForObject(target),
|
return self.makeTargetUrl(self.url, util.getUidForObject(target),
|
||||||
target.title)
|
target.title)
|
||||||
|
|
||||||
|
@ -922,7 +934,7 @@ class NodeTraverser(ItemTraverser):
|
||||||
langInfo = LanguageInfo(self.context, request)
|
langInfo = LanguageInfo(self.context, request)
|
||||||
adTarget = adapted(target, langInfo)
|
adTarget = adapted(target, langInfo)
|
||||||
view = component.queryMultiAdapter((adTarget, request), name=name)
|
view = component.queryMultiAdapter((adTarget, request), name=name)
|
||||||
if view is not None:
|
if isinstance(view, BaseView):
|
||||||
viewAnnotations['targetView'] = view
|
viewAnnotations['targetView'] = view
|
||||||
view.logInfo('NodeTraverser:targetView = %r' % view)
|
view.logInfo('NodeTraverser:targetView = %r' % view)
|
||||||
return self.context
|
return self.context
|
||||||
|
|
Loading…
Add table
Reference in a new issue