work in progress: wiki - construct base interfaces and sample base implementations
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3060 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
28b0abcf56
commit
40861ccff1
4 changed files with 130 additions and 6 deletions
|
@ -88,10 +88,10 @@ class DataProvider(object):
|
|||
if key.startswith('@@'):
|
||||
if client is None:
|
||||
return '$' + key
|
||||
viewName = key[2:]
|
||||
request = self.data.get('request') or TestRequest()
|
||||
view = component.queryMultiAdapter(
|
||||
(client.manager, request), name=viewName)
|
||||
view = self.getView(key[2:])
|
||||
#request = self.data.get('request') or TestRequest()
|
||||
#view = component.queryMultiAdapter(
|
||||
# (client.manager, request), name=key[2:])
|
||||
if view is not None:
|
||||
return view()
|
||||
else:
|
||||
|
@ -124,6 +124,11 @@ class DataProvider(object):
|
|||
else:
|
||||
raise KeyError(key)
|
||||
|
||||
def getView(self, name):
|
||||
request = self.data.get('request') or TestRequest()
|
||||
return component.queryMultiAdapter(
|
||||
(self.context.client.manager, request), name=viewName)
|
||||
|
||||
|
||||
class MessageTemplate(Template):
|
||||
|
||||
|
|
|
@ -5,6 +5,31 @@ Yet Another WikiWiki Framework
|
|||
($Id$)
|
||||
|
||||
|
||||
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.
|
||||
|
||||
>>> manager = WikiManager()
|
||||
>>> 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**
|
||||
... '''
|
||||
|
||||
As we have not yet registered any formatting plugins rendering the page
|
||||
returns it content unchanged.
|
||||
|
||||
>>> print startPage.render()
|
||||
**Welcome to the Demo Wiki**
|
||||
|
||||
|
||||
A Very Basic Wiki Format
|
||||
========================
|
||||
|
||||
|
|
|
@ -33,14 +33,48 @@ class WikiManager(object):
|
|||
|
||||
def __init__(self):
|
||||
self.wikis = {}
|
||||
self.plugins = {}
|
||||
|
||||
def addWiki(self, wiki):
|
||||
name = wiki.name
|
||||
if name in self.wikis:
|
||||
raise ValueError("Wiki '%s' already registered." % name)
|
||||
self.wikis[name] = wiki
|
||||
wiki.manager = self
|
||||
return wiki
|
||||
|
||||
|
||||
class Wiki(object):
|
||||
|
||||
implements(IWiki)
|
||||
|
||||
def __init__(self, name, title=None):
|
||||
self.name = name
|
||||
self.title = title or name
|
||||
self.pages = {}
|
||||
|
||||
def createPage(self, name, title=None):
|
||||
if name in self.pages:
|
||||
raise ValueError("Name '%s' already present." % name)
|
||||
page = self.pages[name] = WikiPage(name, title)
|
||||
page.wiki = self
|
||||
return page
|
||||
|
||||
|
||||
class WikiPage(object):
|
||||
|
||||
implements(IWikiPage)
|
||||
|
||||
text = u''
|
||||
|
||||
def __init__(self, name, title=None):
|
||||
self.name = name
|
||||
self.title = title or name
|
||||
|
||||
def render(self):
|
||||
return self.write(self.parse())
|
||||
|
||||
def parse(self):
|
||||
return self.text
|
||||
|
||||
def write(self, tree):
|
||||
return tree
|
||||
|
|
|
@ -26,7 +26,67 @@ from zope.interface import Interface, Attribute
|
|||
|
||||
|
||||
class IWikiManager(Interface):
|
||||
"""Manages (and possibly contains) all kinds of wiki-related objects.
|
||||
""" Manages wikis and wiki-related objects, like plugins.
|
||||
"""
|
||||
|
||||
wikis = Attribute('A collection of wikis managed by this object.')
|
||||
|
||||
def addWiki(wiki):
|
||||
""" Register the wiki given.
|
||||
"""
|
||||
|
||||
def removeWiki(wiki):
|
||||
""" Remove the wiki given from the list of wikis.
|
||||
"""
|
||||
|
||||
|
||||
class IWiki(Interface):
|
||||
""" A collection of wiki pages, or - more generally - wiki components.
|
||||
"""
|
||||
|
||||
manager = Attribute('The wiki manager this wiki is managed by.')
|
||||
name = Attribute('The name or address of the wiki unique within the '
|
||||
'scope of the wiki manager.')
|
||||
pages = Attribute('A collection of the pages belonging to this wiki.')
|
||||
|
||||
def createPage(name, title=None):
|
||||
""" Create a new wiki page identified by the name (address -
|
||||
may be a path) given and return it.
|
||||
"""
|
||||
|
||||
def removePage(name):
|
||||
""" Remove the page identified by name from the wiki, cleaning up
|
||||
all information related to the page.
|
||||
"""
|
||||
|
||||
|
||||
class IWikiPage(Interface):
|
||||
""" An object representing a page of a wiki.
|
||||
"""
|
||||
|
||||
wiki = Attribute('The wiki this page belongs to.')
|
||||
name = Attribute('A page name or address unique within the wiki.')
|
||||
title = Attribute('A short string describing the wiki page the may be '
|
||||
'use as a page title.')
|
||||
text = Attribute('The page content in input text format.')
|
||||
|
||||
def render():
|
||||
""" Convert the text of the page to presentation format.
|
||||
"""
|
||||
|
||||
def parse():
|
||||
""" Convert the text of the page to a document tree.
|
||||
"""
|
||||
|
||||
def write(tree):
|
||||
""" Convert the document tree given to presentation format.
|
||||
"""
|
||||
|
||||
|
||||
# wiki elements
|
||||
|
||||
class ILinkManager(Interface):
|
||||
"""Manages (and possibly contains) all kinds of wiki-related links.
|
||||
"""
|
||||
|
||||
def registerLink(link):
|
||||
|
|
Loading…
Add table
Reference in a new issue