improved form and wizard plugins
[myslice.git] / plugins / form / __init__.py
index 5081501..734652e 100644 (file)
@@ -7,17 +7,35 @@ class CreateForm (Plugin):
         Plugin.__init__(self, **settings)
         print "SETTINGS", settings
         assert 'page'   in settings, "You should specify page"
-        assert 'object' in settings, "You should specify object"
+        assert 'object' in settings or 'fields' in settings, "You should specify object or field list"
 
-        # Retrieve object fields from metadata
-        metadata = settings['page'].get_metadata()
-        md_o = metadata.details_by_object(settings['object'])
-        self.columns = md_o['column']
+        if 'object' in settings:
+            # Retrieve object fields from metadata
+            metadata = settings['page'].get_metadata()
+            md_o = metadata.details_by_object(settings['object'])
+            self.columns = md_o['column']
+
+        elif 'fields' in settings:
+            self.columns = []
+            for field in settings['fields']:
+                c = {
+                    'name'          : field.get('name', ''),
+                    'field'         : field.get('field', ''),
+                    'type'          : field.get('type', 'input'),
+                    'description'   : field.get('description', ''),
+                    'validate_rx'   : field.get('validate_rx', ''),
+                    'validate_err'  : field.get('validate_err', ''),
+                    'old_value'     : 'POST',
+                }
+                self.columns.append(c)
     
     def requirements (self):
         return { 'js_files'     : ['js/form.js', 'js/jquery.validate.js', ],
                  'css_files'    : ['css/form.css'] 
                  }
+    def export_json_settings(self):
+        # We need initialization, even though we are not associated with a query
+        return True
 
     def template_env (self, request):
         env={}
@@ -28,11 +46,26 @@ class CreateForm (Plugin):
     def template_file (self):
         return "form.html"
 
-    def json_settings_list (self): return ['plugin_uuid']
+    def json_settings_list (self): return ['plugin_uuid', 'columns']
 
     def get_validation_js(self):
         # XXX We need to avoid sending the same query twice !"
         # somehow store something into the dom, to perform an update afterwards
         # XXX This should be moved to a template
         # XXX We also need some storage into the wizard to be displayed later
-        return "alert('validation'); return true;"
+        return """
+            // Useless since this is now a parameter
+            //frm = document.forms['form_%(domid)s'];
+
+            // Loop on the fields and test regexp if present
+            err = false;
+            $.each(options.columns, function(column) {
+                if (!frm.elements[column['field']].match(column['validate_rx'])) {
+                    $('err_%(domid)s_' + column['field']).html(column['validation_err']);
+                    err = true;
+                }
+            });
+            if (!err) {
+                // Issue json query
+            }
+        """ % self.__dict__