webmcp
annotate framework/env/ui/autofield.lua @ 14:a29c8ffb3f82
New function ui.filters{...}
Also changed version information to "1.0.8"
Also changed version information to "1.0.8"
author | jbe/bsw |
---|---|
date | Sat Feb 20 21:00:58 2010 +0100 (2010-02-20) |
parents | 9fdfb27f8e67 |
children |
rev | line source |
---|---|
jbe/bsw@0 | 1 --[[-- |
jbe/bsw@0 | 2 ui.autofield{ |
jbe/bsw@0 | 3 name = name, -- field name (also used by default as HTML name) |
jbe/bsw@0 | 4 html_name = html_name, -- explicit HTML name to be used instead of 'name' |
jbe/bsw@0 | 5 value = nihil.lift(value), -- initial value, nil causes automatic lookup of value, use nihil.lift(nil) for nil |
jbe/bsw@0 | 6 container_attr = container_attr, -- extra HTML attributes for the container (div) enclosing field and label |
jbe/bsw@0 | 7 attr = attr, -- extra HTML attributes for the field |
jbe/bsw@0 | 8 label = label, -- text to be used as label for the input field |
jbe/bsw@0 | 9 label_attr = label_attr, -- extra HTML attributes for the label |
jbe/bsw@0 | 10 readonly = readonly_flag -- set to true, to force read-only mode |
jbe/bsw@0 | 11 record = record, -- record to be used, defaults to record given to ui.form{...} |
jbe/bsw@0 | 12 ... -- extra arguments for applicable ui.field.* helpers |
jbe/bsw@0 | 13 } |
jbe/bsw@0 | 14 |
jbe/bsw@0 | 15 This function automatically selects a ui.field.* helper to be used for a field of a record. |
jbe/bsw@0 | 16 |
jbe/bsw@0 | 17 --]]-- |
jbe/bsw@0 | 18 |
jbe/bsw@0 | 19 function ui.autofield(args) |
jbe/bsw@0 | 20 local args = table.new(args) |
jbe/bsw@0 | 21 assert(args.name, "ui.autofield{...} needs a field 'name'.") |
jbe/bsw@0 | 22 if not args.record then |
jbe/bsw@0 | 23 local slot_state = slot.get_state_table() |
jbe/bsw@0 | 24 if not slot_state then |
jbe/bsw@0 | 25 error("ui.autofield{...} was called without an explicit record to be used, and is also not called inside a form.") |
jbe/bsw@0 | 26 elseif not slot_state.form_record then |
jbe/bsw@0 | 27 error("ui.autofield{...} was called without an explicit record to be used, and the form does not have a record assigned either.") |
jbe/bsw@0 | 28 else |
jbe/bsw@0 | 29 args.record = slot_state.form_record |
jbe/bsw@0 | 30 end |
jbe/bsw@0 | 31 end |
jbe/bsw@0 | 32 local class = args.record._class |
jbe/bsw@0 | 33 assert(class, "Used ui.autofield{...} on a record with no class information stored in the '_class' attribute.") |
jbe/bsw@0 | 34 local fields, field_info, ui_field_type, ui_field_options |
jbe/bsw@0 | 35 fields = class.fields |
jbe/bsw@0 | 36 if fields then |
jbe/bsw@0 | 37 field_info = fields[args.name] |
jbe/bsw@0 | 38 end |
jbe/bsw@0 | 39 if field_info then |
jbe/bsw@0 | 40 ui_field_type = field_info.ui_field_type |
jbe/bsw@0 | 41 ui_field_options = table.new(field_info.ui_field_options) |
jbe/bsw@0 | 42 end |
jbe/bsw@0 | 43 if not ui_field_type then |
jbe/bsw@0 | 44 ui_field_type = "text" |
jbe/bsw@0 | 45 end |
jbe/bsw@0 | 46 if not ui_field_options then |
jbe/bsw@0 | 47 ui_field_options = {} |
jbe/bsw@0 | 48 end |
jbe/bsw@0 | 49 local ui_field_func = ui.field[ui_field_type] |
jbe/bsw@0 | 50 if not ui_field_func then |
jbe/bsw@0 | 51 error(string.format("Did not find ui.field helper of type %q.", ui_field_type)) |
jbe/bsw@0 | 52 end |
jbe/bsw@0 | 53 for key, value in pairs(ui_field_options) do |
jbe/bsw@0 | 54 if args[key] == nil then |
jbe/bsw@0 | 55 args[key] = value |
jbe/bsw@0 | 56 end |
jbe/bsw@0 | 57 end |
jbe/bsw@0 | 58 return ui_field_func(args) |
jbe/bsw@0 | 59 end |