[Checkins] SVN: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/ made javascript buttons work in a realistic setting. tests and demo to come.

Paul Carduner paulcarduner at gmail.com
Thu Jun 14 09:46:52 EDT 2007


Log message for revision 76695:
  made javascript buttons work in a realistic setting.  tests and demo to come.

Changed:
  A   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/SETUP.cfg
  A   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/browser/configure.zcml
  A   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py
  U   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py
  A   Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/z3c.formjs-configure.zcml

-=-
Added: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/SETUP.cfg
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/SETUP.cfg	                        (rev 0)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/SETUP.cfg	2007-06-14 13:46:51 UTC (rev 76695)
@@ -0,0 +1,3 @@
+<data-files zopeskel/etc/package-includes>
+  z3c.formjs-*.zcml
+</data-files>


Property changes on: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/SETUP.cfg
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/browser/configure.zcml
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/browser/configure.zcml	                        (rev 0)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/browser/configure.zcml	2007-06-14 13:46:51 UTC (rev 76695)
@@ -0,0 +1,17 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.formjs">
+
+  <adapter
+      factory=".jsbutton.ButtonFieldWidget"
+      />
+<!-- For some reason, this does not seem to be working.
+  <z3c:widgetTemplate
+      mode="input"
+      widget="z3c.formjs.interfaces.IButtonWidget"
+      layer="jquery.layer.IJqueryJavaScriptBrowserLayer"
+      template="button_input.pt"
+      />
+-->
+</configure>


Property changes on: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/browser/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml	                        (rev 0)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml	2007-06-14 13:46:51 UTC (rev 76695)
@@ -0,0 +1,15 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    i18n_domain="z3c.formjs">
+
+  <!-- Action Managers and Handlers -->
+  <adapter
+      factory=".jsbutton.JSButtonAction"
+      provides="z3c.form.interfaces.IFieldWidget"
+      />
+
+  <adapter
+      factory=".jsevent.JQueryEventRenderer"
+      />
+
+</configure>


Property changes on: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py	2007-06-14 13:42:53 UTC (rev 76694)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/interfaces.py	2007-06-14 13:46:51 UTC (rev 76695)
@@ -42,7 +42,7 @@
         schema=IJSEvent,
         required=True)
 
-    def render(handler, id):
+    def render(handler, id, form):
         """render javascript to link DOM element with given id to the
         code produced by the given handler.
         """
@@ -59,7 +59,10 @@
 class IJSButtonHandler(IButtonHandler):
     """A button handler for javascript buttons."""
 
+    def __call__(form, id):
+        """call the handler, passing it the form."""
 
+
 class IJSAction(Interface):
     """Action"""
 

Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py	2007-06-14 13:42:53 UTC (rev 76694)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsbutton.py	2007-06-14 13:46:51 UTC (rev 76695)
@@ -23,11 +23,14 @@
 import zope.interface
 import zope.location
 import zope.component
+from zope.app.pagetemplate import ViewPageTemplateFile
 
 from z3c.form import button, util, action, widget
 from z3c.form.interfaces import (IButton, IFieldWidget, IValue,
                             IButtonHandlers, IFormLayer, IButtonForm)
 
+from jquery.layer import IJQueryJavaScriptBrowserLayer
+
 import interfaces, jsevent
 
 
@@ -37,13 +40,14 @@
 
     css = u'buttonWidget'
     accesskey = None
+    template = ViewPageTemplateFile("browser/button_input.pt")
 
- at zope.component.adapter(IButton, IFormLayer)
+ at zope.component.adapter(IButton, IJQueryJavaScriptBrowserLayer)
 @zope.interface.implementer(IFieldWidget)
-def SubmitFieldWidget(field, request):
-    submit = widget.FieldWidget(field, SubmitWidget(request))
-    submit.value = field.title
-    return submit
+def ButtonFieldWidget(field, request):
+    button = widget.FieldWidget(field, ButtonWidget(request))
+    button.value = field.title
+    return button
 
 
 class JSButton(button.Button):
@@ -79,19 +83,19 @@
         self.func = func
         self.event = event
 
-    def __call__(self):
+    def __call__(self, form, id):
         ## TODO: Passing None makes the tests work because the handler
         ## functions take self as the first arg.  Instead of passing
-        ## None, I should be passing the form the handler is defined
-        ## in - but how do I get this from here?
-        return self.func(None)
+        ## None, I should be passing the form that the handler is
+        ## defined in - but how do I get this from here?
+        return self.func(form, id)
 
     def __repr__(self):
         return '<%s for %r>' %(self.__class__.__name__, self.button)
 
 
 def handler(button, **kwargs):
-    """A decoratore for defining a javascript event handler."""
+    """A decorator for defining a javascript event handler."""
     def createHandler(func):
         handler = Handler(button, func, event=kwargs.get('event', jsevent.CLICK))
         frame = sys._getframe(1)
@@ -104,6 +108,10 @@
 
 class JSButtonAction(action.Action, ButtonWidget, zope.location.Location):
     zope.interface.implements(IFieldWidget)
+    zope.component.adapts(
+        IJQueryJavaScriptBrowserLayer,
+        interfaces.IJSButton,
+        zope.interface.Interface)
 
     def __init__(self, request, field, name):
         action.Action.__init__(self, request, field.title, name)
@@ -129,48 +137,4 @@
             return
         renderer = zope.component.getMultiAdapter((handler.event, self.request),
                                                   interfaces.IJSEventRenderer)
-        return renderer.render(handler, self.id)
-
-
-class JSButtonActions(util.Manager):
-    """JS Button Action Manager class."""
-    zope.interface.implementsOnly(interfaces.IJSActions)
-
-    zope.component.adapts(
-        IButtonForm,
-        zope.interface.Interface,
-        zope.interface.Interface)
-
-    __name__ = __parent__ = None
-
-    def __init__(self, form, request, content):
-        super(JSButtonActions, self).__init__()
-        self.form = form
-        self.request = request
-        self.content = content
-
-    def update(self):
-        """See z3c.form.interfaces.IActions."""
-        # Create a unique prefix
-        prefix = util.expandPrefix(self.form.prefix)
-        prefix += util.expandPrefix(self.form.buttons.prefix)
-        for name, button in self.form.buttons.items():
-            # Only create an action for the button, if the condition is
-            # fulfilled
-            if button.condition is not None and not button.condition(self.form):
-                continue
-            fullName = prefix + name
-            buttonAction = JSButtonAction(self.request, button, fullName)
-            # Look up a potential custom title for the action.
-            title = zope.component.queryMultiAdapter(
-                (self.form, self.request, self.content, button, self),
-                IValue, name='title')
-            if title is not None:
-                buttonAction.title = title.get()
-            self._data_keys.append(name)
-            self._data_values.append(buttonAction)
-            self._data[name] = buttonAction
-            zope.location.locate(buttonAction, self, name)
-
-    def __repr__(self):
-        return '<%s %r>' % (self.__class__.__name__, self.__name__)
+        return renderer.render(handler, self.id, self.__parent__.form)

Modified: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py	2007-06-14 13:42:53 UTC (rev 76694)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/jsevent.py	2007-06-14 13:46:51 UTC (rev 76695)
@@ -56,5 +56,5 @@
         self.request = request
         self.event = event
 
-    def render(self, handler, id):
-        return '$("#%s").bind("%s", function(){%s});' % (id, self.event.name, handler())
+    def render(self, handler, id, form):
+        return '$("#%s").bind("%s", function(){%s});' % (id, self.event.name, handler(form, id))

Added: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/z3c.formjs-configure.zcml
===================================================================
--- Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/z3c.formjs-configure.zcml	                        (rev 0)
+++ Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/z3c.formjs-configure.zcml	2007-06-14 13:46:51 UTC (rev 76695)
@@ -0,0 +1 @@
+<include package="z3c.formjs" />


Property changes on: Sandbox/pcardune/z3cFormJS/trunk/src/z3c/formjs/z3c.formjs-configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list