[Checkins] SVN: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/ create a basic renderer for an object event.

Paul Carduner paulcarduner at gmail.com
Thu Jul 10 18:33:54 EDT 2008


Log message for revision 88218:
  create a basic renderer for an object event.

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/jqueryrenderer.zcml
  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 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/interfaces.py	2008-07-10 22:33:53 UTC (rev 88218)
@@ -430,14 +430,3 @@
 class IClientEvent(IObjectEvent):
     """Marker interface for an event that has an effect on the client."""
 
-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
-    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/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py	2008-07-10 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.py	2008-07-10 22:33:53 UTC (rev 88218)
@@ -19,6 +19,7 @@
 import zope.component
 import zope.interface
 from zope.traversing.browser import absoluteURL
+from zope.component.interfaces import IObjectEvent
 
 from jquery.layer import IJQueryJavaScriptBrowserLayer
 
@@ -100,7 +101,27 @@
         return '$(document).ready(function(){\n  %s\n})' %(
             '\n  '.join([r.render() for r in self.renderers]) )
 
+class JQueryObjectEventRenderer(object):
+    zope.component.adapts(IObjectEvent,
+                          IJQueryJavaScriptBrowserLayer)
+    zope.interface.implements(interfaces.IRenderer)
 
+    def __init__(self, event, request):
+        self.event = event
+        self.request = request
+
+    def update(self):
+        pass
+
+    def render(self):
+        attrs = set([])
+        for interface in zope.interface.providedBy(self.event):
+            attrs.update(interface.names())
+        content = '{%s}' % ','.join(['"%s":"%s"' % (attr,getattr(self.event, attr))
+                                     for attr in attrs])
+        return content
+
+
 class JQueryNotifyClientHandlerRenderer(object):
     zope.component.adapts(interfaces.INotifyClientHandler,
                           IJQueryJavaScriptBrowserLayer)
@@ -115,7 +136,7 @@
 
     def render(self):
         renderer = zope.component.queryMultiAdapter(
-            (self.handler.event, self.request), interfaces.IEventRenderer)
+            (self.handler.event, self.request), interfaces.IRenderer)
         if renderer is not None:
             renderer.update()
             event = renderer.render()

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 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.txt	2008-07-10 22:33:53 UTC (rev 88218)
@@ -304,3 +304,26 @@
   $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
       .trigger("zope.component.interfaces.IObjectEvent", {});
 
+``IObjectEvent`` Renderer
+-------------------------
+
+This renderer defines how to represent an object event in javascript.
+
+Let's create an ``ObjectEvent`` instance.
+
+  >>> from zope.component.interfaces import ObjectEvent
+  >>> event = ObjectEvent("foo")
+
+Let's now register the renderer:
+
+  >>> zope.component.provideAdapter(
+  ...     jqueryrenderer.JQueryObjectEventRenderer)
+
+Now we can render the script:
+
+  >>> renderer = zope.component.getMultiAdapter(
+  ...     (event, request), interfaces.IRenderer)
+  >>> renderer.update()
+  >>> print renderer.render()
+  {"object":"foo"}
+

Modified: z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.zcml
===================================================================
--- z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.zcml	2008-07-10 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jqueryrenderer.zcml	2008-07-10 22:33:53 UTC (rev 88218)
@@ -27,6 +27,9 @@
       factory=".jqueryrenderer.JQueryWidgetSaverRenderer"
       />
   <adapter
+      factory=".jqueryrenderer.JQueryObjectEventRenderer"
+      />
+  <adapter
       factory=".jqueryrenderer.JQueryNotifyClientHandlerRenderer"
       />
 

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 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/jsclientevent.txt	2008-07-10 22:33:53 UTC (rev 88218)
@@ -363,12 +363,15 @@
   >>> editform.update()
 
   >>> print editform.eventInjections
-  $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
-      .trigger("zope.component.interfaces.IObjectEvent", {});
-  $() .trigger("z3c.formjs.interfaces.IClientEvent", {})
-      .trigger("zope.component.interfaces.IObjectEvent", {});
+    $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent",
+             {"object":"<Article object at ...>"})
+        .trigger("zope.component.interfaces.IObjectEvent",
+             {"object":"<Article object at ...>"});
+    $() .trigger("z3c.formjs.interfaces.IClientEvent",
+             {"object":"<ArticleEditForm object at ...>"})
+        .trigger("zope.component.interfaces.IObjectEvent",
+             {"object":"<ArticleEditForm object at ...>"});
 
-
 Lets not forget to end the interaction we created.
 
   >>> management.endInteraction()
@@ -384,8 +387,12 @@
   >>> viewlet.update()
   >>> print viewlet.render()
   <script type="text/javascript">
-    $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent", {})
-        .trigger("zope.component.interfaces.IObjectEvent", {});
-    $() .trigger("z3c.formjs.interfaces.IClientEvent", {})
-        .trigger("zope.component.interfaces.IObjectEvent", {});
+    $() .trigger("zope.lifecycleevent.interfaces.IObjectModifiedEvent",
+             {"object":"<Article object at ...>"})
+        .trigger("zope.component.interfaces.IObjectEvent",
+             {"object":"<Article object at ...>"});
+    $() .trigger("z3c.formjs.interfaces.IClientEvent",
+             {"object":"<ArticleEditForm object at ...>"})
+        .trigger("zope.component.interfaces.IObjectEvent",
+             {"object":"<ArticleEditForm object at ...>"});
   </script>

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 21:48:56 UTC (rev 88217)
+++ z3c.formjs/branches/pcardune-client-notify-r87806/src/z3c/formjs/testing.py	2008-07-10 22:33:53 UTC (rev 88218)
@@ -21,6 +21,7 @@
 import zope.interface
 from zope.app.pagetemplate import viewpagetemplatefile
 from zope.app.testing import setup
+from zope.component.interfaces import IObjectEvent
 from zope.publisher.interfaces.browser import IBrowserRequest
 
 import z3c.formjs.tests
@@ -162,6 +163,27 @@
         return "$.get('saveValue', function(msg){%s}\n)" % saveCall
 
 
+class ObjectEventRenderer(object):
+    zope.component.adapts(IObjectEvent,
+                          IBrowserRequest)
+    zope.interface.implements(interfaces.IRenderer)
+
+    def __init__(self, event, request):
+        self.event = event
+        self.request = request
+
+    def update(self):
+        pass
+
+    def render(self):
+        attrs = set([])
+        for interface in zope.interface.providedBy(self.event):
+            attrs.update(interface.names())
+        content = '{%s}' % ','.join(['"%s":"%s"' % (attr,getattr(self.event, attr))
+                                     for attr in attrs])
+        return content
+
+
 class NotifyClientHandlerRenderer(object):
     zope.component.adapts(interfaces.INotifyClientHandler,
                           IBrowserRequest)
@@ -176,7 +198,7 @@
 
     def render(self):
         renderer = zope.component.queryMultiAdapter(
-            (self.handler.event, self.request), interfaces.IEventRenderer)
+            (self.handler.event, self.request), interfaces.IRenderer)
         if renderer is not None:
             renderer.update()
             event = renderer.render()
@@ -200,6 +222,7 @@
     zope.component.provideAdapter(WidgetSwitcherRenderer)
     zope.component.provideAdapter(LabelWidgetSwitcherRenderer)
     zope.component.provideAdapter(WidgetSaverRenderer)
+    zope.component.provideAdapter(ObjectEventRenderer)
     zope.component.provideAdapter(NotifyClientHandlerRenderer)
 
 



More information about the Checkins mailing list