webmcp

annotate framework/env/ui/field/boolean.lua @ 14:a29c8ffb3f82

New function ui.filters{...}

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

Impressum / About Us