work in progress: wiki configuration and editing
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3855 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
3f1a3cd08f
commit
b1a231f40e
16 changed files with 117 additions and 27 deletions
|
@ -3,7 +3,7 @@
|
|||
|
||||
<body>
|
||||
|
||||
<div metal:fill-slot="content">
|
||||
<div metal:fill-slot="main">
|
||||
<metal:content use-macro="view/contentMacro" />
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<tal:block i18n:domain="loops">
|
||||
<tal:block i18n:domain="zope">
|
||||
<div class="body"
|
||||
metal:define-macro="body"
|
||||
tal:define="controller nocall:view/controller;
|
||||
|
@ -8,8 +8,8 @@
|
|||
<div class="top" metal:define-slot="top">
|
||||
<a href="#" name="top" metal:define-slot="logo"
|
||||
tal:attributes="href string:${request/URL/1}"><img class="logo"
|
||||
src="logo.gif" border="0" alt="Home"
|
||||
tal:attributes="src string:${resourceBase}logo.gif" /></a>
|
||||
border="0" alt="Home"
|
||||
tal:attributes="src string:${resourceBase}logo.png" /></a>
|
||||
<div metal:define-slot="top-actions">
|
||||
<tal:action repeat="macro controller/macros/top_actions">
|
||||
<metal:action use-macro="macro" />
|
||||
|
|
|
@ -5,5 +5,6 @@
|
|||
xmlns:browser="http://namespaces.zope.org/browser">
|
||||
|
||||
<browser:resource name="base.css" file="base.css" />
|
||||
<browser:resource name="logo.png" file="logo.png" />
|
||||
|
||||
</configure>
|
||||
|
|
BIN
view/browser/liquid/logo.png
Normal file
BIN
view/browser/liquid/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
|
@ -3,7 +3,7 @@
|
|||
|
||||
<head>
|
||||
<title tal:content="view/head_title|context/title|default">
|
||||
Powered by Zope 3
|
||||
Powered by Zope
|
||||
</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<link rel="stylesheet" type="text/css"
|
||||
|
@ -16,8 +16,8 @@
|
|||
<div class="top" metal:define-slot="top">
|
||||
<a href="#" name="top" metal:define-slot="logo"
|
||||
tal:attributes="href view/homeURL"><img class="logo"
|
||||
src="logo.gif" border="0" alt="Home"
|
||||
tal:attributes="src string:${view/resource_prefix}logo.gif" /></a>
|
||||
border="0" alt="Home"
|
||||
tal:attributes="src string:${view/resource_prefix}logo.png" /></a>
|
||||
<div metal:define-slot="top-actions">
|
||||
<tal:action repeat="macro view/actions/top">
|
||||
<metal:action use-macro="macro" />
|
||||
|
@ -34,7 +34,7 @@
|
|||
<div metal:define-slot="actions"></div>
|
||||
<div metal:define-slot="message"></div>
|
||||
<div>
|
||||
<metal:content define-slot="content">Content</metal:content>
|
||||
<metal:content define-slot="main">Content</metal:content>
|
||||
</div>
|
||||
</div>
|
||||
<div id="sub-section">
|
||||
|
|
|
@ -37,6 +37,7 @@ class BaseView(object):
|
|||
index = generic_page
|
||||
default_template = view_macros # specify in subclass
|
||||
resource_prefix = '/@@/'
|
||||
mode = 'view'
|
||||
|
||||
def __call__(self):
|
||||
return self.index(self)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
|
||||
# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -58,6 +58,11 @@ class WikiManager(BaseConfiguration):
|
|||
if name in self.wikis:
|
||||
del self.wikis[name]
|
||||
|
||||
def renameWiki(self, wiki, newName):
|
||||
del self.wikis[wiki.name]
|
||||
self.wikis[newName] = wiki
|
||||
wiki.rename(newName)
|
||||
|
||||
def listWikis(self):
|
||||
return self.wikis.values()
|
||||
|
||||
|
@ -110,7 +115,6 @@ class Wiki(BaseConfiguration):
|
|||
self.name = name
|
||||
self.title = title or name
|
||||
self.pages = {}
|
||||
#self.setup()
|
||||
|
||||
def setup(self):
|
||||
self.getManager().addWiki(self)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<tr tal:repeat="wiki view/listWikis">
|
||||
<td>
|
||||
<a tal:attributes="href wiki/absolute_url"
|
||||
tal:content="wiki/context/title" />
|
||||
tal:content="wiki/title" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
@ -24,11 +24,27 @@
|
|||
</metal:content>
|
||||
|
||||
|
||||
<metal:content define-macro="wiki_edit">
|
||||
<h1>Edit Wiki: <span tal:content="context/title" /></h1>
|
||||
<form method="post">
|
||||
<input type="hidden" name="form_action" value="edit" />
|
||||
<div><label for="form_name">Short name</label></div>
|
||||
<div><input type="text" id="form_name" name="name"
|
||||
tal:attributes="value context/name" /></div>
|
||||
<div><label for="form_title">Title</label></div>
|
||||
<div><input type="text" id="form_title" name="title"
|
||||
tal:attributes="value context/title" /></div>
|
||||
<input type="submit" name="submit" value="Save" />
|
||||
</form>
|
||||
</metal:content>
|
||||
|
||||
|
||||
<metal:content define-macro="wikipage">
|
||||
<div metal:define-macro="edit">
|
||||
<tal:edit condition="python: request.get('mode') == 'edit'">
|
||||
<tal:edit condition="python: view.mode == 'edit'">
|
||||
<h1>Edit <span tal:content="context/title">Wiki Page</span></h1>
|
||||
<form method="post">
|
||||
<form method="post"
|
||||
tal:attributes="action context/absolute_url">
|
||||
<input type="hidden" name="form_action" value="edit" />
|
||||
<div>
|
||||
<div>Title</div>
|
||||
|
@ -49,12 +65,14 @@
|
|||
</tal:edit>
|
||||
</div>
|
||||
<div metal:define-macro="show">
|
||||
<h1 tal:content="context/title">Wiki Page</h1>
|
||||
<div tal:content="structure view/render" />
|
||||
<tal:show condition="python: request.get('mode') != 'edit'">
|
||||
<div> </div>
|
||||
<div><a href="?mode=edit">Edit</a></div>
|
||||
</tal:show>
|
||||
<h1 tal:content="context/title">Wiki Page</h1>
|
||||
<div tal:content="structure view/render" />
|
||||
<tal:show condition="view/showEditButton">
|
||||
<div> </div>
|
||||
<div>
|
||||
<a tal:attributes="href string:${context/absolute_url}/edit.html">Edit</a>
|
||||
</div>
|
||||
</tal:show>
|
||||
</div>
|
||||
</metal:content>
|
||||
|
||||
|
|
|
@ -25,6 +25,8 @@ $Id$
|
|||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
from zope import component
|
||||
from zope.event import notify
|
||||
from zope.lifecycleevent import ObjectModifiedEvent
|
||||
from zope.traversing.browser import absoluteURL
|
||||
|
||||
from cybertools.link.interfaces import ILinkManager
|
||||
|
@ -64,6 +66,27 @@ class WikiView(WikiBaseView):
|
|||
return self.context.listPages()
|
||||
|
||||
|
||||
class WikiEditForm(WikiView):
|
||||
|
||||
content_renderer = 'wiki_edit'
|
||||
|
||||
def update(self):
|
||||
form = self.request.form
|
||||
action = form.get('form_action')
|
||||
if action == 'edit':
|
||||
title = form.get('title')
|
||||
if title and title != self.context.title:
|
||||
self.context.title = title
|
||||
notify(ObjectModifiedEvent(self.context))
|
||||
name = form.get('name')
|
||||
if name and name != self.context.name:
|
||||
self.context.getManager().renameWiki(self.context, name)
|
||||
self.request.response.redirect(
|
||||
absoluteURL(self.context, self.request))
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
class CreatePage(object):
|
||||
|
||||
def update(self):
|
||||
|
@ -71,6 +94,7 @@ class CreatePage(object):
|
|||
name = form.get('name')
|
||||
title = name
|
||||
page = self.context.createPage(name, title)
|
||||
notify(ObjectModifiedEvent(page))
|
||||
# record in LinkManager
|
||||
manager = self.context.getManager()
|
||||
lmName = self.context.getConfig('linkManager')
|
||||
|
@ -78,7 +102,7 @@ class CreatePage(object):
|
|||
for link in lm.query(name=name):
|
||||
if link.target is None:
|
||||
link.update(target=page)
|
||||
self.request.response.redirect('%s?mode=edit' %
|
||||
self.request.response.redirect('%s/edit.html' %
|
||||
absoluteURL(page, self.request))
|
||||
return False
|
||||
|
||||
|
@ -96,10 +120,15 @@ class WikiPageView(WikiBaseView):
|
|||
text = form.get('text')
|
||||
if text and text != self.context.text:
|
||||
self.context.text = text
|
||||
# TODO: notify(ObjectModifiedEvent())
|
||||
#self.request.response.redirect(absoluteURL(self.context, self.request))
|
||||
#return False
|
||||
notify(ObjectModifiedEvent(self.context))
|
||||
return True
|
||||
|
||||
def render(self):
|
||||
return self.context.render(self.request)
|
||||
|
||||
def edit(self):
|
||||
self.mode = 'edit'
|
||||
return self()
|
||||
|
||||
def showEditButton(self):
|
||||
return self.mode != 'edit'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de
|
||||
# Copyright (c) 2010 Helmut Merz helmutm@cy55.de
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -88,6 +88,14 @@ class WikiManager(BaseWikiManager):
|
|||
if uid in self.wikiUids:
|
||||
self.wikiUids.remove(uid)
|
||||
|
||||
def renameWiki(self, wiki, newName):
|
||||
intIds = self.getPlugin(IIntIds)
|
||||
self.removeWiki(wiki)
|
||||
intIds.unregister(wiki)
|
||||
wiki.rename(newName)
|
||||
intIds.register(wiki)
|
||||
self.addWiki(wiki)
|
||||
|
||||
def listWikis(self):
|
||||
for uid in self.wikiUids:
|
||||
yield self.getObject(uid)
|
||||
|
@ -114,7 +122,6 @@ class Wiki(BaseWiki):
|
|||
|
||||
def getPages(self):
|
||||
# TODO: restrict to wiki page objects
|
||||
#return dict((k, v) for k, v in self.objectItems())
|
||||
return dict((k, v) for k, v in self.getItems())
|
||||
|
||||
def createPage(self, name, title, text=u''):
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#
|
||||
|
||||
"""
|
||||
Planning and recording activities (work items).
|
||||
Store wiki links as tracks.
|
||||
|
||||
$Id$
|
||||
"""
|
||||
|
@ -91,7 +91,7 @@ class Link(BaseLink, Stateful, Track):
|
|||
return component.getUtility(IStatesDefinition, name=self.statesDefinition)
|
||||
|
||||
|
||||
class xx_LinkManager(BaseLinkManager):
|
||||
class LinkManager(BaseLinkManager):
|
||||
""" A tracking storage adapter managing wiki links.
|
||||
"""
|
||||
|
||||
|
|
10
z2/browser/main.pt
Normal file
10
z2/browser/main.pt
Normal file
|
@ -0,0 +1,10 @@
|
|||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"
|
||||
metal:define-macro="page">
|
||||
|
||||
<body>
|
||||
|
||||
<div metal:define-slot="main" />
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
12
z2/browser/main_zmi.pt
Normal file
12
z2/browser/main_zmi.pt
Normal file
|
@ -0,0 +1,12 @@
|
|||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"
|
||||
metal:define-macro="page">
|
||||
|
||||
<body>
|
||||
|
||||
<div tal:replace="structure context/manage_tabs" />
|
||||
|
||||
<div metal:define-slot="main" />
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -23,10 +23,15 @@ $Id$
|
|||
"""
|
||||
|
||||
from Products.Five import BrowserView
|
||||
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
|
||||
|
||||
from cybertools.view.browser.view import BaseView, GenericView
|
||||
|
||||
|
||||
main_page = ViewPageTemplateFile('main.pt')
|
||||
zmi_page = ViewPageTemplateFile('main_zmi.pt')
|
||||
|
||||
|
||||
class BaseView(BrowserView, BaseView):
|
||||
|
||||
resource_prefix = '/++resource++'
|
||||
|
|
|
@ -64,6 +64,9 @@ class GenericObject(object):
|
|||
def getParent(self):
|
||||
return aq_parent(aq_inner(self))
|
||||
|
||||
def rename(self, newName):
|
||||
self.getParent().manage_renameObject(self.name, newName)
|
||||
|
||||
|
||||
class GenericFolder(GenericObject):
|
||||
""" Provide generic (i.e. dictionary-like) folder access to Zope2's
|
||||
|
|
Loading…
Add table
Reference in a new issue