webmcp
annotate framework/env/ui_deprecated/form.lua @ 110:0c4841af07a5
String truncating by counting Unicode codepoints in format.string(...)
(grapheme cluster boundary detection not implemented)
(grapheme cluster boundary detection not implemented)
author | jbe |
---|---|
date | Sun Jan 12 03:57:47 2014 +0100 (2014-01-12) |
parents | 9fdfb27f8e67 |
children |
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 |