[Checkins] SVN: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/ added a client event handlers viewlet.

Paul Carduner paulcarduner at gmail.com
Thu Jul 10 14:34:50 EDT 2008


Log message for revision 88197:
  added a client event handlers viewlet.

Changed:
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/configure.zcml
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.py
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt

-=-
Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/configure.zcml
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/configure.zcml	2008-07-10 18:05:10 UTC (rev 88196)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/configure.zcml	2008-07-10 18:33:53 UTC (rev 88197)
@@ -146,6 +146,15 @@
       layer="z3c.form.interfaces.IFormLayer"
       />
 
+  <browser:viewlet
+      name="z3c.formjs.clientevents"
+      manager=".interfaces.IDynamicJavaScript"
+      view="z3c.formjs.interfaces.IHaveClientEvents"
+      class="z3c.formjs.jsclientevent.ClientEventsViewlet"
+      permission="zope.Public"
+      layer="z3c.form.interfaces.IFormLayer"
+      />
+
   <!-- Specific Javascript-backend implementations -->
 
   <include file="jqueryrenderer.zcml" />

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py	2008-07-10 18:05:10 UTC (rev 88196)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py	2008-07-10 18:33:53 UTC (rev 88197)
@@ -410,6 +410,23 @@
         description=u"The event that took place.")
 
 
+class IHaveClientEvents(zope.interface.Interface):
+    """A view that has client events."""
+
+    jsClientListeners = zope.schema.Object(
+        schema=IClientEventHandlers,
+        title=u"JS Client Listeners",
+        description=u"Listeners associated with this view")
+
+    eventCalls = zope.schema.List(
+        title=u"Event Calls",
+        description=u"list of events notified during the interaction")
+
+    eventInjections = zope.schema.Text(
+        title=u"Event Injections",
+        description=u"The javascript code to be injected that handles events.")
+
+
 class IEventRenderer(zope.interface.Interface):
     """A representation of an event for a client side framework.
 

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.py
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.py	2008-07-10 18:05:10 UTC (rev 88196)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.py	2008-07-10 18:33:53 UTC (rev 88197)
@@ -20,6 +20,7 @@
 import zope.component
 import zope.interface
 from zope.interface import adapter
+from zope.viewlet import viewlet
 
 from zope.security.management import getInteraction
 from zope.publisher.interfaces.browser import IBrowserRequest
@@ -149,7 +150,7 @@
 
 class ClientEventsForm(object):
     """Mixin class to support calling of client side events."""
-
+    zope.interface.implements(interfaces.IHaveClientEvents)
     jsClientListeners = ClientEventHandlers()
 
     @property
@@ -169,3 +170,16 @@
                         for h in self.jsClientListeners.getHandlers(event)]
         results = '\n'.join(results)
         return results
+
+
+class ClientEventsViewlet(viewlet.ViewletBase):
+    """A viewlet that renders client events."""
+    zope.component.adapts(
+        zope.interface.Interface,
+        IBrowserRequest,
+        interfaces.IHaveClientEvents,
+        zope.interface.Interface)
+
+    def render(self):
+        content = self.__parent__.eventInjections
+        return u'<script type="text/javascript">\n%s\n</script>' % content

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt	2008-07-10 18:05:10 UTC (rev 88196)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt	2008-07-10 18:33:53 UTC (rev 88197)
@@ -363,3 +363,18 @@
 Lets not forget to end the interaction we created.
 
   >>> management.endInteraction()
+
+
+ClientEventHandler Viewlet
+--------------------------
+
+We also have a viewlet that renders the javascript event injections.
+
+  >>> viewlet = jsclientevent.ClientEventsViewlet(
+  ...     article, request, editform, object())
+  >>> viewlet.update()
+  >>> print viewlet.render()
+  <script type="text/javascript">
+    $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
+        .trigger("zope.component.interfaces.IObjectEvent", {});
+  </script>



More information about the Checkins mailing list