| 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 | 
| bsw@477 | 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 |