rev |
line source |
jbe/bsw@0
|
1 --[[--
|
jbe/bsw@0
|
2 ui.form_element(
|
jbe/bsw@0
|
3 args, -- external arguments
|
jbe/bsw@0
|
4 { -- options for this function call
|
jbe/bsw@0
|
5 fetch_value = fetch_value_flag, -- true causes automatic determination of args.value, if nil
|
jbe/bsw@0
|
6 fetch_record = fetch_record_flag, -- true causes automatic determination of args.record, if nil
|
jbe/bsw@0
|
7 disable_label_for_id = disable_label_for_id_flag, -- true suppresses automatic setting of args.attr.id for a HTML label_for reference
|
jbe/bsw@0
|
8 },
|
jbe/bsw@0
|
9 function(args)
|
jbe/bsw@0
|
10 ... -- program code
|
jbe/bsw@0
|
11 end
|
jbe/bsw@0
|
12 )
|
jbe/bsw@0
|
13
|
jbe/bsw@0
|
14 This function helps other form helpers by preprocessing arguments passed to the helper, e.g. fetching a value from a record stored in a state-table of the currently active slot.
|
jbe/bsw@0
|
15
|
jbe/bsw@0
|
16 --]]--
|
jbe/bsw@0
|
17
|
jbe/bsw@0
|
18 -- TODO: better documentation
|
jbe/bsw@0
|
19
|
jbe/bsw@0
|
20 function ui.form_element(args, extra_args, func)
|
jbe/bsw@0
|
21 local args = table.new(args)
|
jbe/bsw@0
|
22 if extra_args then
|
jbe/bsw@0
|
23 for key, value in pairs(extra_args) do
|
jbe/bsw@0
|
24 args[key] = value
|
jbe/bsw@0
|
25 end
|
jbe/bsw@0
|
26 end
|
jbe/bsw@0
|
27 local slot_state = slot.get_state_table()
|
jbe/bsw@0
|
28 args.html_name = args.html_name or args.name
|
jbe/bsw@0
|
29 if args.fetch_value then
|
jbe/bsw@0
|
30 if args.value == nil then
|
jbe/bsw@0
|
31 if not args.record and slot_state then
|
jbe/bsw@0
|
32 args.record = slot_state.form_record
|
jbe/bsw@0
|
33 end
|
jbe/bsw@0
|
34 if args.record then
|
jbe/bsw@0
|
35 args.value = args.record[args.name]
|
jbe/bsw@0
|
36 end
|
jbe/bsw@0
|
37 else
|
jbe/bsw@0
|
38 args.value = nihil.lower(args.value)
|
jbe/bsw@0
|
39 end
|
jbe/bsw@0
|
40 elseif args.fetch_record then
|
jbe/bsw@0
|
41 if not args.record and slot_state then
|
jbe/bsw@0
|
42 args.record = slot_state.form_record
|
jbe/bsw@0
|
43 end
|
jbe/bsw@0
|
44 end
|
jbe/bsw@0
|
45 if
|
jbe/bsw@0
|
46 args.html_name and
|
jbe/bsw@0
|
47 not args.readonly and
|
jbe/bsw@0
|
48 slot_state.form_readonly == false
|
jbe/bsw@0
|
49 then
|
jbe/bsw@0
|
50 args.readonly = false
|
jbe/bsw@0
|
51 local prefix
|
jbe/bsw@0
|
52 if args.html_name_prefix == nil then
|
jbe/bsw@0
|
53 prefix = slot_state.html_name_prefix
|
jbe/bsw@0
|
54 else
|
jbe/bsw@0
|
55 prefix = args.html_name_prefix
|
jbe/bsw@0
|
56 end
|
jbe/bsw@0
|
57 if prefix then
|
jbe/bsw@0
|
58 args.html_name = prefix .. args.html_name
|
jbe/bsw@0
|
59 end
|
jbe/bsw@0
|
60 else
|
jbe/bsw@0
|
61 args.readonly = true
|
jbe/bsw@0
|
62 end
|
jbe/bsw@0
|
63 if args.label then
|
jbe/bsw@0
|
64 if not args.disable_label_for_id then
|
jbe/bsw@0
|
65 if not args.attr then
|
jbe/bsw@0
|
66 args.attr = { id = ui.create_unique_id() }
|
jbe/bsw@0
|
67 elseif not args.attr.id then
|
jbe/bsw@0
|
68 args.attr.id = ui.create_unique_id()
|
jbe/bsw@0
|
69 end
|
jbe/bsw@0
|
70 end
|
jbe/bsw@0
|
71 if not args.label_attr then
|
jbe/bsw@0
|
72 args.label_attr = { class = "ui_field_label" }
|
jbe/bsw@0
|
73 elseif not args.label_attr.class then
|
jbe/bsw@0
|
74 args.label_attr.class = "ui_field_label"
|
jbe/bsw@0
|
75 end
|
jbe/bsw@0
|
76 end
|
jbe/bsw@0
|
77 ui.container{
|
jbe/bsw@0
|
78 auto_args = args,
|
jbe/bsw@0
|
79 content = function() return func(args) end
|
jbe/bsw@0
|
80 }
|
jbe/bsw@0
|
81 end
|