[Checkins] SVN: z3c.formjs/branches/pcardune-client-notify-r87806/ beginnings of work on client side event notiication and handling.

Paul Carduner paulcarduner at gmail.com
Thu Jul 10 11:52:50 EDT 2008


Log message for revision 88193:
  beginnings of work on client side event notiication and handling.

Changed:
  A   z3c.formjs/branches/pcardune-client-notify-r87806/
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.py

-=-
Copied: z3c.formjs/branches/pcardune-client-notify-r87806 (from rev 88143, z3c.formjs/trunk)

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/interfaces.py	2008-07-09 15:19:58 UTC (rev 88143)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py	2008-07-10 15:52:48 UTC (rev 88193)
@@ -397,5 +397,24 @@
 class IClientEventHandler(zope.interface.Interface):
     """A handler managed by the client event handlers."""
 
-    def __call__(self, form, event):
+    def __call__(form, event):
         """Execute the handler."""
+
+
+class IAutoEventHandler(IClientEventHandler):
+    """Marker interface to auto event handler can be rendered."""
+
+    event = zope.schema.Field(
+        title=u"The event that took place.")
+
+class IClientEvent(zope.interface.Interface):
+    """A representation of an event for a client side framework.
+
+    Could possibly be a JSON representation of the arguments passed to
+    the event."""
+
+    def update():
+        """Perform any necessary updates"""
+
+    def render():
+        """Return the javascript representation of the event."""

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jqueryrenderer.py	2008-07-09 15:19:58 UTC (rev 88143)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py	2008-07-10 15:52:48 UTC (rev 88193)
@@ -101,6 +101,28 @@
             '\n  '.join([r.render() for r in self.renderers]) )
 
 
+class JQueryAutoEventHandlerRenderer(object):
+    zope.interface.implements(interfaces.IRenderer)
+    zope.component.adapts(interfaces.IAutoEventHandler,
+                          IJQueryJavaScriptBrowserLayer)
+
+    def __init__(self, handler, request):
+        self.handler = handler
+        self.request = request
+
+    def update(self):
+        pass
+
+    def render(self):
+        try:
+            event = interfaces.IClientEvent(self.handler.event,
+                                            self.request)
+            event = event.render()
+        except:
+            event = '"%s"' % self.handler.event.__class__.__name__
+        return '$().trigger(%s)' % event
+
+
 class JQueryMessageValidationScriptRenderer(object):
     zope.component.adapts(
         interfaces.IMessageValidationScript, IJQueryJavaScriptBrowserLayer)

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.py
===================================================================
--- z3c.formjs/trunk/src/z3c/formjs/jsclientevent.py	2008-07-09 15:19:58 UTC (rev 88143)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.py	2008-07-10 15:52:48 UTC (rev 88193)
@@ -98,6 +98,21 @@
     return createListener
 
 
+class AutoEventHandler(object):
+    """An implementation of a client event handler that automatically
+    produces javascript that is meant to call client side event notifiers."""
+    zope.interface.implements(interfaces.IAutoEventHandler)
+
+    event = None
+
+    def __call__(self, form, event):
+        renderer = zope.component.getMultiAdapter(
+            (self, form.request), interfaces.IRenderer)
+        renderer.update()
+        self.event = event
+        return renderer.render()
+
+
 @zope.component.adapter(zope.component.interfaces.IObjectEvent)
 def serverToClientEventLoader(event):
     """Event handler that listens for server side events



More information about the Checkins mailing list