webmcp
annotate framework/env/ui/field/boolean.lua @ 12:f3d3203cd2e4
Documentation for partial loading added
NOTE: Previous changeset d76a8857ba62 also modified behaviour of ui.script: Scripts containing "]]>" are now rejected to avoid ambiguities
NOTE: Previous changeset d76a8857ba62 also modified behaviour of ui.script: Scripts containing "]]>" are now rejected to avoid ambiguities
| author | jbe | 
|---|---|
| date | Fri Feb 19 16:43:29 2010 +0100 (2010-02-19) | 
| 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 |