webmcp
annotate framework/env/ui/field/boolean.lua @ 14:a29c8ffb3f82
New function ui.filters{...}
Also changed version information to "1.0.8"
Also changed version information to "1.0.8"
author | jbe/bsw |
---|---|
date | Sat Feb 20 21:00:58 2010 +0100 (2010-02-20) |
parents | 9fdfb27f8e67 |
children |
rev | line source |
---|---|
jbe/bsw@0 | 1 --[[-- |
jbe/bsw@0 | 2 ui.field.boolean{ |
jbe/bsw@0 | 3 ... -- generic ui.field.* arguments, as described for ui.autofield{...} |
jbe/bsw@0 | 4 style = style, -- "radio" or "checkbox", |
jbe/bsw@0 | 5 nil_allowed = nil_allowed -- set to true, if nil is allowed as third value |
jbe/bsw@0 | 6 } |
jbe/bsw@0 | 7 |
jbe/bsw@0 | 8 This function inserts a field for boolean values in the active slot. For description of the generic field helper arguments, see help for ui.autofield{...}. |
jbe/bsw@0 | 9 |
jbe/bsw@0 | 10 --]]-- |
jbe/bsw@0 | 11 |
jbe/bsw@0 | 12 function ui.field.boolean(args) |
jbe/bsw@0 | 13 local style = args.style |
jbe/bsw@0 | 14 if not style then |
jbe/bsw@0 | 15 if args.nil_allowed then |
jbe/bsw@0 | 16 style = "radio" |
jbe/bsw@0 | 17 else |
jbe/bsw@0 | 18 style = "checkbox" |
jbe/bsw@0 | 19 end |
jbe/bsw@0 | 20 end |
jbe/bsw@0 | 21 local extra_args = { fetch_value = true } |
jbe/bsw@0 | 22 if not args.readonly and args.style == "radio" then |
jbe/bsw@0 | 23 extra_args.disable_label_for_id = true |
jbe/bsw@0 | 24 end |
jbe/bsw@0 | 25 ui.form_element(args, extra_args, function(args) |
jbe/bsw@0 | 26 local value = args.value |
jbe/bsw@0 | 27 if value ~= true and value ~= false and value ~= nil then |
jbe/bsw@0 | 28 error("Boolean value must be true, false or nil.") |
jbe/bsw@0 | 29 end |
jbe/bsw@0 | 30 if value == nil then |
jbe/bsw@0 | 31 if args.nil_allowed then |
jbe/bsw@0 | 32 value = args.default |
jbe/bsw@0 | 33 else |
jbe/bsw@0 | 34 value = args.default or false |
jbe/bsw@0 | 35 end |
jbe/bsw@0 | 36 end |
jbe/bsw@0 | 37 if args.readonly then |
jbe/bsw@0 | 38 ui.tag{ |
jbe/bsw@0 | 39 tag = args.tag, |
jbe/bsw@0 | 40 attr = args.attr, |
jbe/bsw@0 | 41 content = format.boolean(value, args.format_options) |
jbe/bsw@0 | 42 } |
jbe/bsw@0 | 43 elseif style == "radio" then |
jbe/bsw@0 | 44 local attr = table.new(args.attr) |
jbe/bsw@0 | 45 attr.type = "radio" |
jbe/bsw@0 | 46 attr.name = args.html_name |
jbe/bsw@0 | 47 attr.id = ui.create_unique_id() |
jbe/bsw@0 | 48 attr.value = "1" |
jbe/bsw@0 | 49 if value == true then |
jbe/bsw@0 | 50 attr.checked = "checked" |
jbe/bsw@0 | 51 else |
jbe/bsw@0 | 52 attr.checked = nil |
jbe/bsw@0 | 53 end |
jbe/bsw@0 | 54 ui.container{ |
jbe/bsw@0 | 55 attr = { class = "ui_radio_div" }, |
jbe/bsw@0 | 56 label = args.true_as or "Yes", -- TODO: localize |
jbe/bsw@0 | 57 label_for = attr.id, |
jbe/bsw@0 | 58 label_attr = { class = "ui_radio_label" }, |
jbe/bsw@0 | 59 content_first = true, |
jbe/bsw@0 | 60 content = function() |
jbe/bsw@0 | 61 ui.tag{ tag = "input", attr = attr } |
jbe/bsw@0 | 62 end |
jbe/bsw@0 | 63 } |
jbe/bsw@0 | 64 attr.id = ui.create_unique_id() |
jbe/bsw@0 | 65 attr.value = "0" |
jbe/bsw@0 | 66 if value == false then |
jbe/bsw@0 | 67 attr.checked = "1" |
jbe/bsw@0 | 68 else |
jbe/bsw@0 | 69 attr.checked = nil |
jbe/bsw@0 | 70 end |
jbe/bsw@0 | 71 ui.container{ |
jbe/bsw@0 | 72 attr = { class = "ui_radio_div" }, |
jbe/bsw@0 | 73 label = args.false_as or "No", -- TODO: localize |
jbe/bsw@0 | 74 label_for = attr.id, |
jbe/bsw@0 | 75 label_attr = { class = "ui_radio_label" }, |
jbe/bsw@0 | 76 content_first = true, |
jbe/bsw@0 | 77 content = function() |
jbe/bsw@0 | 78 ui.tag{ tag = "input", attr = attr } |
jbe/bsw@0 | 79 end |
jbe/bsw@0 | 80 } |
jbe/bsw@0 | 81 if args.nil_allowed then |
jbe/bsw@0 | 82 attr.id = ui.create_unique_id() |
jbe/bsw@0 | 83 attr.value = "" |
jbe/bsw@0 | 84 if value == nil then |
jbe/bsw@0 | 85 attr.checked = "1" |
jbe/bsw@0 | 86 else |
jbe/bsw@0 | 87 attr.checked = nil |
jbe/bsw@0 | 88 end |
jbe/bsw@0 | 89 ui.container{ |
jbe/bsw@0 | 90 attr = { class = "ui_radio_div" }, |
jbe/bsw@0 | 91 label = args.nil_as or "N/A", -- TODO: localize |
jbe/bsw@0 | 92 label_for = attr.id, |
jbe/bsw@0 | 93 label_attr = { class = "ui_radio_label" }, |
jbe/bsw@0 | 94 content_first = true, |
jbe/bsw@0 | 95 content = function() |
jbe/bsw@0 | 96 ui.tag{ tag = "input", attr = attr } |
jbe/bsw@0 | 97 end |
jbe/bsw@0 | 98 } |
jbe/bsw@0 | 99 end |
jbe/bsw@0 | 100 ui.hidden_field{ |
jbe/bsw@0 | 101 name = args.html_name .. "__format", value = "boolean" |
jbe/bsw@0 | 102 } |
jbe/bsw@0 | 103 elseif style == "checkbox" then |
jbe/bsw@0 | 104 if args.nil_allowed then |
jbe/bsw@0 | 105 error("Checkboxes do not support nil values.") |
jbe/bsw@0 | 106 end |
jbe/bsw@0 | 107 local attr = table.new(args.attr) |
jbe/bsw@0 | 108 attr.type = "checkbox" |
jbe/bsw@0 | 109 attr.name = args.html_name |
jbe/bsw@0 | 110 attr.value = "1" |
jbe/bsw@0 | 111 if value then |
jbe/bsw@0 | 112 attr.checked = "checked" |
jbe/bsw@0 | 113 else |
jbe/bsw@0 | 114 attr.checked = nil |
jbe/bsw@0 | 115 end |
jbe/bsw@0 | 116 ui.tag{ tag = "input", attr = attr } |
jbe/bsw@0 | 117 ui.hidden_field{ |
jbe/bsw@0 | 118 name = args.html_name .. "__format", |
jbe/bsw@0 | 119 value = encode.format_info( |
jbe/bsw@0 | 120 "boolean", |
jbe/bsw@0 | 121 { true_as = "1", false_as = "" } |
jbe/bsw@0 | 122 ) |
jbe/bsw@0 | 123 } |
jbe/bsw@0 | 124 else |
jbe/bsw@0 | 125 error("'style' attribute for ui.field.boolean{...} must be set to \"radio\", \"checkbox\" or nil.") |
jbe/bsw@0 | 126 end |
jbe/bsw@0 | 127 end) |
jbe/bsw@0 | 128 end |