jbe/bsw@0: --[[-- jbe/bsw@0: ui.field.select{ jbe/bsw@0: ... -- generic ui.field.* arguments, as described for ui.autofield{...} poelzi@30: foreign_records = foreign_records, -- list of records to be chosen from, or function returning such a list poelzi@30: foreign_id = foreign_id, -- name of id field in foreign records poelzi@30: foreign_name = foreign_name, -- name of field to be used as name in foreign records poelzi@30: format_options = format_options -- format options for format.string jbe@44: disabled_records = disabled_records -- table of record keys that should be disabled (NOTE: Preliminary. Argument name may change in future releases.) jbe/bsw@0: } jbe/bsw@0: jbe/bsw@0: 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: jbe/bsw@0: --]]-- jbe/bsw@0: jbe@44: -- TODO: Find better name for "disabled_records" jbe@44: jbe/bsw@0: function ui.field.select(args) jbe/bsw@0: ui.form_element(args, {fetch_value = true}, function(args) jbe/bsw@0: local foreign_records = args.foreign_records jbe/bsw@0: if type(foreign_records) == "function" then jbe/bsw@0: foreign_records = foreign_records(args.record) jbe/bsw@0: end jbe/bsw@0: if args.readonly then jbe/bsw@0: local name jbe/bsw@0: for idx, record in ipairs(foreign_records) do jbe/bsw@0: if record[args.foreign_id] == args.value then jbe/bsw@0: name = record[args.foreign_name] jbe/bsw@0: break jbe/bsw@0: end jbe/bsw@0: end jbe/bsw@0: ui.tag{ jbe/bsw@0: tag = args.tag, jbe/bsw@0: attr = args.attr, jbe/bsw@0: content = format.string(name, args.format_options) jbe/bsw@0: } jbe/bsw@0: else jbe/bsw@0: local attr = table.new(args.attr) jbe/bsw@0: attr.name = args.html_name jbe/bsw@0: ui.tag{ jbe/bsw@0: tag = "select", jbe/bsw@0: attr = attr, jbe/bsw@0: content = function() jbe/bsw@0: if args.nil_as then jbe/bsw@0: ui.tag{ jbe/bsw@0: tag = "option", jbe/bsw@0: attr = { value = "" }, jbe/bsw@0: content = format.string( jbe/bsw@0: args.nil_as, jbe/bsw@0: args.format_options jbe/bsw@0: ) jbe/bsw@0: } jbe/bsw@0: end jbe/bsw@0: for idx, record in ipairs(foreign_records) do jbe/bsw@0: local key = record[args.foreign_id] jbe/bsw@0: ui.tag{ jbe/bsw@0: tag = "option", jbe/bsw@0: attr = { jbe/bsw@0: value = key, poelzi@30: disabled = ((args.disabled_records and args.disabled_records[key] and "1" ) or nil), jbe/bsw@0: selected = ((key == args.value) and "selected" or nil) jbe/bsw@0: }, jbe/bsw@0: content = format.string( jbe/bsw@0: record[args.foreign_name], jbe/bsw@0: args.format_options jbe/bsw@0: ) jbe/bsw@0: } jbe/bsw@0: end jbe/bsw@0: end jbe/bsw@0: } jbe/bsw@0: end jbe/bsw@0: end) jbe/bsw@0: end