remove 'target' string from URLs, '.NNNN' is sufficient
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3458 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
a7351c0cff
commit
b91c67f038
7 changed files with 77 additions and 36 deletions
|
@ -594,7 +594,7 @@ is ``NodeView.getUrlForTarget()`` that expects a ConceptView, ResourceView,
|
||||||
or ConceptRelationView as its argument.
|
or ConceptRelationView as its argument.
|
||||||
|
|
||||||
>>> view.getUrlForTarget(childRels[0])
|
>>> 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
|
Actions
|
||||||
-------
|
-------
|
||||||
|
|
|
@ -76,7 +76,7 @@
|
||||||
<h2 i18n:translate="">Parents</h2>
|
<h2 i18n:translate="">Parents</h2>
|
||||||
<div tal:repeat="related item/parents">
|
<div tal:repeat="related item/parents">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:attributes="href string:${view/url}/.target${related/uniqueId}"
|
tal:attributes="href python: view.getUrlForTarget(related)"
|
||||||
tal:content="related/title">Concept Title</a>
|
tal:content="related/title">Concept Title</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -104,7 +104,7 @@
|
||||||
<tr tal:attributes="class class">
|
<tr tal:attributes="class class">
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:attributes="href string:${view/url}/.target${related/uniqueId};
|
tal:attributes="href python: view.getUrlForTarget(related);
|
||||||
title description">
|
title description">
|
||||||
<span tal:replace="related/title">Resource Title</span>
|
<span tal:replace="related/title">Resource Title</span>
|
||||||
</a>
|
</a>
|
||||||
|
@ -162,7 +162,7 @@
|
||||||
tal:attributes="value uid;" /></td>
|
tal:attributes="value uid;" /></td>
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:attributes="href string:${view/url}/.target${related/uniqueId};
|
tal:attributes="href python: view.getUrlForTarget(related);
|
||||||
title description">
|
title description">
|
||||||
<img tal:define="icon related/icon"
|
<img tal:define="icon related/icon"
|
||||||
tal:condition="icon"
|
tal:condition="icon"
|
||||||
|
@ -178,7 +178,8 @@
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:content="versionId"
|
tal:content="versionId"
|
||||||
tal:omit-tag="python: versionId=='1.1'"
|
tal:omit-tag="python: versionId=='1.1'"
|
||||||
tal:attributes="href string:${view/url}/.target${related/uniqueId}?loops.viewName=listversions">1.1</a>
|
tal:define="url python: view.getUrlForTarget(related)"
|
||||||
|
tal:attributes="href string:${url}?loops.viewName=listversions">1.1</a>
|
||||||
</td>
|
</td>
|
||||||
</tal:version>
|
</tal:version>
|
||||||
<td class="nowrap number">
|
<td class="nowrap number">
|
||||||
|
|
|
@ -222,7 +222,8 @@ class NodeView(BaseView):
|
||||||
def targetUrl(self):
|
def targetUrl(self):
|
||||||
t = self.targetObjectView
|
t = self.targetObjectView
|
||||||
if t is not None:
|
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 ''
|
return ''
|
||||||
|
|
||||||
def renderTarget(self):
|
def renderTarget(self):
|
||||||
|
@ -388,7 +389,8 @@ class NodeView(BaseView):
|
||||||
def virtualTargetUrl(self):
|
def virtualTargetUrl(self):
|
||||||
targetId = self.targetId
|
targetId = self.targetId
|
||||||
if targetId is not None:
|
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:
|
else:
|
||||||
return self.url
|
return self.url
|
||||||
|
|
||||||
|
@ -411,12 +413,14 @@ class NodeView(BaseView):
|
||||||
# target viewing and editing support
|
# target viewing and editing support
|
||||||
|
|
||||||
def getUrlForTarget(self, target):
|
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):
|
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:
|
else:
|
||||||
return ('%s/.target%s' %
|
#return ('%s/.target%s' %
|
||||||
|
return ('%s/.%s' %
|
||||||
(self.url, util.getUidForObject(target)))
|
(self.url, util.getUidForObject(target)))
|
||||||
|
|
||||||
def getActions(self, category='object', target=None):
|
def getActions(self, category='object', target=None):
|
||||||
|
@ -794,23 +798,24 @@ class NodeTraverser(ItemTraverser):
|
||||||
setViewConfiguration(context, request)
|
setViewConfiguration(context, request)
|
||||||
if name == '.loops':
|
if name == '.loops':
|
||||||
return self.context.getLoopsRoot()
|
return self.context.getLoopsRoot()
|
||||||
if name.startswith('.target'):
|
if name.startswith('.'):
|
||||||
traversalStack = request._traversal_stack
|
name = self.cleanUpTraversalStack(request, name)[1:]
|
||||||
while traversalStack and traversalStack[0].startswith('.target'):
|
#traversalStack = request._traversal_stack
|
||||||
# skip obsolete target references in the url
|
#while traversalStack and traversalStack[0].startswith('.target'):
|
||||||
name = traversalStack.pop(0)
|
# # skip obsolete target references in the url
|
||||||
traversedNames = request._traversed_names
|
# name = traversalStack.pop(0)
|
||||||
if traversedNames:
|
#traversedNames = request._traversed_names
|
||||||
lastTraversed = traversedNames[-1]
|
#if traversedNames:
|
||||||
if lastTraversed.startswith('.target') and lastTraversed != name:
|
# lastTraversed = traversedNames[-1]
|
||||||
# let <base .../> tag show the current object
|
# if lastTraversed.startswith('.target') and lastTraversed != name:
|
||||||
traversedNames[-1] = name
|
# # let <base .../> tag show the current object
|
||||||
if len(name) > len('.target'):
|
# traversedNames[-1] = name
|
||||||
uid = int(name[len('.target'):])
|
#if len(name) > len('.target'):
|
||||||
target = util.getObjectForUid(uid)
|
# uid = int(name[len('.target'):])
|
||||||
#target = component.getUtility(IIntIds).getObject(uid)
|
# target = util.getObjectForUid(uid)
|
||||||
else:
|
#else:
|
||||||
target = self.context.target
|
# target = self.context.target
|
||||||
|
target = self.getTarget(name)
|
||||||
if target is not None:
|
if target is not None:
|
||||||
# remember self.context in request
|
# remember self.context in request
|
||||||
if request.method == 'PUT':
|
if request.method == 'PUT':
|
||||||
|
@ -825,6 +830,28 @@ class NodeTraverser(ItemTraverser):
|
||||||
obj = super(NodeTraverser, self).publishTraverse(request, name)
|
obj = super(NodeTraverser, self).publishTraverse(request, name)
|
||||||
return obj
|
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 <base .../> 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):
|
def setViewConfiguration(context, request):
|
||||||
viewAnnotations = request.annotations.setdefault('loops.view', {})
|
viewAnnotations = request.annotations.setdefault('loops.view', {})
|
||||||
|
|
|
@ -228,7 +228,8 @@
|
||||||
|
|
||||||
|
|
||||||
<metal:actions define-macro="personal">
|
<metal:actions define-macro="personal">
|
||||||
<div><a href="logout.html" i18n:translate="">Log out</a></div>
|
<div><a href="logout.html?nextURL=login.html"
|
||||||
|
i18n:translate="">Log out</a></div>
|
||||||
<tal:actions repeat="action python:view.getActions('personal')">
|
<tal:actions repeat="action python:view.getActions('personal')">
|
||||||
<metal:action use-macro="action/macro" />
|
<metal:action use-macro="action/macro" />
|
||||||
</tal:actions>
|
</tal:actions>
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
<html i18n:domain="loops">
|
||||||
|
|
||||||
|
|
||||||
<metal:block define-macro="render">
|
<metal:block define-macro="render">
|
||||||
<div metal:define-macro="render_base"
|
<div metal:define-macro="render_base"
|
||||||
tal:define="itemNum view/itemNum;
|
tal:define="itemNum view/itemNum;
|
||||||
|
@ -47,7 +50,7 @@
|
||||||
<h1 tal:content="item/title">Title</h1><br />
|
<h1 tal:content="item/title">Title</h1><br />
|
||||||
<img src="#"
|
<img src="#"
|
||||||
tal:attributes="src
|
tal:attributes="src
|
||||||
string:${view/url}/.target${view/targetId}/view?version=this" />
|
string:${view/url}/.${view/targetId}/view?version=this" />
|
||||||
<p><i tal:content="structure item/renderedDescription">Description</i></p>
|
<p><i tal:content="structure item/renderedDescription">Description</i></p>
|
||||||
<metal:fields use-macro="view/comment_macros/comments" />
|
<metal:fields use-macro="view/comment_macros/comments" />
|
||||||
</div>
|
</div>
|
||||||
|
@ -64,7 +67,7 @@
|
||||||
<a href="#"
|
<a href="#"
|
||||||
i18n:translate=""
|
i18n:translate=""
|
||||||
tal:attributes="href
|
tal:attributes="href
|
||||||
string:${view/url}/.target${view/targetId}/download.html?version=this">
|
string:${view/virtualTargetUrl}/download.html?version=this">
|
||||||
Download
|
Download
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
@ -73,7 +76,7 @@
|
||||||
<a href="#"
|
<a href="#"
|
||||||
i18n:translate=""
|
i18n:translate=""
|
||||||
tal:attributes="href
|
tal:attributes="href
|
||||||
string:${view/url}/.target${view/targetId}/view?version=this">
|
string:${view/virtualTargetUrl}/view?version=this">
|
||||||
View
|
View
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
@ -81,7 +84,7 @@
|
||||||
tal:condition="item/xeditable">
|
tal:condition="item/xeditable">
|
||||||
<a href="#" title="Edit with External Editor"
|
<a href="#" title="Edit with External Editor"
|
||||||
i18n:translate=""
|
i18n:translate=""
|
||||||
tal:define="url string:${view/url}/.target${view/targetId}"
|
tal:define="url view/virtualTargetUrl"
|
||||||
tal:attributes="href string:$url/external_edit?version=this">
|
tal:attributes="href string:$url/external_edit?version=this">
|
||||||
Open for editing
|
Open for editing
|
||||||
</a>
|
</a>
|
||||||
|
@ -112,9 +115,12 @@
|
||||||
<metal:actions define-macro="related">
|
<metal:actions define-macro="related">
|
||||||
<div tal:repeat="concept macro/info/relatedConcepts">
|
<div tal:repeat="concept macro/info/relatedConcepts">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:attributes="href string:${view/url}/.target${concept/uniqueId}">
|
tal:attributes="href python: view.getUrlForTarget(concept)">
|
||||||
<span i18n:translate="" tal:content="concept/title">Concept</span>
|
<span i18n:translate="" tal:content="concept/title">Concept</span>
|
||||||
(<i i18n:translate="" tal:content="concept/typeTitle">Type</i>)
|
(<i i18n:translate="" tal:content="concept/typeTitle">Type</i>)
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</metal:actions>
|
</metal:actions>
|
||||||
|
|
||||||
|
|
||||||
|
</html>
|
|
@ -412,7 +412,7 @@ Send Email to Members
|
||||||
>>> form.subject
|
>>> form.subject
|
||||||
u"loops Notification from '$site'"
|
u"loops Notification from '$site'"
|
||||||
>>> form.mailBody
|
>>> 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
|
Fin de partie
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
<html i18n:domain="loops">
|
||||||
|
|
||||||
|
|
||||||
<metal:resources define-macro="versions">
|
<metal:resources define-macro="versions">
|
||||||
<div tal:attributes="class string:content-$level;
|
<div tal:attributes="class string:content-$level;
|
||||||
ondblclick python: item.openEditWindow('resources.html')"
|
ondblclick python: item.openEditWindow('resources.html')"
|
||||||
|
@ -19,7 +22,8 @@
|
||||||
<tr tal:attributes="class class">
|
<tr tal:attributes="class class">
|
||||||
<td valign="top">
|
<td valign="top">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:attributes="href string:${view/url}/.target${related/uniqueId}?version=this;
|
tal:define="url python: view.getUrlForTarget(related)"
|
||||||
|
tal:attributes="href string:$url?version=this;
|
||||||
title description">
|
title description">
|
||||||
<span tal:replace="related/title">Resource Title</span>
|
<span tal:replace="related/title">Resource Title</span>
|
||||||
</a>
|
</a>
|
||||||
|
@ -45,9 +49,11 @@
|
||||||
<metal:versions define-macro="portlet_versions">
|
<metal:versions define-macro="portlet_versions">
|
||||||
<div>
|
<div>
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:attributes="href string:${view/url}/.target${macro/info/uniqueId}?loops.viewName=listversions">
|
tal:attributes="href string:${view/url}/.${macro/info/uniqueId}?loops.viewName=listversions">
|
||||||
<span i18n:translate="">All versions</span>
|
<span i18n:translate="">All versions</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</metal:versions>
|
</metal:versions>
|
||||||
|
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
Loading…
Add table
Reference in a new issue