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 key.startswith('@@'):
|
||||||
if client is None:
|
if client is None:
|
||||||
return '$' + key
|
return '$' + key
|
||||||
viewName = key[2:]
|
view = self.getView(key[2:])
|
||||||
request = self.data.get('request') or TestRequest()
|
#request = self.data.get('request') or TestRequest()
|
||||||
view = component.queryMultiAdapter(
|
#view = component.queryMultiAdapter(
|
||||||
(client.manager, request), name=viewName)
|
# (client.manager, request), name=key[2:])
|
||||||
if view is not None:
|
if view is not None:
|
||||||
return view()
|
return view()
|
||||||
else:
|
else:
|
||||||
|
@ -124,6 +124,11 @@ class DataProvider(object):
|
||||||
else:
|
else:
|
||||||
raise KeyError(key)
|
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):
|
class MessageTemplate(Template):
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,31 @@ Yet Another WikiWiki Framework
|
||||||
($Id$)
|
($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
|
A Very Basic Wiki Format
|
||||||
========================
|
========================
|
||||||
|
|
||||||
|
|
|
@ -33,14 +33,48 @@ class WikiManager(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.wikis = {}
|
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):
|
class Wiki(object):
|
||||||
|
|
||||||
implements(IWiki)
|
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):
|
class WikiPage(object):
|
||||||
|
|
||||||
implements(IWikiPage)
|
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):
|
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):
|
def registerLink(link):
|
||||||
|
|
Loading…
Add table
Reference in a new issue