webmcp
annotate framework/env/ui/field/select.lua @ 506:83b3882dc31b
New functions moonhash.shake128(data, len, alphabet), moonhash.shake256(data, len, alphabet)
Removed moonhash.shake128_128(...)
Removed moonhash.shake128_128(...)
| author | jbe | 
|---|---|
| date | Wed Aug 16 00:31:11 2017 +0200 (2017-08-16) | 
| parents | a6a00add617b | 
| children | 
| rev | line source | 
|---|---|
| jbe/bsw@0 | 1 --[[-- | 
| jbe/bsw@0 | 2 ui.field.select{ | 
| jbe@75 | 3 ... -- generic ui.field.* arguments, as described for ui.autofield{...} | 
| poelzi@30 | 4 foreign_records = foreign_records, -- list of records to be chosen from, or function returning such a list | 
| poelzi@30 | 5 foreign_id = foreign_id, -- name of id field in foreign records | 
| poelzi@30 | 6 foreign_name = foreign_name, -- name of field to be used as name in foreign records | 
| poelzi@30 | 7 format_options = format_options -- format options for format.string | 
| jbe@75 | 8 selected_record = selected_record -- id of (or reference to) record which is selected (optional, overrides "value" argument when not nil) | 
| jbe@75 | 9 disabled_records = disabled_records -- table with ids of (or references to) records that should be disabled (stored as table keys mapped to true) | 
| jbe/bsw@0 | 10 } | 
| jbe/bsw@0 | 11 | 
| jbe/bsw@0 | 12 This function inserts a select field in the active slot. For description of the generic field helper arguments, see help for ui.autofield{...}. | 
| jbe/bsw@0 | 13 | 
| jbe/bsw@0 | 14 --]]-- | 
| jbe/bsw@0 | 15 | 
| jbe/bsw@0 | 16 function ui.field.select(args) | 
| jbe/bsw@0 | 17 ui.form_element(args, {fetch_value = true}, function(args) | 
| jbe/bsw@0 | 18 local foreign_records = args.foreign_records | 
| jbe/bsw@0 | 19 if type(foreign_records) == "function" then | 
| jbe/bsw@0 | 20 foreign_records = foreign_records(args.record) | 
| jbe/bsw@0 | 21 end | 
| jbe/bsw@0 | 22 if args.readonly then | 
| jbe/bsw@0 | 23 local name | 
| jbe/bsw@0 | 24 for idx, record in ipairs(foreign_records) do | 
| jbe/bsw@0 | 25 if record[args.foreign_id] == args.value then | 
| jbe/bsw@0 | 26 name = record[args.foreign_name] | 
| jbe/bsw@0 | 27 break | 
| jbe/bsw@0 | 28 end | 
| jbe/bsw@0 | 29 end | 
| jbe/bsw@0 | 30 ui.tag{ | 
| jbe/bsw@0 | 31 tag = args.tag, | 
| jbe/bsw@0 | 32 attr = args.attr, | 
| jbe/bsw@0 | 33 content = format.string(name, args.format_options) | 
| jbe/bsw@0 | 34 } | 
| jbe/bsw@0 | 35 else | 
| jbe/bsw@0 | 36 local attr = table.new(args.attr) | 
| jbe/bsw@0 | 37 attr.name = args.html_name | 
| jbe/bsw@0 | 38 ui.tag{ | 
| jbe/bsw@0 | 39 tag = "select", | 
| jbe/bsw@0 | 40 attr = attr, | 
| jbe/bsw@0 | 41 content = function() | 
| jbe/bsw@0 | 42 if args.nil_as then | 
| jbe/bsw@0 | 43 ui.tag{ | 
| jbe/bsw@0 | 44 tag = "option", | 
| jbe/bsw@0 | 45 attr = { value = "" }, | 
| jbe/bsw@0 | 46 content = format.string( | 
| jbe/bsw@0 | 47 args.nil_as, | 
| jbe/bsw@0 | 48 args.format_options | 
| jbe/bsw@0 | 49 ) | 
| jbe/bsw@0 | 50 } | 
| jbe/bsw@0 | 51 end | 
| jbe@75 | 52 local one_selected = false | 
| jbe/bsw@0 | 53 for idx, record in ipairs(foreign_records) do | 
| jbe/bsw@0 | 54 local key = record[args.foreign_id] | 
| jbe@75 | 55 local selected = false | 
| jbe@75 | 56 if not one_selected then | 
| jbe@75 | 57 if args.selected_record == nil then | 
| jbe@75 | 58 if args.value == key then | 
| jbe@75 | 59 selected = true | 
| jbe@75 | 60 end | 
| jbe@75 | 61 else | 
| jbe@75 | 62 if args.selected_record == record or args.selected_record == key then | 
| jbe@75 | 63 selected = true | 
| jbe@75 | 64 end | 
| jbe@75 | 65 end | 
| jbe@75 | 66 one_selected = selected | 
| jbe@75 | 67 end | 
| jbe@75 | 68 local disabled = false | 
| jbe@75 | 69 if args.disabled_records then | 
| jbe@75 | 70 if args.disabled_records[record] or args.disabled_records[key] then | 
| jbe@75 | 71 disabled = true | 
| jbe@75 | 72 end | 
| jbe@75 | 73 end | 
| jbe/bsw@0 | 74 ui.tag{ | 
| jbe/bsw@0 | 75 tag = "option", | 
| jbe/bsw@0 | 76 attr = { | 
| jbe/bsw@0 | 77 value = key, | 
| jbe@75 | 78 disabled = disabled and "disabled" or nil, | 
| jbe@75 | 79 selected = selected and "selected" or nil | 
| jbe/bsw@0 | 80 }, | 
| jbe/bsw@0 | 81 content = format.string( | 
| jbe/bsw@0 | 82 record[args.foreign_name], | 
| jbe/bsw@0 | 83 args.format_options | 
| jbe/bsw@0 | 84 ) | 
| jbe/bsw@0 | 85 } | 
| jbe/bsw@0 | 86 end | 
| jbe/bsw@0 | 87 end | 
| jbe/bsw@0 | 88 } | 
| jbe/bsw@0 | 89 end | 
| jbe/bsw@0 | 90 end) | 
| jbe/bsw@0 | 91 end |