diff --git a/README.rst b/README.rst
index ceab262..453ac93 100644
--- a/README.rst
+++ b/README.rst
@@ -461,6 +461,40 @@ attribute ``ajaxtarget`` on the received event a convenience is provided.::
bdajax.trigger('contextchanged', '.contextsensitiv', url)
+AJAX Forms
+----------
+
+To process ajax forms, a hidden iframe is used where the form gets triggered to.
+The form must be marked with CSS class ``ajax`` in order to be handled by
+bdajax. The server side must return a response like so::
+
+
+
+
+
+
+If ``div`` with id ``ajaxform`` contains markup, it gets rendered to
+``#form_selector`` with ``fiddle_mode``. This makes it possible to rerender
+forms on validation error or display a success page or similar. Further
+bdajax continuation definitions can be given to ``parent.bdajax.continuation``.
+
+Again, bdajax does not provide any server side implementation, it's up to you
+providing this.
+
+
3rd Party Javascript
--------------------
@@ -500,6 +534,12 @@ Contributors
Changes
=======
+1.4dev
+------
+
+- Add AJAX form support.
+ [rnix, 2012-05-04]
+
1.3
---
diff --git a/setup.py b/setup.py
index 72134bf..3e80b20 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
import sys, os
-version = '1.3'
+version = '1.4dev'
shortdesc = 'Ajax convenience.'
longdesc = open(os.path.join(os.path.dirname(__file__), 'README.rst')).read()
longdesc += open(os.path.join(os.path.dirname(__file__), 'LICENSE.rst')).read()
diff --git a/src/bdajax/bdajax.pt b/src/bdajax/bdajax.pt
index f86f122..f391c49 100644
--- a/src/bdajax/bdajax.pt
+++ b/src/bdajax/bdajax.pt
@@ -18,4 +18,10 @@
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/src/bdajax/resources/bdajax.js b/src/bdajax/resources/bdajax.js
index 0318806..995ec78 100644
--- a/src/bdajax/resources/bdajax.js
+++ b/src/bdajax/resources/bdajax.js
@@ -1,5 +1,5 @@
/*
- * bdajax v1.3
+ * bdajax v1.4
*
* Requires:
* - jQuery 1.6.4
@@ -33,6 +33,9 @@
}
}
});
+ // XXX: probably ajax forms get a separate ``ajax:form`` directive
+ // in markup.
+ bdajax.bind_ajax_form(context);
for (var binder in bdajax.binders) {
bdajax.binders[binder](context);
}
@@ -45,7 +48,7 @@
// That we assume at '/login'.
default_403: '/login',
- // object for 3rd party binders
+ // object for hooking up JS binding functions after ajax calls
binders: {},
// ajax spinner handling
@@ -239,7 +242,11 @@
},
overlay: function(options) {
- var elem = $('#ajax-overlay');
+ var selector = '#ajax-overlay';
+ if (options.selector) {
+ selector = options.selector;
+ }
+ var elem = $(selector);
elem.removeData('overlay');
var url, params;
if (options.target) {
@@ -355,6 +362,25 @@
elem.data('overlay').load();
},
+ // bind ajax form handling to all forms providing ajax css class
+ bind_ajax_form: function(context) {
+ var ajaxform = $('form.ajax', context);
+ ajaxform.append('');
+ ajaxform.attr('target', 'ajaxformresponse');
+ ajaxform.unbind().bind('submit', function(event) {
+ bdajax.spinner.show();
+ });
+ },
+
+ // called by iframe response, renders form (i.e. if validation errors)
+ render_ajax_form: function(payload, selector, mode) {
+ if (!payload) {
+ return;
+ }
+ this.spinner.hide();
+ this.fiddle(payload, selector, mode);
+ },
+
_dispatching_handler: function(event) {
event.preventDefault();
event.stopPropagation();