webmcp
annotate framework/env/ui/autofield.lua @ 2:72860d232f32
Version 1.0.2
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
author | jbe/bsw |
---|---|
date | Thu Dec 10 12:00:00 2009 +0100 (2009-12-10) |
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 |