Simplest setup first - make regular message displays handle WikiWikiMarkup. To achieve this, add the following as a new file "wiki.py" in your tracker's "extensions" directory:
1 import re
2
3 wn_re = re.compile(r'(?P<wn>[A-Z][a-z]+([A-Z][a-z]+)+)')
4 def wikimarkup(utils, text):
5 '''Mark up text in a wiki-like fashion.
6
7 WikiName -> issue with the title "WikiName"
8 if undefined, has a link to create a new issue with the
9 title WikiName
10 (normal issueNNN / URL markup will be done too)
11 '''
12 text = text.hyperlinked()
13 def wn_replace(match, db=utils.client.db, classname=utils.client.classname):
14 wn = match.group('wn')
15 id = db.getclass(classname).stringFind(title=wn)
16 if id:
17 return '<a href="%s%s">%s</a>'%(classname, id[0], wn)
18 else:
19 return '%s<a href="%s?@template=item&title=%s">?</a>'%(wn,
20 classname, wn)
21 return wn_re.sub(wn_replace, text)
22
23 def init(tracker):
24 tracker.registerUtil('wiki', wikimarkup)
This is enough to get Wiki links going in your tracker straight away - with "?" markers to allow you to define new "terms".
To have specialised wiki-only pages, add this to your tracker's schema.py:
wiki = FileClass(db, "wiki", title=String())
And a new page to your tracker's "html" directory called "wiki.item.html" with the contents:
<tal:block metal:use-macro="templates/page/macros/icing"> <title metal:fill-slot="head_title"> <tal:block condition="context/id" i18n:translate="" >Issue <span tal:replace="context/id" i18n:name="id" />: <span tal:replace="context/title" i18n:name="title" /> - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" /></tal:block> <tal:block condition="not:context/id" i18n:translate="" >New Issue - <span tal:replace="config/TRACKER_NAME" i18n:name="tracker" /></tal:block> </title> <tal:block metal:fill-slot="body_title"> <span tal:condition="python:not context.id" tal:content="string:New Wiki Page: ${request/form/title/value}" /> <span tal:condition="python:context.id" tal:content="context/title" /> </tal:block> <td class="content" tal:define="editmode python:context.is_edit_ok() and (not context.id or request.form.has_key('@editmode'))" metal:fill-slot="content"> <form tal:condition="editmode" method="POST" name="itemSynopsis" onSubmit="return submit_once()" enctype="multipart/form-data" tal:attributes="action context/designator"> <table class="form"> <tr> <td colspan="2"> <span tal:content="context/title | request/form/title/value" /> <input type="hidden" name="title" tal:attributes="value context/title | request/form/title/value"> </td> </tr> <tr> <td colspan=2> <textarea tal:content="context/content/plain" name="content" wrap="hard" rows="20" cols="80"></textarea> </td> </tr> <tr> <td> <input type="hidden" name="@template" value="item"> <input type="hidden" name="@required" value="title"> </td> <td colspan=3 tal:content="structure context/submit"> submit button will go here </td> </tr> </table> </form> <table tal:condition="not:editmode" class="messages"> <tr> <td colspan="2" class="content"> <pre tal:content="structure python:utils.wiki(context.content)">content</pre> </td> </tr> <tr> <a tal:attributes="href string:wiki${context/id}?@template=item&@editmode=yes">edit</a> </tr> </table> <p tal:condition="context/id" i18n:translate=""> Created on <b><tal:x replace="context/creation" i18n:name="creation" /></b> by <b><tal:x replace="context/creator" i18n:name="creator" /></b>, last changed <b><tal:x replace="context/activity" i18n:name="activity" /></b> by <b><tal:x replace="context/actor" i18n:name="actor" /></b>. </p> <tal:block tal:condition="context/id" tal:replace="structure context/history" /> </td> </tal:block>
The key to the wiki formatting is the line where we invoke the wiki utils method:
<pre tal:content="structure python:utils.wiki(context.content)">content</pre>
Finally, to start adding wiki items to your tracker, use a link ending in "wiki?@template=item&title=FrontPage" (so for the demo tracker, this would be something like "http://short.local:8917/demo/wiki?@template=item&title=FrontPage")
-- RichardJones
From als Tue Jul 27 15:57:25 -0400 2004 Wrom: JSN Date: Tue, 27 Jul 2004 15:57:25 -0400 Subject: excellent idea! Message-ID: <20040727015725-0400@www.mechanicalcat.net> having wiki in roundup would be great. From unknown Wed Jul 28 03:37:32 -0400 2004 Wrom: Date: Wed, 28 Jul 2004 03:37:32 -0400 Subject: I'm not so sure. Message-ID: <20040727133732-0400@www.mechanicalcat.net> What about name collision? From unknown Wed Jul 28 07:54:45 -0400 2004 From: Date: Wed, 28 Jul 2004 07:54:45 -0400 Subject: automagically handled Message-ID: <20040727175445-0400@www.mechanicalcat.net> The code will just pick the first match found. Dupes are quite unlikely if you go with the extension - implementing the wiki class. Regular users can't change the name (title) of a wiki item. It's "hard-coded" into the edit page. Altering the wiki link generator to cope with multiple matches would be easy - you'd just generate a link to an index page with the matches listed ('@template=index&title=WikiName').