handle URI fragment and parameters
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3268 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
f45a870c27
commit
3dd9bdbe36
2 changed files with 77 additions and 17 deletions
|
@ -71,6 +71,9 @@ from the page content.
|
||||||
Links to not yet existing pages
|
Links to not yet existing pages
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
|
When a referenced page does not exist yet a special link is created that
|
||||||
|
should lead to a view that will create the page.
|
||||||
|
|
||||||
>>> aboutPage.text += '''
|
>>> aboutPage.text += '''
|
||||||
... `More... <more>`_
|
... `More... <more>`_
|
||||||
... '''
|
... '''
|
||||||
|
@ -80,11 +83,42 @@ Links to not yet existing pages
|
||||||
<p><a class="reference"
|
<p><a class="reference"
|
||||||
href="http://127.0.0.1/demo_wiki/start_page">Back to the Start Page</a></p>
|
href="http://127.0.0.1/demo_wiki/start_page">Back to the Start Page</a></p>
|
||||||
<p><a class="reference create"
|
<p><a class="reference create"
|
||||||
href="http://127.0.0.1/demo_wiki/create.html?linkid=0000002">?More...</a></p>
|
href="http://127.0.0.1/demo_wiki/create.html?name=more">?More...</a></p>
|
||||||
|
|
||||||
|
Again a link object has been created that will be reused for subsequent
|
||||||
|
rendering operations.
|
||||||
|
|
||||||
>>> len(links)
|
>>> len(links)
|
||||||
2
|
2
|
||||||
|
|
||||||
|
>>> print aboutPage.render(TestRequest())
|
||||||
|
<p>...
|
||||||
|
<p><a class="reference create"
|
||||||
|
href="http://127.0.0.1/demo_wiki/create.html?name=more">?More...</a></p>
|
||||||
|
>>> len(links)
|
||||||
|
2
|
||||||
|
|
||||||
|
Links with fragments (anchor references) and parameters
|
||||||
|
-------------------------------------------------------
|
||||||
|
|
||||||
|
>>> referencePage = wiki.createPage('reference')
|
||||||
|
>>> referencePage.text = '''
|
||||||
|
... References
|
||||||
|
... ==========
|
||||||
|
...
|
||||||
|
... - `About content <about#content?language=en>`_
|
||||||
|
... - `More content <more#content?language=en>`_
|
||||||
|
... '''
|
||||||
|
|
||||||
|
>>> print referencePage.render(TestRequest())
|
||||||
|
<h1 class="title">References</h1>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><a class="reference"
|
||||||
|
href="http://127.0.0.1/demo_wiki/about#content?language=en">About content</a></li>
|
||||||
|
<li><a class="reference create"
|
||||||
|
href="http://127.0.0.1/demo_wiki/create.html?name=more#content?language=en">?More content</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
External links
|
External links
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -92,8 +126,8 @@ External links
|
||||||
>>> linksPage.text = '''
|
>>> linksPage.text = '''
|
||||||
... **A collection of interesting links**
|
... **A collection of interesting links**
|
||||||
...
|
...
|
||||||
... - http://python.org
|
... - http://python.org#library
|
||||||
... - `Zope <http://zope.org>`_
|
... - `Zope <http://zope.org?lang=de>`_
|
||||||
... '''
|
... '''
|
||||||
|
|
||||||
An absolute URL given as link target will not be changed in the process.
|
An absolute URL given as link target will not be changed in the process.
|
||||||
|
@ -101,14 +135,15 @@ An absolute URL given as link target will not be changed in the process.
|
||||||
>>> print linksPage.render(TestRequest())
|
>>> print linksPage.render(TestRequest())
|
||||||
<p><strong>A collection of interesting links</strong></p>
|
<p><strong>A collection of interesting links</strong></p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="http://python.org">http://python.org</a></li>
|
<li><a class="reference"
|
||||||
<li><a class="reference" href="http://zope.org">Zope</a></li>
|
href="http://python.org#library">http://python.org#library</a></li>
|
||||||
|
<li><a class="reference" href="http://zope.org?lang=de">Zope</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
Nevertheless the links are registered in the link manager.
|
Nevertheless the links are registered in the link manager.
|
||||||
|
|
||||||
>>> len(links)
|
>>> len(links)
|
||||||
4
|
6
|
||||||
|
|
||||||
When we render external links repeatedly no new link objects will be
|
When we render external links repeatedly no new link objects will be
|
||||||
created.
|
created.
|
||||||
|
@ -116,9 +151,10 @@ created.
|
||||||
>>> print linksPage.render(TestRequest())
|
>>> print linksPage.render(TestRequest())
|
||||||
<p><strong>A collection of interesting links</strong></p>
|
<p><strong>A collection of interesting links</strong></p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="http://python.org">http://python.org</a></li>
|
<li><a class="reference"
|
||||||
<li><a class="reference" href="http://zope.org">Zope</a></li>
|
href="http://python.org#library">http://python.org#library</a></li>
|
||||||
|
<li><a class="reference" href="http://zope.org?lang=de">Zope</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
>>> len(links)
|
>>> len(links)
|
||||||
4
|
6
|
||||||
|
|
|
@ -114,28 +114,52 @@ class LinkProcessor(object):
|
||||||
sourceUid = self.source.uid
|
sourceUid = self.source.uid
|
||||||
lmName = self.source.getConfig('linkManager')
|
lmName = self.source.getConfig('linkManager')
|
||||||
lm = manager.getPlugin(ILinkManager, lmName)
|
lm = manager.getPlugin(ILinkManager, lmName)
|
||||||
|
targetPageName = self.targetName
|
||||||
|
params = fragment = ''
|
||||||
|
if '?' in targetPageName:
|
||||||
|
targetPageName, params = targetPageName.split('?', 1)
|
||||||
|
if '#' in targetPageName:
|
||||||
|
targetPageName, fragment = targetPageName.split('#', 1)
|
||||||
existing = lm.query(source=sourceUid, name=self.targetName)
|
existing = lm.query(source=sourceUid, name=self.targetName)
|
||||||
if existing:
|
if existing:
|
||||||
link = existing.next()
|
link = existing.next()
|
||||||
#print '*** #1', self.targetName, link
|
if link.target is not None:
|
||||||
target = manager.getObject(link.target)
|
target = manager.getObject(link.target)
|
||||||
else:
|
else:
|
||||||
target = wiki.getPage(self.targetName)
|
target = None
|
||||||
#print '*** #2', self.targetName, target
|
else:
|
||||||
|
target = wiki.getPage(targetPageName)
|
||||||
targetUid = target is not None and target.uid or None
|
targetUid = target is not None and target.uid or None
|
||||||
link = lm.createLink(self.targetName, sourceUid, targetUid)
|
link = lm.createLink(self.targetName, sourceUid, targetUid)
|
||||||
if link.refuri is None:
|
if link.refuri is None:
|
||||||
|
if fragment:
|
||||||
|
link.targetFragment = fragment
|
||||||
|
if params:
|
||||||
|
link.targetParameters = params
|
||||||
if self.request is not None:
|
if self.request is not None:
|
||||||
if target is None:
|
if target is None:
|
||||||
link.refuri = '%s/create.html?linkid=%s' % (
|
uri = link.refuri = '%s/create.html?name=%s' % (
|
||||||
absoluteURL(wiki, self.request), link.identifier)
|
absoluteURL(wiki, self.request), link.name)
|
||||||
else:
|
else:
|
||||||
link.refuri = target.getURI(self.request)
|
uri = link.refuri = target.getURI(self.request)
|
||||||
self.setURI(link.refuri)
|
uri += self.fragmentAndParams(fragment, params)
|
||||||
|
else:
|
||||||
|
uri = link.refuri + self.fragmentAndParams(
|
||||||
|
link.targetFragment,
|
||||||
|
link.targetParameters)
|
||||||
|
self.setURI(uri)
|
||||||
if target is None:
|
if target is None:
|
||||||
self.markPresentation('create')
|
self.markPresentation('create')
|
||||||
self.addText('?')
|
self.addText('?')
|
||||||
|
|
||||||
|
def fragmentAndParams(self, fragment, params):
|
||||||
|
f = p = ''
|
||||||
|
if fragment:
|
||||||
|
f = '#' + fragment
|
||||||
|
if params:
|
||||||
|
p = '?' + params
|
||||||
|
return f + p
|
||||||
|
|
||||||
def setURI(self, uri):
|
def setURI(self, uri):
|
||||||
raise ValueError('To be implemented by subclass.')
|
raise ValueError('To be implemented by subclass.')
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue