| rev | 
   line source | 
| 
jbe/bsw@0
 | 
     1 --[[--
 | 
| 
jbe/bsw@0
 | 
     2 ui.field.select{
 | 
| 
jbe/bsw@0
 | 
     3   ...                                 -- generic ui.field.* arguments, as described for ui.autofield{...}
 | 
| 
poelzi@30
 | 
     4   foreign_records  = foreign_records,  -- list of records to be chosen from, or function returning such a list
 | 
| 
poelzi@30
 | 
     5   foreign_id       = foreign_id,       -- name of id field in foreign records
 | 
| 
poelzi@30
 | 
     6   foreign_name     = foreign_name,     -- name of field to be used as name in foreign records
 | 
| 
poelzi@30
 | 
     7   format_options   = format_options    -- format options for format.string
 | 
| 
jbe@44
 | 
     8   disabled_records = disabled_records  -- table of record keys that should be disabled (NOTE: Preliminary. Argument name may change in future releases.)
 | 
| 
jbe/bsw@0
 | 
     9 }
 | 
| 
jbe/bsw@0
 | 
    10 
 | 
| 
jbe/bsw@0
 | 
    11 This function inserts a select field in the active slot. For description of the generic field helper arguments, see help for ui.autofield{...}.
 | 
| 
jbe/bsw@0
 | 
    12 
 | 
| 
jbe/bsw@0
 | 
    13 --]]--
 | 
| 
jbe/bsw@0
 | 
    14 
 | 
| 
jbe@44
 | 
    15 -- TODO: Find better name for "disabled_records"
 | 
| 
jbe@44
 | 
    16 
 | 
| 
jbe/bsw@0
 | 
    17 function ui.field.select(args)
 | 
| 
jbe/bsw@0
 | 
    18   ui.form_element(args, {fetch_value = true}, function(args)
 | 
| 
jbe/bsw@0
 | 
    19     local foreign_records = args.foreign_records
 | 
| 
jbe/bsw@0
 | 
    20     if type(foreign_records) == "function" then
 | 
| 
jbe/bsw@0
 | 
    21       foreign_records = foreign_records(args.record)
 | 
| 
jbe/bsw@0
 | 
    22     end
 | 
| 
jbe/bsw@0
 | 
    23     if args.readonly then
 | 
| 
jbe/bsw@0
 | 
    24       local name
 | 
| 
jbe/bsw@0
 | 
    25       for idx, record in ipairs(foreign_records) do
 | 
| 
jbe/bsw@0
 | 
    26         if record[args.foreign_id] == args.value then
 | 
| 
jbe/bsw@0
 | 
    27           name = record[args.foreign_name]
 | 
| 
jbe/bsw@0
 | 
    28           break
 | 
| 
jbe/bsw@0
 | 
    29         end
 | 
| 
jbe/bsw@0
 | 
    30       end
 | 
| 
jbe/bsw@0
 | 
    31       ui.tag{
 | 
| 
jbe/bsw@0
 | 
    32         tag     = args.tag,
 | 
| 
jbe/bsw@0
 | 
    33         attr    = args.attr, 
 | 
| 
jbe/bsw@0
 | 
    34         content = format.string(name, args.format_options)
 | 
| 
jbe/bsw@0
 | 
    35       }
 | 
| 
jbe/bsw@0
 | 
    36     else
 | 
| 
jbe/bsw@0
 | 
    37       local attr = table.new(args.attr)
 | 
| 
jbe/bsw@0
 | 
    38       attr.name  = args.html_name
 | 
| 
jbe/bsw@0
 | 
    39       ui.tag{
 | 
| 
jbe/bsw@0
 | 
    40         tag     = "select",
 | 
| 
jbe/bsw@0
 | 
    41         attr    = attr,
 | 
| 
jbe/bsw@0
 | 
    42         content = function()
 | 
| 
jbe/bsw@0
 | 
    43           if args.nil_as then
 | 
| 
jbe/bsw@0
 | 
    44             ui.tag{
 | 
| 
jbe/bsw@0
 | 
    45               tag     = "option",
 | 
| 
jbe/bsw@0
 | 
    46               attr    = { value = "" },
 | 
| 
jbe/bsw@0
 | 
    47               content = format.string(
 | 
| 
jbe/bsw@0
 | 
    48                 args.nil_as,
 | 
| 
jbe/bsw@0
 | 
    49                 args.format_options
 | 
| 
jbe/bsw@0
 | 
    50               )
 | 
| 
jbe/bsw@0
 | 
    51             }
 | 
| 
jbe/bsw@0
 | 
    52           end
 | 
| 
jbe/bsw@0
 | 
    53           for idx, record in ipairs(foreign_records) do
 | 
| 
jbe/bsw@0
 | 
    54             local key = record[args.foreign_id]
 | 
| 
jbe/bsw@0
 | 
    55             ui.tag{
 | 
| 
jbe/bsw@0
 | 
    56               tag     = "option",
 | 
| 
jbe/bsw@0
 | 
    57               attr    = {
 | 
| 
jbe/bsw@0
 | 
    58                 value    = key,
 | 
| 
poelzi@30
 | 
    59                 disabled = ((args.disabled_records and args.disabled_records[key] and "1" ) or nil),
 | 
| 
jbe/bsw@0
 | 
    60                 selected = ((key == args.value) and "selected" or nil)
 | 
| 
jbe/bsw@0
 | 
    61               },
 | 
| 
jbe/bsw@0
 | 
    62               content = format.string(
 | 
| 
jbe/bsw@0
 | 
    63                 record[args.foreign_name],
 | 
| 
jbe/bsw@0
 | 
    64                 args.format_options
 | 
| 
jbe/bsw@0
 | 
    65               )
 | 
| 
jbe/bsw@0
 | 
    66             }
 | 
| 
jbe/bsw@0
 | 
    67           end
 | 
| 
jbe/bsw@0
 | 
    68         end
 | 
| 
jbe/bsw@0
 | 
    69       }
 | 
| 
jbe/bsw@0
 | 
    70     end
 | 
| 
jbe/bsw@0
 | 
    71   end)
 | 
| 
jbe/bsw@0
 | 
    72 end
 |