rev |
line source |
jbe/bsw@0
|
1 --[[--
|
jbe/bsw@0
|
2 ui.field.select{
|
jbe@75
|
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@75
|
8 selected_record = selected_record -- id of (or reference to) record which is selected (optional, overrides "value" argument when not nil)
|
jbe@75
|
9 disabled_records = disabled_records -- table with ids of (or references to) records that should be disabled (stored as table keys mapped to true)
|
jbe/bsw@0
|
10 }
|
jbe/bsw@0
|
11
|
jbe/bsw@0
|
12 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
|
13
|
jbe/bsw@0
|
14 --]]--
|
jbe/bsw@0
|
15
|
jbe/bsw@0
|
16 function ui.field.select(args)
|
jbe/bsw@0
|
17 ui.form_element(args, {fetch_value = true}, function(args)
|
jbe/bsw@0
|
18 local foreign_records = args.foreign_records
|
jbe/bsw@0
|
19 if type(foreign_records) == "function" then
|
jbe/bsw@0
|
20 foreign_records = foreign_records(args.record)
|
jbe/bsw@0
|
21 end
|
jbe/bsw@0
|
22 if args.readonly then
|
jbe/bsw@0
|
23 local name
|
jbe/bsw@0
|
24 for idx, record in ipairs(foreign_records) do
|
jbe/bsw@0
|
25 if record[args.foreign_id] == args.value then
|
jbe/bsw@0
|
26 name = record[args.foreign_name]
|
jbe/bsw@0
|
27 break
|
jbe/bsw@0
|
28 end
|
jbe/bsw@0
|
29 end
|
jbe/bsw@0
|
30 ui.tag{
|
jbe/bsw@0
|
31 tag = args.tag,
|
jbe/bsw@0
|
32 attr = args.attr,
|
jbe/bsw@0
|
33 content = format.string(name, args.format_options)
|
jbe/bsw@0
|
34 }
|
jbe/bsw@0
|
35 else
|
jbe/bsw@0
|
36 local attr = table.new(args.attr)
|
jbe/bsw@0
|
37 attr.name = args.html_name
|
jbe/bsw@0
|
38 ui.tag{
|
jbe/bsw@0
|
39 tag = "select",
|
jbe/bsw@0
|
40 attr = attr,
|
jbe/bsw@0
|
41 content = function()
|
jbe/bsw@0
|
42 if args.nil_as then
|
jbe/bsw@0
|
43 ui.tag{
|
jbe/bsw@0
|
44 tag = "option",
|
jbe/bsw@0
|
45 attr = { value = "" },
|
jbe/bsw@0
|
46 content = format.string(
|
jbe/bsw@0
|
47 args.nil_as,
|
jbe/bsw@0
|
48 args.format_options
|
jbe/bsw@0
|
49 )
|
jbe/bsw@0
|
50 }
|
jbe/bsw@0
|
51 end
|
jbe@75
|
52 local one_selected = false
|
jbe/bsw@0
|
53 for idx, record in ipairs(foreign_records) do
|
jbe/bsw@0
|
54 local key = record[args.foreign_id]
|
jbe@75
|
55 local selected = false
|
jbe@75
|
56 if not one_selected then
|
jbe@75
|
57 if args.selected_record == nil then
|
jbe@75
|
58 if args.value == key then
|
jbe@75
|
59 selected = true
|
jbe@75
|
60 end
|
jbe@75
|
61 else
|
jbe@75
|
62 if args.selected_record == record or args.selected_record == key then
|
jbe@75
|
63 selected = true
|
jbe@75
|
64 end
|
jbe@75
|
65 end
|
jbe@75
|
66 one_selected = selected
|
jbe@75
|
67 end
|
jbe@75
|
68 local disabled = false
|
jbe@75
|
69 if args.disabled_records then
|
jbe@75
|
70 if args.disabled_records[record] or args.disabled_records[key] then
|
jbe@75
|
71 disabled = true
|
jbe@75
|
72 end
|
jbe@75
|
73 end
|
jbe/bsw@0
|
74 ui.tag{
|
jbe/bsw@0
|
75 tag = "option",
|
jbe/bsw@0
|
76 attr = {
|
jbe/bsw@0
|
77 value = key,
|
jbe@75
|
78 disabled = disabled and "disabled" or nil,
|
jbe@75
|
79 selected = selected and "selected" or nil
|
jbe/bsw@0
|
80 },
|
jbe/bsw@0
|
81 content = format.string(
|
jbe/bsw@0
|
82 record[args.foreign_name],
|
jbe/bsw@0
|
83 args.format_options
|
jbe/bsw@0
|
84 )
|
jbe/bsw@0
|
85 }
|
jbe/bsw@0
|
86 end
|
jbe/bsw@0
|
87 end
|
jbe/bsw@0
|
88 }
|
jbe/bsw@0
|
89 end
|
jbe/bsw@0
|
90 end)
|
jbe/bsw@0
|
91 end
|