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 |