| 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 |