[Checkins] SVN: z3c.formjsdemo/trunk/src/z3c/formjsdemo/ added demo
that shows how server side events can propagate to the
clients browser through javascript injections.
Paul Carduner
paulcarduner at gmail.com
Mon Aug 20 17:46:51 EDT 2007
Log message for revision 79051:
added demo that shows how server side events can propagate to the clients browser through javascript injections.
Changed:
U z3c.formjsdemo/trunk/src/z3c/formjsdemo/browser/index.pt
A z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/
A z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/__init__.py
A z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/addarticle.pt
A z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/article.py
A z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/browser.py
A z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/clientevent.pt
A z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/configure.zcml
A z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/interfaces.py
U z3c.formjsdemo/trunk/src/z3c/formjsdemo/configure.zcml
-=-
Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/browser/index.pt
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/browser/index.pt 2007-08-20 21:01:54 UTC (rev 79050)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/browser/index.pt 2007-08-20 21:46:50 UTC (rev 79051)
@@ -16,6 +16,11 @@
<a href="/widgetswitch.html">Widget Switching</a>
</div>
+ <div>
+ <a href="/addArticle.html">Server to Client Event Propogation</a>
+ </div>
+
+
<h4>Advanced Demos</h4>
<div>
Added: z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/__init__.py
===================================================================
Added: z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/addarticle.pt
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/addarticle.pt (rev 0)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/addarticle.pt 2007-08-20 21:46:50 UTC (rev 79051)
@@ -0,0 +1,9 @@
+<div metal:use-macro="macro:form" />
+
+<h1>Existing Articles</h1>
+<ul>
+ <li tal:repeat="article view/articles">
+ <a tal:attributes="href article/@@absolute_url"
+ tal:content="article/title">Article</a>
+ </li>
+</ul>
Added: z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/article.py
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/article.py (rev 0)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/article.py 2007-08-20 21:46:50 UTC (rev 79051)
@@ -0,0 +1,13 @@
+import persistent
+import zope.interface
+from zope.schema.fieldproperty import FieldProperty
+
+import interfaces
+
+class Article(persistent.Persistent):
+
+ zope.interface.implements(interfaces.IArticle)
+
+ title = FieldProperty(interfaces.IArticle['title'])
+ subtitle = FieldProperty(interfaces.IArticle['subtitle'])
+ body = FieldProperty(interfaces.IArticle['body'])
Added: z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/browser.py
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/browser.py (rev 0)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/browser.py 2007-08-20 21:46:50 UTC (rev 79051)
@@ -0,0 +1,81 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Browser code for JS button demo.
+
+$Id: layer.py 75942 2007-05-24 14:53:46Z srichter $
+"""
+__docformat__="restructuredtext"
+import zope.interface
+from zope.viewlet.viewlet import CSSViewlet
+from zope.event import notify
+from zope.component.interfaces import IObjectEvent
+from zope.component.interfaces import ObjectEvent
+from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
+from zope.lifecycleevent.interfaces import IObjectModifiedEvent
+from zope.lifecycleevent.interfaces import IAttributes
+from zope.security.proxy import removeSecurityProxy
+from zope.app.container.interfaces import INameChooser
+from zope.traversing.browser.absoluteurl import absoluteURL
+
+from z3c.form import form, button, field
+from z3c.form.interfaces import IWidgets
+from z3c.formui import layout
+
+from z3c.formjs import jsaction, jsevent, ajax, jsclientevent
+
+import interfaces, article
+
+class ArticleAddForm(layout.FormLayoutSupport, form.AddForm):
+
+ template = ViewPageTemplateFile('addarticle.pt')
+ label = "Add an article"
+ fields = field.Fields(interfaces.IArticle)
+
+ def articles(self):
+ return filter(interfaces.IArticle.providedBy, self.context.values())
+
+ def create(self, data):
+ art = article.Article()
+ art.title = data['title']
+ art.subtitle = data['subtitle']
+ art.body = data['body']
+ return art
+
+ def add(self, object):
+ name = object.title.lower().replace(' ','')
+ context = removeSecurityProxy(self.context)
+ name = INameChooser(context).chooseName(name, object)
+ context[name] = object
+ self._name = name
+
+ def nextURL(self):
+ return absoluteURL(removeSecurityProxy(self.context)[self._name], self.request)
+
+
+class IButtons(zope.interface.Interface):
+ notify = jsaction.JSButton(title=u'Notify')
+
+class EventForm(jsclientevent.ClientEventsForm,
+ ajax.AJAXRequestHandler,
+ layout.FormLayoutSupport,
+ form.EditForm):
+
+ fields = field.Fields(interfaces.IArticle)
+
+ @jsclientevent.listener((interfaces.IArticle, IObjectModifiedEvent))
+ def customEventListener(self, event):
+ attributes = []
+ for attr in filter(IAttributes.providedBy, event.descriptions):
+ attributes += list(attr.attributes)
+ return 'alert("The following fields have changed: %s");' % ','.join(attributes)
Added: z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/clientevent.pt
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/clientevent.pt (rev 0)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/clientevent.pt 2007-08-20 21:46:50 UTC (rev 79051)
@@ -0,0 +1,3 @@
+<div metal:use-macro="macro:form" />
+<script type="text/javascript"
+ tal:content="view/eventInjections"></script>
\ No newline at end of file
Added: z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/configure.zcml
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/configure.zcml (rev 0)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/configure.zcml 2007-08-20 21:46:50 UTC (rev 79051)
@@ -0,0 +1,39 @@
+<configure
+ xmlns="http://namespaces.zope.org/browser"
+ xmlns:zope="http://namespaces.zope.org/zope"
+ xmlns:z3c="http://namespaces.zope.org/z3c"
+ i18n_domain="z3c.formjsdemo">
+
+ <zope:class class=".article.Article">
+ <allow
+ interface=".interfaces.IArticle"
+ />
+ <require
+ permission="zope.View"
+ set_schema=".interfaces.IArticle"
+ />
+ </zope:class>
+
+ <z3c:pagelet
+ name="addArticle.html"
+ for="zope.app.folder.interfaces.IFolder"
+ class=".browser.ArticleAddForm"
+ layer="z3c.formjsdemo.layer.IDemoBrowserLayer"
+ permission="zope.Public"
+ />
+
+ <z3c:pagelet
+ name="index.html"
+ for=".interfaces.IArticle"
+ class=".browser.EventForm"
+ layer="z3c.formjsdemo.layer.IDemoBrowserLayer"
+ permission="zope.Public"
+ />
+
+ <z3c:template
+ template="clientevent.pt"
+ for=".browser.EventForm"
+ layer="z3c.formjsdemo.layer.IDemoBrowserLayer"
+ />
+
+</configure>
Added: z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/interfaces.py
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/interfaces.py (rev 0)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/clientevent/interfaces.py 2007-08-20 21:46:50 UTC (rev 79051)
@@ -0,0 +1,17 @@
+import zope.interface
+from zope.schema import TextLine, Text
+
+class IArticle(zope.interface.Interface):
+ """A simple article"""
+
+ title = TextLine(
+ title=u'Title',
+ required=True)
+
+ subtitle = TextLine(
+ title=u'Subtitle',
+ required=True)
+
+ body = Text(
+ title=u'Body',
+ required=False)
Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/configure.zcml
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/configure.zcml 2007-08-20 21:01:54 UTC (rev 79050)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/configure.zcml 2007-08-20 21:46:50 UTC (rev 79051)
@@ -19,5 +19,6 @@
<include package=".chat" />
<include package=".widgetswitch" />
<include package=".tree" />
+ <include package=".clientevent" />
</configure>
More information about the Checkins
mailing list