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':
|
||||
setViewConfiguration(context, request)
|
||||
if name == '.loops':
|
||||
return self.context.getLoopsRoot()
|
||||
name = self.getTargetUid(request)
|
||||
#return self.context.getLoopsRoot()
|
||||
if name.startswith('.'):
|
||||
name = self.cleanUpTraversalStack(request, name)[1:]
|
||||
target = self.getTarget(name)
|
||||
|
@ -975,17 +976,34 @@ class NodeTraverser(ItemTraverser):
|
|||
obj = super(NodeTraverser, self).publishTraverse(request, name)
|
||||
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):
|
||||
traversalStack = request._traversal_stack
|
||||
while traversalStack and traversalStack[0].startswith('.'):
|
||||
#traversalStack = request._traversal_stack
|
||||
#while traversalStack and traversalStack[0].startswith('.'):
|
||||
# skip obsolete target references in the url
|
||||
name = traversalStack.pop(0)
|
||||
# name = traversalStack.pop(0)
|
||||
traversedNames = request._traversed_names
|
||||
if traversedNames:
|
||||
lastTraversed = traversedNames[-1]
|
||||
if lastTraversed.startswith('.') and lastTraversed != name:
|
||||
for n in list(traversedNames):
|
||||
if n.startswith('.'):
|
||||
# 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
|
||||
traversedNames[-1] = name
|
||||
# traversedNames[-1] = name
|
||||
# let <base .../> tag show the current object
|
||||
traversedNames.append(name)
|
||||
return name
|
||||
|
||||
def getTarget(self, name):
|
||||
|
|
Loading…
Add table
Reference in a new issue