from twisted.application import service, strports
from nevow import appserver, loaders, rend, static, url
import forms
class NewsEditPage(forms.ResourceMixin, rend.Page):
docFactory = loaders.xmlstr("""
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:n="http://nevow.com/ns/nevow/0.1">
<head>
<title>Example 1: A News Item Editor</title>
<link rel="stylesheet" href="form_css" type="text/css" />
</head>
<body>
<h1>Example 1: A News Item Editor</h1>
<n:invisible n:render="form saveNewsItem" />
<ol n:render="sequence" n:data="newsItems">
<li n:pattern="item" n:render="mapping">
<strong><n:slot name="title" /></strong>: <n:slot name="description" />
</li>
</ol>
</body>
</html>
""")
child_form_css = forms.defaultCSS
def __init__(self, *args, **kwargs):
self.store = kwargs.pop('store')
super(NewsEditPage, self).__init__(*args, **kwargs)
def saveNewsItem(self, ctx, form, newsItemData):
self.store.append(newsItemData)
return url.here.click('confirmation')
def form_saveNewsItem(self, ctx):
form = forms.Form()
form.addField('title', forms.String(required=True))
form.addField('description', forms.String(required=True), forms.widgetFactory(forms.TextArea))
form.addAction(self.saveNewsItem)
return form
def data_newsItems(self, ctx, name):
return self.store
class ConfirmationPage(rend.Page):
docFactory = loaders.xmlstr("""
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<body>
<h1>Your item has been saved</h1>
<ul>
<li><a href="./">Go back</a></li>
</ul>
</body>
</html>
""")
store = [dict(title="Lorum Ipsum", description="""
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed sed enim mollis
nulla faucibus aliquet. Praesent nec nibh. Nam eget pede. Nam tincidunt purus id
lorem. Vestibulum lectus nisl, molestie vitae, feugiat egestas, sodales et,
tellus. Vivamus eu libero. Nulla facilisi. Nullam nec dolor. Proin ac diam at
neque auctor pulvinar. Maecenas eros nibh, fermentum at, eleifend at, malesuada
eu, nunc. Sed posuere felis eu ipsum. In volutpat. Phasellus viverra. Quisque
dignissim mattis turpis. Maecenas accumsan ipsum vel orci. Cras ac lectus. Sed
nec nisl. Integer iaculis elit scelerisque sapien. Curabitur ac diam.
""")]
rootResource = NewsEditPage(store=store)
rootResource.putChild('confirmation', ConfirmationPage())
application = service.Application("News item editor")
strports.service("8080", appserver.NevowSite(rootResource)).setServiceParent(application)