| rev | line source | 
| jbe/bsw@0 | 1 -- | 
| jbe/bsw@0 | 2 -- Creates a formular | 
| jbe/bsw@0 | 3 -- | 
| jbe/bsw@0 | 4 -- record          (record)   Take field values from this object (optional) | 
| jbe/bsw@0 | 5 -- class           (string)   Style class (optional) | 
| jbe/bsw@0 | 6 -- method          (string)   Submit method ['post', 'get'] (optional) | 
| jbe/bsw@0 | 7 -- module          (string)   The module to submit to | 
| jbe/bsw@0 | 8 -- action          (string)   The action to submit to | 
| jbe/bsw@0 | 9 -- params          (table)    The GET parameter to be send with | 
| jbe/bsw@0 | 10 -- content         (function) Function for the content of the form | 
| jbe/bsw@0 | 11 -- | 
| jbe/bsw@0 | 12 -- Example: | 
| jbe/bsw@0 | 13 -- | 
| jbe/bsw@0 | 14 --  ui_deprecated.form({ | 
| jbe/bsw@0 | 15 --    object = client, | 
| jbe/bsw@0 | 16 --    class  = 'form_class', | 
| jbe/bsw@0 | 17 --    method = 'post', | 
| jbe/bsw@0 | 18 --    module = 'client', | 
| jbe/bsw@0 | 19 --    action = 'update', | 
| jbe/bsw@0 | 20 --    params = { | 
| jbe/bsw@0 | 21 --      id = client.id | 
| jbe/bsw@0 | 22 --    }, | 
| jbe/bsw@0 | 23 --    redirect_to = { | 
| jbe/bsw@0 | 24 --      ok = { | 
| jbe/bsw@0 | 25 --        module = 'client', | 
| jbe/bsw@0 | 26 --        view = 'list' | 
| jbe/bsw@0 | 27 --        }, | 
| jbe/bsw@0 | 28 --      error = { | 
| jbe/bsw@0 | 29 --        module = 'client', | 
| jbe/bsw@0 | 30 --        view = 'edit', | 
| jbe/bsw@0 | 31 --        params = { | 
| jbe/bsw@0 | 32 --          id = client.id | 
| jbe/bsw@0 | 33 --        } | 
| jbe/bsw@0 | 34 --      } | 
| jbe/bsw@0 | 35 --    }, | 
| jbe/bsw@0 | 36 --  }) | 
| jbe/bsw@0 | 37 | 
| jbe/bsw@0 | 38 function ui_deprecated.form(args) | 
| jbe/bsw@0 | 39   local slot_state = slot.get_state_table() | 
| jbe/bsw@0 | 40   if slot_state.form_opened then | 
| jbe/bsw@0 | 41     error("Cannot open a form inside a form.") | 
| jbe/bsw@0 | 42   end | 
| jbe/bsw@0 | 43   slot_state.form_opened = true | 
| jbe/bsw@0 | 44   local old_record = slot_state.form_record | 
| jbe/bsw@0 | 45   slot_state.form_record = args.record or {}  -- TODO: decide what really should happen when no record is specified | 
| jbe/bsw@0 | 46 | 
| jbe/bsw@0 | 47   local params = {} | 
| jbe/bsw@0 | 48   if args.params then | 
| jbe/bsw@0 | 49     for key, value in pairs(args.params) do | 
| jbe/bsw@0 | 50       params[key] = value | 
| jbe/bsw@0 | 51     end | 
| jbe/bsw@0 | 52   end | 
| jbe/bsw@0 | 53   ui_deprecated._prepare_redirect_params(params, args.redirect_to) | 
| jbe/bsw@0 | 54 | 
| jbe/bsw@0 | 55   local attr_action = args.url or encode.url{ | 
| jbe/bsw@0 | 56     module = args.module, | 
| jbe/bsw@0 | 57     view   = args.view, | 
| jbe/bsw@0 | 58     action = args.action, | 
| jbe/bsw@0 | 59     id     = args.id, | 
| jbe/bsw@0 | 60     params = params | 
| jbe/bsw@0 | 61   } | 
| jbe/bsw@0 | 62 | 
| jbe/bsw@0 | 63   local base = request.get_relative_baseurl() | 
| jbe/bsw@0 | 64   local attr_class = table.concat({ 'ui_form', args.class }, ' ') | 
| jbe/bsw@0 | 65   local attr_method = args.method or 'POST'  -- TODO: uppercase/sanatize method | 
| jbe/bsw@0 | 66 | 
| jbe/bsw@0 | 67   slot.put( | 
| jbe/bsw@0 | 68     '<form', | 
| jbe/bsw@0 | 69     ' action="', attr_action, '"', | 
| jbe/bsw@0 | 70     ' class="',  attr_class,  '"', | 
| jbe/bsw@0 | 71     ' method="', attr_method, '"', | 
| jbe/bsw@0 | 72     '>\n' | 
| jbe/bsw@0 | 73   ) | 
| jbe/bsw@0 | 74 | 
| jbe/bsw@0 | 75   if type(args.content) == 'function' then | 
| jbe/bsw@0 | 76     args.content() | 
| jbe/bsw@0 | 77   else | 
| jbe/bsw@0 | 78     error('No content function') | 
| jbe/bsw@0 | 79   end | 
| jbe/bsw@0 | 80 | 
| jbe/bsw@0 | 81   slot.put('</form>') | 
| jbe/bsw@0 | 82   slot_state.form_record = old_record | 
| jbe/bsw@0 | 83   slot_state.form_opened = false | 
| jbe/bsw@0 | 84 | 
| jbe/bsw@0 | 85 end |