| 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)
 | 
| 
jbe/bsw@0
 | 
    21   local attr, label, label_attr, legend, legend_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
 | 
| 
jbe/bsw@0
 | 
    29     if label and auto_args.attr and auto_args.attr.id then
 | 
| 
jbe/bsw@0
 | 
    30       label_attr = table.new(label_attr)
 | 
| 
jbe/bsw@0
 | 
    31       label_attr["for"] = auto_args.attr.id
 | 
| 
jbe/bsw@0
 | 
    32     end
 | 
| 
jbe/bsw@0
 | 
    33   else
 | 
| 
jbe/bsw@0
 | 
    34     attr        = args.attr
 | 
| 
jbe/bsw@0
 | 
    35     label       = args.label
 | 
| 
jbe/bsw@0
 | 
    36     label_attr  = args.label_attr or {}
 | 
| 
jbe/bsw@0
 | 
    37     legend      = args.legend
 | 
| 
jbe/bsw@0
 | 
    38     legend_attr = args.legend_attr
 | 
| 
jbe/bsw@0
 | 
    39     content     = content
 | 
| 
jbe/bsw@0
 | 
    40     if args.label_for then
 | 
| 
jbe/bsw@0
 | 
    41       label_attr["for"] = args.label_for
 | 
| 
jbe/bsw@0
 | 
    42     end
 | 
| 
jbe/bsw@0
 | 
    43   end
 | 
| 
jbe/bsw@0
 | 
    44   local content = args.content
 | 
| 
jbe/bsw@0
 | 
    45   if label and not legend then
 | 
| 
jbe/bsw@0
 | 
    46     return ui.tag {
 | 
| 
jbe/bsw@0
 | 
    47       tag     = "div",
 | 
| 
jbe/bsw@0
 | 
    48       attr    = attr,
 | 
| 
jbe/bsw@0
 | 
    49       content = function()
 | 
| 
jbe/bsw@0
 | 
    50         if not args.content_first then
 | 
| 
jbe/bsw@0
 | 
    51           ui.tag{ tag = "label", attr = label_attr, content = label }
 | 
| 
jbe/bsw@0
 | 
    52           slot.put(" ")
 | 
| 
jbe/bsw@0
 | 
    53         end
 | 
| 
jbe/bsw@0
 | 
    54         if type(content) == "function" then
 | 
| 
jbe/bsw@0
 | 
    55           content()
 | 
| 
jbe/bsw@0
 | 
    56         elseif content then
 | 
| 
jbe/bsw@0
 | 
    57           slot.put(encode.html(content))
 | 
| 
jbe/bsw@0
 | 
    58         end
 | 
| 
jbe/bsw@0
 | 
    59         if args.content_first then
 | 
| 
jbe/bsw@0
 | 
    60           slot.put(" ")
 | 
| 
jbe/bsw@0
 | 
    61           ui.tag{ tag = "label", attr = label_attr, content = label }
 | 
| 
jbe/bsw@0
 | 
    62         end
 | 
| 
jbe/bsw@0
 | 
    63       end
 | 
| 
jbe/bsw@0
 | 
    64     }
 | 
| 
jbe/bsw@0
 | 
    65   elseif legend and not label then
 | 
| 
jbe/bsw@0
 | 
    66     return ui.tag {
 | 
| 
jbe/bsw@0
 | 
    67       tag     = "fieldset",
 | 
| 
jbe/bsw@0
 | 
    68       attr    = attr,
 | 
| 
jbe/bsw@0
 | 
    69       content = function()
 | 
| 
jbe/bsw@0
 | 
    70         if not args.content_first then
 | 
| 
jbe/bsw@0
 | 
    71           ui.tag{ tag = "legend", attr = legend_attr, content = legend }
 | 
| 
jbe/bsw@0
 | 
    72           slot.put(" ")
 | 
| 
jbe/bsw@0
 | 
    73         end
 | 
| 
jbe/bsw@0
 | 
    74         if type(content) == "function" then
 | 
| 
jbe/bsw@0
 | 
    75           content()
 | 
| 
jbe/bsw@0
 | 
    76         elseif content then
 | 
| 
jbe/bsw@0
 | 
    77           slot.put(encode.html(content))
 | 
| 
jbe/bsw@0
 | 
    78         end
 | 
| 
jbe/bsw@0
 | 
    79         if args.content_first then
 | 
| 
jbe/bsw@0
 | 
    80           slot.put(" ")
 | 
| 
jbe/bsw@0
 | 
    81           ui.tag{ tag = "legend", attr = legend_attr, content = legend }
 | 
| 
jbe/bsw@0
 | 
    82         end
 | 
| 
jbe/bsw@0
 | 
    83       end
 | 
| 
jbe/bsw@0
 | 
    84     }
 | 
| 
jbe/bsw@0
 | 
    85   elseif fieldset and label then
 | 
| 
jbe/bsw@0
 | 
    86     error("ui.container{...} may either get a label or a legend.")
 | 
| 
jbe/bsw@0
 | 
    87   else
 | 
| 
jbe/bsw@0
 | 
    88     return ui.tag{ tag = "div", attr = attr, content = content }
 | 
| 
jbe/bsw@0
 | 
    89   end
 | 
| 
jbe/bsw@0
 | 
    90 end
 |