webmcp
annotate framework/env/ui/field/boolean.lua @ 2:72860d232f32
Version 1.0.2
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
author | jbe/bsw |
---|---|
date | Thu Dec 10 12:00:00 2009 +0100 (2009-12-10) |
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 |