[Checkins] SVN: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/ setup jquery renderers for client side event notification.

Paul Carduner paulcarduner at gmail.com
Thu Jul 10 14:06:09 EDT 2008


Log message for revision 88196:
  setup jquery renderers for client side event notification.

Changed:
  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/jqueryrenderer.txt
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt
  U   z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py

-=-
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 17:00:36 UTC (rev 88195)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py	2008-07-10 18:05:10 UTC (rev 88196)
@@ -410,7 +410,7 @@
         description=u"The event that took place.")
 
 
-class IClientEvent(zope.interface.Interface):
+class IEventRenderer(zope.interface.Interface):
     """A representation of an event for a client side framework.
 
     Could possibly be a JSON representation of the arguments passed to

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py	2008-07-10 17:00:36 UTC (rev 88195)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py	2008-07-10 18:05:10 UTC (rev 88196)
@@ -114,13 +114,20 @@
         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
+        renderer = zope.component.queryMultiAdapter(
+            (self.handler.event, self.request), interfaces.IEventRenderer)
+        if renderer is not None:
+            renderer.update()
+            event = renderer.render()
+        else:
+            event = '{}'
+        result = '$()'
+        for interface in zope.interface.providedBy(self.handler.event):
+            eventName = '"%s.%s"' % (interface.__module__,
+                                     interface.__name__)
+            result+='\n.trigger(%s, %s)' % (eventName, event)
+        result += ';'
+        return result
 
 
 class JQueryMessageValidationScriptRenderer(object):

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.txt
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.txt	2008-07-10 17:00:36 UTC (rev 88195)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.txt	2008-07-10 18:05:10 UTC (rev 88196)
@@ -274,3 +274,33 @@
     function(html){switchWidget("form-zip", "display", html)}
     )}}
   )
+
+
+``INotifyClientHandler`` Renderer
+---------------------------------
+
+This renderer defines how javascript notifies an event framework of an
+event that occurs on the server.
+
+Let's create a ``NotifyClientHandler`` instance.
+
+  >>> from z3c.formjs import jsclientevent
+  >>> notify = jsclientevent.NotifyClientHandler()
+
+  >>> from zope.lifecycleevent import ObjectModifiedEvent
+  >>> notify.event = ObjectModifiedEvent(object())
+
+Let's now register the renderer:
+
+  >>> zope.component.provideAdapter(
+  ...     jqueryrenderer.JQueryNotifyClientHandlerRenderer)
+
+Now we can render the script:
+
+  >>> renderer = zope.component.getMultiAdapter(
+  ...     (notify, request), interfaces.IRenderer)
+  >>> renderer.update()
+  >>> print renderer.render()
+  $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
+      .trigger("zope.component.interfaces.IObjectEvent", {});
+

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 17:00:36 UTC (rev 88195)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt	2008-07-10 18:05:10 UTC (rev 88196)
@@ -356,8 +356,10 @@
   >>> editform.update()
 
   >>> print editform.eventInjections
-  $().trigger("ObjectModifiedEvent")
+  $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
+      .trigger("zope.component.interfaces.IObjectEvent", {});
 
+
 Lets not forget to end the interaction we created.
 
   >>> management.endInteraction()

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py	2008-07-10 17:00:36 UTC (rev 88195)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py	2008-07-10 18:05:10 UTC (rev 88196)
@@ -175,13 +175,20 @@
         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
+        renderer = zope.component.queryMultiAdapter(
+            (self.handler.event, self.request), interfaces.IEventRenderer)
+        if renderer is not None:
+            renderer.update()
+            event = renderer.render()
+        else:
+            event = '{}'
+        result = '$()'
+        for interface in zope.interface.providedBy(self.handler.event):
+            eventName = '"%s.%s"' % (interface.__module__,
+                                     interface.__name__)
+            result+='\n.trigger(%s, %s)' % (eventName, event)
+        result += ';'
+        return result
 
 
 def setupRenderers():



More information about the Checkins mailing list