From 6f245e7c5b46d481432827be3b34da558d3e1d55 Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 22 Feb 2009 15:23:35 +0000 Subject: [PATCH] make link rendering more flexible, e.g. for using it with loops git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3246 fd906abe-77d9-0310-91a1-e0d9ade77398 --- wiki/base/link.py | 9 ++++++--- wiki/base/wiki.py | 13 ++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/wiki/base/link.py b/wiki/base/link.py index 8bdbacb..884c00f 100644 --- a/wiki/base/link.py +++ b/wiki/base/link.py @@ -111,7 +111,7 @@ class LinkProcessor(object): def process(self): wiki = self.source.getWiki() manager = wiki.getManager() - sourceUid = manager.getUid(self.source) + sourceUid = self.source.getUid() lmName = self.source.getConfig('linkManager') lm = wiki.getManager().getPlugin(ILinkManager, lmName) existing = lm.query(source=sourceUid, name=self.targetName) @@ -120,7 +120,7 @@ class LinkProcessor(object): target = manager.getObject(link.target) else: target = wiki.getPage(self.targetName) - targetUid = manager.getUid(target) + targetUid = target is not None and target.getUid() or None link = lm.createLink(self.targetName, sourceUid, targetUid) if link.refuri is None: if self.request is not None: @@ -128,12 +128,15 @@ class LinkProcessor(object): link.refuri = '%s/create.html?linkid=%s' % ( absoluteURL(wiki, self.request), link.identifier) else: - link.refuri = absoluteURL(target, self.request) + link.refuri = self.getTargetURI(target) self.setURI(link.refuri) if target is None: self.markPresentation('create') self.addText('?') + def getTargetURI(self, obj): + return absoluteURL(obj, self.request) + def setURI(self, uri): raise ValueError('To be implemented by subclass.') diff --git a/wiki/base/wiki.py b/wiki/base/wiki.py index 8344142..e83dc4e 100644 --- a/wiki/base/wiki.py +++ b/wiki/base/wiki.py @@ -62,7 +62,9 @@ class WikiManager(BaseConfiguration): return component.getUtility(IIntIds).getId(obj) def getObject(self, uid): - return component.getUtility(IIntIds).getObject(uid) + if uid is None: + return None + return component.getUtility(IIntIds).getObject(int(uid)) # configuration @@ -91,6 +93,11 @@ class Wiki(BaseConfiguration): page.wiki = self return page + def addPage(self, page): + self.pages[page.name] = page + page.wiki = self + return page + def removePage(self, name): if name in self.pages: del self.pages[name] @@ -122,6 +129,7 @@ class WikiPage(BaseConfiguration): return self.wiki def render(self, request=None): + # TODO: move render() method to a view class source = self.preprocess(self.text) tree = self.parse(source, request) result = self.write(tree) @@ -143,6 +151,9 @@ class WikiPage(BaseConfiguration): def postprocess(self, result): return result + def getUid(self): + return self.getWiki().getManager().getUid(self) + # configuration def getConfigParent(self):