diff --git a/README.txt b/README.txt
index 1eb6180..f4a48d4 100755
--- a/README.txt
+++ b/README.txt
@@ -594,7 +594,7 @@ is ``NodeView.getUrlForTarget()`` that expects a ConceptView, ResourceView,
or ConceptRelationView as its argument.
>>> view.getUrlForTarget(childRels[0])
- 'http://127.0.0.1/loops/views/m1/m11/m112/.target37'
+ 'http://127.0.0.1/loops/views/m1/m11/m112/.37'
Actions
-------
diff --git a/browser/concept_macros.pt b/browser/concept_macros.pt
index 5b381b0..2c1ee51 100644
--- a/browser/concept_macros.pt
+++ b/browser/concept_macros.pt
@@ -76,7 +76,7 @@
Resource Title
@@ -162,7 +162,7 @@
tal:attributes="value uid;" /> |
1.1
+ tal:define="url python: view.getUrlForTarget(related)"
+ tal:attributes="href string:${url}?loops.viewName=listversions">1.1
|
diff --git a/browser/node.py b/browser/node.py
index 6001e6a..f04e12a 100644
--- a/browser/node.py
+++ b/browser/node.py
@@ -222,7 +222,8 @@ class NodeView(BaseView):
def targetUrl(self):
t = self.targetObjectView
if t is not None:
- return '%s/.target%s' % (self.url, t.uniqueId)
+ #return '%s/.target%s' % (self.url, t.uniqueId)
+ return '%s/.%s' % (self.url, t.uniqueId)
return ''
def renderTarget(self):
@@ -388,7 +389,8 @@ class NodeView(BaseView):
def virtualTargetUrl(self):
targetId = self.targetId
if targetId is not None:
- return '%s/.target%s' % (self.url, targetId)
+ #return '%s/.target%s' % (self.url, targetId)
+ return '%s/.%s' % (self.url, targetId)
else:
return self.url
@@ -411,12 +413,14 @@ class NodeView(BaseView):
# target viewing and editing support
def getUrlForTarget(self, target):
- """ Return URL of given target view given as .targetXXX URL.
+ """ Return URL of given target view given as .XXX URL.
"""
if isinstance(target, BaseView):
- return '%s/.target%s' % (self.url, target.uniqueId)
+ #return '%s/.target%s' % (self.url, target.uniqueId)
+ return '%s/.%s' % (self.url, target.uniqueId)
else:
- return ('%s/.target%s' %
+ #return ('%s/.target%s' %
+ return ('%s/.%s' %
(self.url, util.getUidForObject(target)))
def getActions(self, category='object', target=None):
@@ -794,23 +798,24 @@ class NodeTraverser(ItemTraverser):
setViewConfiguration(context, request)
if name == '.loops':
return self.context.getLoopsRoot()
- if name.startswith('.target'):
- traversalStack = request._traversal_stack
- while traversalStack and traversalStack[0].startswith('.target'):
- # skip obsolete target references in the url
- name = traversalStack.pop(0)
- traversedNames = request._traversed_names
- if traversedNames:
- lastTraversed = traversedNames[-1]
- if lastTraversed.startswith('.target') and lastTraversed != name:
- # let tag show the current object
- traversedNames[-1] = name
- if len(name) > len('.target'):
- uid = int(name[len('.target'):])
- target = util.getObjectForUid(uid)
- #target = component.getUtility(IIntIds).getObject(uid)
- else:
- target = self.context.target
+ if name.startswith('.'):
+ name = self.cleanUpTraversalStack(request, name)[1:]
+ #traversalStack = request._traversal_stack
+ #while traversalStack and traversalStack[0].startswith('.target'):
+ # # skip obsolete target references in the url
+ # name = traversalStack.pop(0)
+ #traversedNames = request._traversed_names
+ #if traversedNames:
+ # lastTraversed = traversedNames[-1]
+ # if lastTraversed.startswith('.target') and lastTraversed != name:
+ # # let tag show the current object
+ # traversedNames[-1] = name
+ #if len(name) > len('.target'):
+ # uid = int(name[len('.target'):])
+ # target = util.getObjectForUid(uid)
+ #else:
+ # target = self.context.target
+ target = self.getTarget(name)
if target is not None:
# remember self.context in request
if request.method == 'PUT':
@@ -825,6 +830,28 @@ class NodeTraverser(ItemTraverser):
obj = super(NodeTraverser, self).publishTraverse(request, name)
return obj
+ def cleanUpTraversalStack(self, request, name):
+ traversalStack = request._traversal_stack
+ while traversalStack and traversalStack[0].startswith('.'):
+ # skip obsolete target references in the url
+ name = traversalStack.pop(0)
+ traversedNames = request._traversed_names
+ if traversedNames:
+ lastTraversed = traversedNames[-1]
+ if lastTraversed.startswith('.') and lastTraversed != name:
+ # let tag show the current object
+ traversedNames[-1] = name
+ return name
+
+ def getTarget(self, name):
+ if name.startswith('target'):
+ name = name[6:]
+ if '-' in name:
+ name, ignore = name.split('-', 1)
+ if name and name.isdigit():
+ return util.getObjectForUid(int(name))
+ return self.context.target
+
def setViewConfiguration(context, request):
viewAnnotations = request.annotations.setdefault('loops.view', {})
diff --git a/browser/node_macros.pt b/browser/node_macros.pt
index a8c68cb..8944c32 100644
--- a/browser/node_macros.pt
+++ b/browser/node_macros.pt
@@ -228,7 +228,8 @@
-
+
diff --git a/browser/resource_macros.pt b/browser/resource_macros.pt
index 3204178..9172377 100644
--- a/browser/resource_macros.pt
+++ b/browser/resource_macros.pt
@@ -1,3 +1,6 @@
+
+
+
Title

+ string:${view/url}/.${view/targetId}/view?version=this" />
Description
@@ -64,7 +67,7 @@
+ string:${view/virtualTargetUrl}/download.html?version=this">
Download
@@ -73,7 +76,7 @@
+ string:${view/virtualTargetUrl}/view?version=this">
View
@@ -81,7 +84,7 @@
tal:condition="item/xeditable">
Open for editing
@@ -112,9 +115,12 @@
+
+
+
\ No newline at end of file
diff --git a/organize/README.txt b/organize/README.txt
index 1096d85..99b15fc 100644
--- a/organize/README.txt
+++ b/organize/README.txt
@@ -412,7 +412,7 @@ Send Email to Members
>>> form.subject
u"loops Notification from '$site'"
>>> form.mailBody
- u'\n\nEvent #1\nhttp://127.0.0.1/loops/views/menu/.target97\n\n'
+ u'\n\nEvent #1\nhttp://127.0.0.1/loops/views/menu/.97\n\n'
Fin de partie
diff --git a/versioning/version_macros.pt b/versioning/version_macros.pt
index 2bcc4ba..b82d009 100644
--- a/versioning/version_macros.pt
+++ b/versioning/version_macros.pt
@@ -1,3 +1,6 @@
+
+
+
|