rev |
line source |
jbe/bsw@0
|
1 --[[--
|
jbe/bsw@0
|
2 ui.container{
|
jbe/bsw@0
|
3 auto_args = auto_args,
|
jbe/bsw@0
|
4 attr = attr, -- HTML attributes for the surrounding div or fieldset
|
jbe/bsw@0
|
5 label = label, -- text to be used as label
|
jbe/bsw@0
|
6 label_for = label_for, -- DOM id of element to which the label should refer
|
jbe/bsw@0
|
7 label_attr = label_attr, -- extra HTML attributes for a label tag
|
jbe/bsw@0
|
8 legend = legend, -- text to be used as legend
|
jbe/bsw@0
|
9 legend_attr = legend_attr, -- HTML attributes for a legend tag
|
jbe/bsw@0
|
10 content_first = content_first, -- set to true to place label or legend after the content
|
jbe/bsw@0
|
11 content = function()
|
jbe/bsw@14
|
12 ...
|
jbe/bsw@0
|
13 end
|
jbe/bsw@0
|
14 }
|
jbe/bsw@0
|
15
|
jbe/bsw@0
|
16 This function encloses content in a div element (or a fieldset element, if 'legend' is given). An additional 'label' or 'legend' can be placed before the content or after the content. The argument 'auto_args' is set by other ui helper functions when calling ui.container automatically.
|
jbe/bsw@0
|
17
|
jbe/bsw@0
|
18 --]]--
|
jbe/bsw@0
|
19
|
jbe/bsw@0
|
20 function ui.container(args)
|
bsw@475
|
21 local attr, label, label_attr, legend, legend_attr, value_container_attr, content
|
jbe/bsw@0
|
22 local auto_args = args.auto_args
|
jbe/bsw@0
|
23 if auto_args then
|
jbe/bsw@0
|
24 attr = auto_args.container_attr
|
jbe/bsw@0
|
25 label = auto_args.label
|
jbe/bsw@0
|
26 label_attr = auto_args.label_attr
|
jbe/bsw@0
|
27 legend = auto_args.legend
|
jbe/bsw@0
|
28 legend_attr = auto_args.legend_attr
|
bsw@475
|
29 value_container_attr = auto_args.value_container_attr
|
jbe/bsw@0
|
30 if label and auto_args.attr and auto_args.attr.id then
|
jbe/bsw@0
|
31 label_attr = table.new(label_attr)
|
jbe/bsw@0
|
32 label_attr["for"] = auto_args.attr.id
|
jbe/bsw@0
|
33 end
|
jbe/bsw@0
|
34 else
|
jbe/bsw@0
|
35 attr = args.attr
|
jbe/bsw@0
|
36 label = args.label
|
jbe/bsw@0
|
37 label_attr = args.label_attr or {}
|
jbe/bsw@0
|
38 legend = args.legend
|
jbe/bsw@0
|
39 legend_attr = args.legend_attr
|
jbe/bsw@0
|
40 content = content
|
jbe/bsw@0
|
41 if args.label_for then
|
jbe/bsw@0
|
42 label_attr["for"] = args.label_for
|
jbe/bsw@0
|
43 end
|
jbe/bsw@0
|
44 end
|
jbe/bsw@0
|
45 local content = args.content
|
jbe/bsw@0
|
46 if label and not legend then
|
jbe/bsw@0
|
47 return ui.tag {
|
jbe/bsw@0
|
48 tag = "div",
|
jbe/bsw@0
|
49 attr = attr,
|
jbe/bsw@0
|
50 content = function()
|
jbe/bsw@0
|
51 if not args.content_first then
|
jbe/bsw@0
|
52 ui.tag{ tag = "label", attr = label_attr, content = label }
|
jbe/bsw@0
|
53 slot.put(" ")
|
jbe/bsw@0
|
54 end
|
jbe/bsw@0
|
55 if type(content) == "function" then
|
bsw@475
|
56 if value_container_attr then
|
bsw@475
|
57 ui.container{
|
bsw@475
|
58 attr = value_container_attr,
|
bsw@475
|
59 content = content
|
bsw@475
|
60 }
|
bsw@475
|
61 else
|
bsw@475
|
62 content()
|
bsw@475
|
63 end
|
jbe/bsw@0
|
64 elseif content then
|
jbe/bsw@0
|
65 slot.put(encode.html(content))
|
jbe/bsw@0
|
66 end
|
jbe/bsw@0
|
67 if args.content_first then
|
jbe/bsw@0
|
68 slot.put(" ")
|
jbe/bsw@0
|
69 ui.tag{ tag = "label", attr = label_attr, content = label }
|
jbe/bsw@0
|
70 end
|
jbe/bsw@0
|
71 end
|
jbe/bsw@0
|
72 }
|
jbe/bsw@0
|
73 elseif legend and not label then
|
jbe/bsw@0
|
74 return ui.tag {
|
jbe/bsw@0
|
75 tag = "fieldset",
|
jbe/bsw@0
|
76 attr = attr,
|
jbe/bsw@0
|
77 content = function()
|
jbe/bsw@0
|
78 if not args.content_first then
|
jbe/bsw@0
|
79 ui.tag{ tag = "legend", attr = legend_attr, content = legend }
|
jbe/bsw@0
|
80 slot.put(" ")
|
jbe/bsw@0
|
81 end
|
jbe/bsw@0
|
82 if type(content) == "function" then
|
jbe/bsw@0
|
83 content()
|
jbe/bsw@0
|
84 elseif content then
|
jbe/bsw@0
|
85 slot.put(encode.html(content))
|
jbe/bsw@0
|
86 end
|
jbe/bsw@0
|
87 if args.content_first then
|
jbe/bsw@0
|
88 slot.put(" ")
|
jbe/bsw@0
|
89 ui.tag{ tag = "legend", attr = legend_attr, content = legend }
|
jbe/bsw@0
|
90 end
|
jbe/bsw@0
|
91 end
|
jbe/bsw@0
|
92 }
|
bsw@475
|
93 elseif legend and label then
|
jbe/bsw@0
|
94 error("ui.container{...} may either get a label or a legend.")
|
jbe/bsw@0
|
95 else
|
jbe/bsw@0
|
96 return ui.tag{ tag = "div", attr = attr, content = content }
|
jbe/bsw@0
|
97 end
|
jbe/bsw@0
|
98 end
|