| 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{...} | 
| jbe/bsw@0 | 4   foreign_records = foreign_records,  -- list of records to be chosen from, or function returning such a list | 
| jbe/bsw@0 | 5   foreign_id      = foreign_id,       -- name of id field in foreign records | 
| jbe/bsw@0 | 6   foreign_name    = foreign_name,     -- name of field to be used as name in foreign records | 
| jbe/bsw@0 | 7   format_options  = format_options    -- format options for format.string | 
| jbe/bsw@0 | 8 } | 
| jbe/bsw@0 | 9 | 
| jbe/bsw@0 | 10 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 | 11 | 
| jbe/bsw@0 | 12 --]]-- | 
| jbe/bsw@0 | 13 | 
| jbe/bsw@0 | 14 function ui.field.select(args) | 
| jbe/bsw@0 | 15   ui.form_element(args, {fetch_value = true}, function(args) | 
| jbe/bsw@0 | 16     local foreign_records = args.foreign_records | 
| jbe/bsw@0 | 17     if type(foreign_records) == "function" then | 
| jbe/bsw@0 | 18       foreign_records = foreign_records(args.record) | 
| jbe/bsw@0 | 19     end | 
| jbe/bsw@0 | 20     if args.readonly then | 
| jbe/bsw@0 | 21       local name | 
| jbe/bsw@0 | 22       for idx, record in ipairs(foreign_records) do | 
| jbe/bsw@0 | 23         if record[args.foreign_id] == args.value then | 
| jbe/bsw@0 | 24           name = record[args.foreign_name] | 
| jbe/bsw@0 | 25           break | 
| jbe/bsw@0 | 26         end | 
| jbe/bsw@0 | 27       end | 
| jbe/bsw@0 | 28       ui.tag{ | 
| jbe/bsw@0 | 29         tag     = args.tag, | 
| jbe/bsw@0 | 30         attr    = args.attr, | 
| jbe/bsw@0 | 31         content = format.string(name, args.format_options) | 
| jbe/bsw@0 | 32       } | 
| jbe/bsw@0 | 33     else | 
| jbe/bsw@0 | 34       local attr = table.new(args.attr) | 
| jbe/bsw@0 | 35       attr.name  = args.html_name | 
| jbe/bsw@0 | 36       ui.tag{ | 
| jbe/bsw@0 | 37         tag     = "select", | 
| jbe/bsw@0 | 38         attr    = attr, | 
| jbe/bsw@0 | 39         content = function() | 
| jbe/bsw@0 | 40           if args.nil_as then | 
| jbe/bsw@0 | 41             ui.tag{ | 
| jbe/bsw@0 | 42               tag     = "option", | 
| jbe/bsw@0 | 43               attr    = { value = "" }, | 
| jbe/bsw@0 | 44               content = format.string( | 
| jbe/bsw@0 | 45                 args.nil_as, | 
| jbe/bsw@0 | 46                 args.format_options | 
| jbe/bsw@0 | 47               ) | 
| jbe/bsw@0 | 48             } | 
| jbe/bsw@0 | 49           end | 
| jbe/bsw@0 | 50           for idx, record in ipairs(foreign_records) do | 
| jbe/bsw@0 | 51             local key = record[args.foreign_id] | 
| jbe/bsw@0 | 52             ui.tag{ | 
| jbe/bsw@0 | 53               tag     = "option", | 
| jbe/bsw@0 | 54               attr    = { | 
| jbe/bsw@0 | 55                 value    = key, | 
| jbe/bsw@0 | 56                 selected = ((key == args.value) and "selected" or nil) | 
| jbe/bsw@0 | 57               }, | 
| jbe/bsw@0 | 58               content = format.string( | 
| jbe/bsw@0 | 59                 record[args.foreign_name], | 
| jbe/bsw@0 | 60                 args.format_options | 
| jbe/bsw@0 | 61               ) | 
| jbe/bsw@0 | 62             } | 
| jbe/bsw@0 | 63           end | 
| jbe/bsw@0 | 64         end | 
| jbe/bsw@0 | 65       } | 
| jbe/bsw@0 | 66     end | 
| jbe/bsw@0 | 67   end) | 
| jbe/bsw@0 | 68 end |