webmcp

annotate framework/env/ui/form_element.lua @ 476:993fbee179ae

Added json sub attribute support for form element
author bsw
date Tue Jun 06 11:47:33 2017 +0200 (2017-06-06)
parents 9fdfb27f8e67
children be5db15e2d9a
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@476 35 local path = {}
bsw@476 36 for match in string.gmatch(args.name, "[^%.]+") do
bsw@476 37 path[#path+1] = match
bsw@476 38 end
bsw@476 39 local value = args.record
bsw@476 40 for i, path_element in ipairs(path) do
bsw@476 41 if type(value) == "table" then
bsw@476 42 value = value[path_element]
bsw@476 43 else
bsw@476 44 value = nil
bsw@476 45 end
bsw@476 46 end
bsw@476 47 args.value = value
jbe/bsw@0 48 end
jbe/bsw@0 49 else
jbe/bsw@0 50 args.value = nihil.lower(args.value)
jbe/bsw@0 51 end
jbe/bsw@0 52 elseif args.fetch_record then
jbe/bsw@0 53 if not args.record and slot_state then
jbe/bsw@0 54 args.record = slot_state.form_record
jbe/bsw@0 55 end
jbe/bsw@0 56 end
jbe/bsw@0 57 if
jbe/bsw@0 58 args.html_name and
jbe/bsw@0 59 not args.readonly and
jbe/bsw@0 60 slot_state.form_readonly == false
jbe/bsw@0 61 then
jbe/bsw@0 62 args.readonly = false
jbe/bsw@0 63 local prefix
jbe/bsw@0 64 if args.html_name_prefix == nil then
jbe/bsw@0 65 prefix = slot_state.html_name_prefix
jbe/bsw@0 66 else
jbe/bsw@0 67 prefix = args.html_name_prefix
jbe/bsw@0 68 end
jbe/bsw@0 69 if prefix then
jbe/bsw@0 70 args.html_name = prefix .. args.html_name
jbe/bsw@0 71 end
jbe/bsw@0 72 else
jbe/bsw@0 73 args.readonly = true
jbe/bsw@0 74 end
jbe/bsw@0 75 if args.label then
jbe/bsw@0 76 if not args.disable_label_for_id then
jbe/bsw@0 77 if not args.attr then
jbe/bsw@0 78 args.attr = { id = ui.create_unique_id() }
jbe/bsw@0 79 elseif not args.attr.id then
jbe/bsw@0 80 args.attr.id = ui.create_unique_id()
jbe/bsw@0 81 end
jbe/bsw@0 82 end
jbe/bsw@0 83 if not args.label_attr then
jbe/bsw@0 84 args.label_attr = { class = "ui_field_label" }
jbe/bsw@0 85 elseif not args.label_attr.class then
jbe/bsw@0 86 args.label_attr.class = "ui_field_label"
jbe/bsw@0 87 end
jbe/bsw@0 88 end
jbe/bsw@0 89 ui.container{
jbe/bsw@0 90 auto_args = args,
jbe/bsw@0 91 content = function() return func(args) end
jbe/bsw@0 92 }
jbe/bsw@0 93 end

Impressum / About Us