============================== Yet Another WikiWiki Framework ============================== ($Id$) >>> from zope import component >>> from zope.publisher.browser import TestRequest An Example for an Elementary Wiki Structure =========================================== >>> from cybertools.wiki.base.wiki import WikiManager, Wiki We create a wiki manager with one wiki that in turn contains a simple start page. We also set the ``linkManager`` configuration option explicitly to make sure the correct link manager will be used. >>> manager = WikiManager() >>> linkManagerName = 'cybertools.link' >>> manager.setConfig('linkManager', linkManagerName) >>> wiki = manager.addWiki(Wiki('demo_wiki')) >>> startPage = wiki.createPage('start_page') We format the content of the start page using the restructured text format. >>> startPage.text = ''' ... **Welcome to the Demo Wiki** ... ''' The parser for restructured text and a corresponding HTML writer are the default plugins used, so we can already render the page as HTML. >>> print startPage.render(TestRequest())

Welcome to the Demo Wiki

Links to existing pages ----------------------- We now create another page that contains a link to the start page. >>> aboutPage = wiki.createPage('about') >>> aboutPage.text = ''' ... **Information about the Demo Wiki** ... ... This is the cybertools demo wiki. ... ... `Back to the Start Page `_ ... ''' >>> print aboutPage.render(TestRequest())

Information about the Demo Wiki

This is the cybertools demo wiki.

Back to the Start Page

Let's now have a look at the link manager - it should have recorded the link from the page content. >>> from cybertools.link.interfaces import ILinkManager >>> linkManager = manager.getPlugin(ILinkManager, linkManagerName) >>> links = linkManager.links >>> len(links) 1 >>> link = links.values()[0] >>> link.source, link.target, link.name (0, 1, u'start_page') 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 += ''' ... `More... `_ ... ''' >>> print aboutPage.render(TestRequest())

Information about the Demo Wiki

This is the cybertools demo wiki.

Back to the Start Page

?More...

Again a link object has been created that will be reused for subsequent rendering operations. >>> len(links) 2 >>> print aboutPage.render(TestRequest())

...

?More...

>>> len(links) 2 Links with fragments (anchor references) and parameters ------------------------------------------------------- >>> referencePage = wiki.createPage('reference') >>> referencePage.text = ''' ... References ... ========== ... ... - `About content `_ ... - `More content `_ ... ''' >>> print referencePage.render(TestRequest())

References

External links -------------- >>> linksPage = wiki.createPage('links') >>> linksPage.text = ''' ... **A collection of interesting links** ... ... - http://python.org#library ... - `Zope `_ ... ''' An absolute URL given as link target will not be changed in the process. >>> print linksPage.render(TestRequest())

A collection of interesting links

Nevertheless the links are registered in the link manager. >>> len(links) 6 When we render external links repeatedly no new link objects will be created. >>> print linksPage.render(TestRequest())

A collection of interesting links

>>> len(links) 6 Media Objects ============= >>> from cybertools.wiki.interfaces import IMediaManager >>> mmName = manager.getConfig('mediaManager') >>> mm = component.getAdapter(wiki, IMediaManager, name=mmName) >>> media01 = mm.createObject('media01.jpg', 'Media Object #1') >>> media01.setRawData('Some data we don\'t care about...') >>> media01.getRawData() "Some data..." >>> [(obj.name, obj.title) for obj in mm.listObjects()] [('media01.jpg', 'Media Object #1')] Embed media objects (images) in Wiki text ----------------------------------------- >>> imagePage1 = wiki.createPage('with_image') >>> imagePage1.text = ''' ... **A page with an image** ... ... .. image:: media01.jpg ... ... `Back to the Start Page `_ ... ''' >>> print imagePage1.render(TestRequest())

A page with an image

Back to the Start Page

Link to media objects (files) in Wiki text ------------------------------------------ >>> imagePage2 = wiki.createPage('with_image_link') >>> imagePage2.text = ''' ... **A page with a link to an image** ... ... `Media Object #1 `_ ... ... `Back to the Start Page `_ ... ''' >>> print imagePage2.render(TestRequest())

A page with a link to an image

Media Object #1

Back to the Start Page