| 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
 | 
| 
poelzi@30
 | 
     8   disabled_records = disabled_list     -- table of record keys that should be disabled
 | 
| 
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/bsw@0
 | 
    15 function ui.field.select(args)
 | 
| 
jbe/bsw@0
 | 
    16   ui.form_element(args, {fetch_value = true}, function(args)
 | 
| 
jbe/bsw@0
 | 
    17     local foreign_records = args.foreign_records
 | 
| 
jbe/bsw@0
 | 
    18     if type(foreign_records) == "function" then
 | 
| 
jbe/bsw@0
 | 
    19       foreign_records = foreign_records(args.record)
 | 
| 
jbe/bsw@0
 | 
    20     end
 | 
| 
jbe/bsw@0
 | 
    21     if args.readonly then
 | 
| 
jbe/bsw@0
 | 
    22       local name
 | 
| 
jbe/bsw@0
 | 
    23       for idx, record in ipairs(foreign_records) do
 | 
| 
jbe/bsw@0
 | 
    24         if record[args.foreign_id] == args.value then
 | 
| 
jbe/bsw@0
 | 
    25           name = record[args.foreign_name]
 | 
| 
jbe/bsw@0
 | 
    26           break
 | 
| 
jbe/bsw@0
 | 
    27         end
 | 
| 
jbe/bsw@0
 | 
    28       end
 | 
| 
jbe/bsw@0
 | 
    29       ui.tag{
 | 
| 
jbe/bsw@0
 | 
    30         tag     = args.tag,
 | 
| 
jbe/bsw@0
 | 
    31         attr    = args.attr, 
 | 
| 
jbe/bsw@0
 | 
    32         content = format.string(name, args.format_options)
 | 
| 
jbe/bsw@0
 | 
    33       }
 | 
| 
jbe/bsw@0
 | 
    34     else
 | 
| 
jbe/bsw@0
 | 
    35       local attr = table.new(args.attr)
 | 
| 
jbe/bsw@0
 | 
    36       attr.name  = args.html_name
 | 
| 
jbe/bsw@0
 | 
    37       ui.tag{
 | 
| 
jbe/bsw@0
 | 
    38         tag     = "select",
 | 
| 
jbe/bsw@0
 | 
    39         attr    = attr,
 | 
| 
jbe/bsw@0
 | 
    40         content = function()
 | 
| 
jbe/bsw@0
 | 
    41           if args.nil_as then
 | 
| 
jbe/bsw@0
 | 
    42             ui.tag{
 | 
| 
jbe/bsw@0
 | 
    43               tag     = "option",
 | 
| 
jbe/bsw@0
 | 
    44               attr    = { value = "" },
 | 
| 
jbe/bsw@0
 | 
    45               content = format.string(
 | 
| 
jbe/bsw@0
 | 
    46                 args.nil_as,
 | 
| 
jbe/bsw@0
 | 
    47                 args.format_options
 | 
| 
jbe/bsw@0
 | 
    48               )
 | 
| 
jbe/bsw@0
 | 
    49             }
 | 
| 
jbe/bsw@0
 | 
    50           end
 | 
| 
jbe/bsw@0
 | 
    51           for idx, record in ipairs(foreign_records) do
 | 
| 
jbe/bsw@0
 | 
    52             local key = record[args.foreign_id]
 | 
| 
jbe/bsw@0
 | 
    53             ui.tag{
 | 
| 
jbe/bsw@0
 | 
    54               tag     = "option",
 | 
| 
jbe/bsw@0
 | 
    55               attr    = {
 | 
| 
jbe/bsw@0
 | 
    56                 value    = key,
 | 
| 
poelzi@30
 | 
    57                 disabled = ((args.disabled_records and args.disabled_records[key] and "1" ) or nil),
 | 
| 
jbe/bsw@0
 | 
    58                 selected = ((key == args.value) and "selected" or nil)
 | 
| 
jbe/bsw@0
 | 
    59               },
 | 
| 
jbe/bsw@0
 | 
    60               content = format.string(
 | 
| 
jbe/bsw@0
 | 
    61                 record[args.foreign_name],
 | 
| 
jbe/bsw@0
 | 
    62                 args.format_options
 | 
| 
jbe/bsw@0
 | 
    63               )
 | 
| 
jbe/bsw@0
 | 
    64             }
 | 
| 
jbe/bsw@0
 | 
    65           end
 | 
| 
jbe/bsw@0
 | 
    66         end
 | 
| 
jbe/bsw@0
 | 
    67       }
 | 
| 
jbe/bsw@0
 | 
    68     end
 | 
| 
jbe/bsw@0
 | 
    69   end)
 | 
| 
jbe/bsw@0
 | 
    70 end
 |