allow name-based linking e.g. via .loops/resources/...
This commit is contained in:
parent
48e45941b8
commit
48caf96670
1 changed files with 26 additions and 8 deletions
|
@ -948,7 +948,8 @@ class NodeTraverser(ItemTraverser):
|
||||||
if context.nodeType == 'menu':
|
if context.nodeType == 'menu':
|
||||||
setViewConfiguration(context, request)
|
setViewConfiguration(context, request)
|
||||||
if name == '.loops':
|
if name == '.loops':
|
||||||
return self.context.getLoopsRoot()
|
name = self.getTargetUid(request)
|
||||||
|
#return self.context.getLoopsRoot()
|
||||||
if name.startswith('.'):
|
if name.startswith('.'):
|
||||||
name = self.cleanUpTraversalStack(request, name)[1:]
|
name = self.cleanUpTraversalStack(request, name)[1:]
|
||||||
target = self.getTarget(name)
|
target = self.getTarget(name)
|
||||||
|
@ -975,17 +976,34 @@ class NodeTraverser(ItemTraverser):
|
||||||
obj = super(NodeTraverser, self).publishTraverse(request, name)
|
obj = super(NodeTraverser, self).publishTraverse(request, name)
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
def getTargetUid(self, request):
|
||||||
|
parent = self.context.getLoopsRoot()
|
||||||
|
stack = request._traversal_stack
|
||||||
|
for i in range(2):
|
||||||
|
name = stack.pop()
|
||||||
|
obj = parent.get(name)
|
||||||
|
if not obj:
|
||||||
|
return name
|
||||||
|
parent = obj
|
||||||
|
return '.' + util.getUidForObject(obj)
|
||||||
|
|
||||||
def cleanUpTraversalStack(self, request, name):
|
def cleanUpTraversalStack(self, request, name):
|
||||||
traversalStack = request._traversal_stack
|
#traversalStack = request._traversal_stack
|
||||||
while traversalStack and traversalStack[0].startswith('.'):
|
#while traversalStack and traversalStack[0].startswith('.'):
|
||||||
# skip obsolete target references in the url
|
# skip obsolete target references in the url
|
||||||
name = traversalStack.pop(0)
|
# name = traversalStack.pop(0)
|
||||||
traversedNames = request._traversed_names
|
traversedNames = request._traversed_names
|
||||||
if traversedNames:
|
for n in list(traversedNames):
|
||||||
lastTraversed = traversedNames[-1]
|
if n.startswith('.'):
|
||||||
if lastTraversed.startswith('.') and lastTraversed != name:
|
# remove obsolete target refs
|
||||||
|
traversedNames.remove(n)
|
||||||
|
#if traversedNames:
|
||||||
|
# lastTraversed = traversedNames[-1]
|
||||||
|
# if lastTraversed.startswith('.') and lastTraversed != name:
|
||||||
# let <base .../> tag show the current object
|
# let <base .../> tag show the current object
|
||||||
traversedNames[-1] = name
|
# traversedNames[-1] = name
|
||||||
|
# let <base .../> tag show the current object
|
||||||
|
traversedNames.append(name)
|
||||||
return name
|
return name
|
||||||
|
|
||||||
def getTarget(self, name):
|
def getTarget(self, name):
|
||||||
|
|
Loading…
Add table
Reference in a new issue