rev |
line source |
jbe/bsw@0
|
1 --[[--
|
jbe/bsw@0
|
2 ui.field.boolean{
|
jbe/bsw@0
|
3 ... -- generic ui.field.* arguments, as described for ui.autofield{...}
|
jbe/bsw@0
|
4 style = style, -- "radio" or "checkbox",
|
jbe/bsw@0
|
5 nil_allowed = nil_allowed -- set to true, if nil is allowed as third value
|
jbe/bsw@0
|
6 }
|
jbe/bsw@0
|
7
|
jbe/bsw@0
|
8 This function inserts a field for boolean values in the active slot. For description of the generic field helper arguments, see help for ui.autofield{...}.
|
jbe/bsw@0
|
9
|
jbe/bsw@0
|
10 --]]--
|
jbe/bsw@0
|
11
|
jbe/bsw@0
|
12 function ui.field.boolean(args)
|
jbe/bsw@0
|
13 local style = args.style
|
jbe/bsw@0
|
14 if not style then
|
jbe/bsw@0
|
15 if args.nil_allowed then
|
jbe/bsw@0
|
16 style = "radio"
|
jbe/bsw@0
|
17 else
|
jbe/bsw@0
|
18 style = "checkbox"
|
jbe/bsw@0
|
19 end
|
jbe/bsw@0
|
20 end
|
jbe/bsw@0
|
21 local extra_args = { fetch_value = true }
|
jbe/bsw@0
|
22 if not args.readonly and args.style == "radio" then
|
jbe/bsw@0
|
23 extra_args.disable_label_for_id = true
|
jbe/bsw@0
|
24 end
|
jbe/bsw@0
|
25 ui.form_element(args, extra_args, function(args)
|
jbe/bsw@0
|
26 local value = args.value
|
jbe/bsw@0
|
27 if value ~= true and value ~= false and value ~= nil then
|
jbe/bsw@0
|
28 error("Boolean value must be true, false or nil.")
|
jbe/bsw@0
|
29 end
|
jbe/bsw@0
|
30 if value == nil then
|
jbe/bsw@0
|
31 if args.nil_allowed then
|
jbe/bsw@0
|
32 value = args.default
|
jbe/bsw@0
|
33 else
|
jbe/bsw@0
|
34 value = args.default or false
|
jbe/bsw@0
|
35 end
|
jbe/bsw@0
|
36 end
|
jbe/bsw@0
|
37 if args.readonly then
|
jbe/bsw@0
|
38 ui.tag{
|
jbe/bsw@0
|
39 tag = args.tag,
|
jbe/bsw@0
|
40 attr = args.attr,
|
jbe/bsw@0
|
41 content = format.boolean(value, args.format_options)
|
jbe/bsw@0
|
42 }
|
jbe/bsw@0
|
43 elseif style == "radio" then
|
jbe/bsw@0
|
44 local attr = table.new(args.attr)
|
jbe/bsw@0
|
45 attr.type = "radio"
|
jbe/bsw@0
|
46 attr.name = args.html_name
|
jbe/bsw@0
|
47 attr.id = ui.create_unique_id()
|
jbe/bsw@0
|
48 attr.value = "1"
|
jbe/bsw@0
|
49 if value == true then
|
jbe/bsw@0
|
50 attr.checked = "checked"
|
jbe/bsw@0
|
51 else
|
jbe/bsw@0
|
52 attr.checked = nil
|
jbe/bsw@0
|
53 end
|
jbe/bsw@0
|
54 ui.container{
|
jbe/bsw@0
|
55 attr = { class = "ui_radio_div" },
|
jbe/bsw@0
|
56 label = args.true_as or "Yes", -- TODO: localize
|
jbe/bsw@0
|
57 label_for = attr.id,
|
jbe/bsw@0
|
58 label_attr = { class = "ui_radio_label" },
|
jbe/bsw@0
|
59 content_first = true,
|
jbe/bsw@0
|
60 content = function()
|
jbe/bsw@0
|
61 ui.tag{ tag = "input", attr = attr }
|
jbe/bsw@0
|
62 end
|
jbe/bsw@0
|
63 }
|
jbe/bsw@0
|
64 attr.id = ui.create_unique_id()
|
jbe/bsw@0
|
65 attr.value = "0"
|
jbe/bsw@0
|
66 if value == false then
|
jbe/bsw@0
|
67 attr.checked = "1"
|
jbe/bsw@0
|
68 else
|
jbe/bsw@0
|
69 attr.checked = nil
|
jbe/bsw@0
|
70 end
|
jbe/bsw@0
|
71 ui.container{
|
jbe/bsw@0
|
72 attr = { class = "ui_radio_div" },
|
jbe/bsw@0
|
73 label = args.false_as or "No", -- TODO: localize
|
jbe/bsw@0
|
74 label_for = attr.id,
|
jbe/bsw@0
|
75 label_attr = { class = "ui_radio_label" },
|
jbe/bsw@0
|
76 content_first = true,
|
jbe/bsw@0
|
77 content = function()
|
jbe/bsw@0
|
78 ui.tag{ tag = "input", attr = attr }
|
jbe/bsw@0
|
79 end
|
jbe/bsw@0
|
80 }
|
jbe/bsw@0
|
81 if args.nil_allowed then
|
jbe/bsw@0
|
82 attr.id = ui.create_unique_id()
|
jbe/bsw@0
|
83 attr.value = ""
|
jbe/bsw@0
|
84 if value == nil then
|
jbe/bsw@0
|
85 attr.checked = "1"
|
jbe/bsw@0
|
86 else
|
jbe/bsw@0
|
87 attr.checked = nil
|
jbe/bsw@0
|
88 end
|
jbe/bsw@0
|
89 ui.container{
|
jbe/bsw@0
|
90 attr = { class = "ui_radio_div" },
|
jbe/bsw@0
|
91 label = args.nil_as or "N/A", -- TODO: localize
|
jbe/bsw@0
|
92 label_for = attr.id,
|
jbe/bsw@0
|
93 label_attr = { class = "ui_radio_label" },
|
jbe/bsw@0
|
94 content_first = true,
|
jbe/bsw@0
|
95 content = function()
|
jbe/bsw@0
|
96 ui.tag{ tag = "input", attr = attr }
|
jbe/bsw@0
|
97 end
|
jbe/bsw@0
|
98 }
|
jbe/bsw@0
|
99 end
|
jbe/bsw@0
|
100 ui.hidden_field{
|
jbe/bsw@0
|
101 name = args.html_name .. "__format", value = "boolean"
|
jbe/bsw@0
|
102 }
|
jbe/bsw@0
|
103 elseif style == "checkbox" then
|
jbe/bsw@0
|
104 if args.nil_allowed then
|
jbe/bsw@0
|
105 error("Checkboxes do not support nil values.")
|
jbe/bsw@0
|
106 end
|
jbe/bsw@0
|
107 local attr = table.new(args.attr)
|
jbe/bsw@0
|
108 attr.type = "checkbox"
|
jbe/bsw@0
|
109 attr.name = args.html_name
|
jbe/bsw@0
|
110 attr.value = "1"
|
jbe/bsw@0
|
111 if value then
|
jbe/bsw@0
|
112 attr.checked = "checked"
|
jbe/bsw@0
|
113 else
|
jbe/bsw@0
|
114 attr.checked = nil
|
jbe/bsw@0
|
115 end
|
jbe/bsw@0
|
116 ui.tag{ tag = "input", attr = attr }
|
jbe/bsw@0
|
117 ui.hidden_field{
|
jbe/bsw@0
|
118 name = args.html_name .. "__format",
|
jbe/bsw@0
|
119 value = encode.format_info(
|
jbe/bsw@0
|
120 "boolean",
|
jbe/bsw@0
|
121 { true_as = "1", false_as = "" }
|
jbe/bsw@0
|
122 )
|
jbe/bsw@0
|
123 }
|
jbe/bsw@0
|
124 else
|
jbe/bsw@0
|
125 error("'style' attribute for ui.field.boolean{...} must be set to \"radio\", \"checkbox\" or nil.")
|
jbe/bsw@0
|
126 end
|
jbe/bsw@0
|
127 end)
|
jbe/bsw@0
|
128 end
|