improved form and wizard plugins
[myslice.git] / plugins / form / __init__.py
1 from unfold.composite import Composite
2 from unfold.plugin    import Plugin
3
4 class CreateForm (Plugin):
5
6     def __init__ (self, **settings):
7         Plugin.__init__(self, **settings)
8         print "SETTINGS", settings
9         assert 'page'   in settings, "You should specify page"
10         assert 'object' in settings or 'fields' in settings, "You should specify object or field list"
11
12         if 'object' in settings:
13             # Retrieve object fields from metadata
14             metadata = settings['page'].get_metadata()
15             md_o = metadata.details_by_object(settings['object'])
16             self.columns = md_o['column']
17
18         elif 'fields' in settings:
19             self.columns = []
20             for field in settings['fields']:
21                 c = {
22                     'name'          : field.get('name', ''),
23                     'field'         : field.get('field', ''),
24                     'type'          : field.get('type', 'input'),
25                     'description'   : field.get('description', ''),
26                     'validate_rx'   : field.get('validate_rx', ''),
27                     'validate_err'  : field.get('validate_err', ''),
28                     'old_value'     : 'POST',
29                 }
30                 self.columns.append(c)
31     
32     def requirements (self):
33         return { 'js_files'     : ['js/form.js', 'js/jquery.validate.js', ],
34                  'css_files'    : ['css/form.css'] 
35                  }
36     def export_json_settings(self):
37         # We need initialization, even though we are not associated with a query
38         return True
39
40     def template_env (self, request):
41         env={}
42         env.update(self.__dict__)
43         #env['columns']=self.columns
44         return env
45
46     def template_file (self):
47         return "form.html"
48
49     def json_settings_list (self): return ['plugin_uuid', 'columns']
50
51     def get_validation_js(self):
52         # XXX We need to avoid sending the same query twice !"
53         # somehow store something into the dom, to perform an update afterwards
54         # XXX This should be moved to a template
55         # XXX We also need some storage into the wizard to be displayed later
56         return """
57             // Useless since this is now a parameter
58             //frm = document.forms['form_%(domid)s'];
59
60             // Loop on the fields and test regexp if present
61             err = false;
62             $.each(options.columns, function(column) {
63                 if (!frm.elements[column['field']].match(column['validate_rx'])) {
64                     $('err_%(domid)s_' + column['field']).html(column['validation_err']);
65                     err = true;
66                 }
67             });
68             if (!err) {
69                 // Issue json query
70             }
71         """ % self.__dict__