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