examples/form_field.lua
changeset 67 d33ca5572e91
equal deleted inserted replaced
66:542f61e113cb 67:d33ca5572e91
       
     1 
       
     2 -- DATA FORM FIELD
       
     3 
       
     4 local F = { }
       
     5 local M = { }
       
     6 M.__index = M
       
     7 
       
     8 -- field.new      -- create new field
       
     9 -- field:index    -- get index
       
    10 -- field:type     -- get type
       
    11 -- field:name     -- get var
       
    12 -- field:desc     -- get label, desc
       
    13 -- field:value    -- get/set value
       
    14 -- field:values   -- get values
       
    15 -- field:clear    -- clear value
       
    16 -- field:options  -- get options
       
    17 -- field:required -- get required
       
    18 
       
    19 function F.new ( args )
       
    20 	local obj = {
       
    21 		t = args.type,
       
    22 		l = args.label,
       
    23 		d = args.desc,
       
    24 		o = args.options,  -- XXX
       
    25 		v = args.value,    -- XXX
       
    26 		r = args.required,
       
    27 		n = args.var,
       
    28 		i = args.index,    -- XXX
       
    29 	}
       
    30 	setmetatable ( obj, M )
       
    31 	return obj
       
    32 end
       
    33 
       
    34 function M.index ( obj )
       
    35 	return obj.i
       
    36 end
       
    37 
       
    38 function M.type ( obj )
       
    39 	return obj.t
       
    40 end
       
    41 
       
    42 function M.name ( obj )
       
    43 	return obj.n
       
    44 end
       
    45 
       
    46 function M.desc ( obj )
       
    47 	return obj.l, obj.d
       
    48 end
       
    49 
       
    50 function M.options ( obj )
       
    51 	return pairs ( obj.o )
       
    52 end
       
    53 
       
    54 function M.value ( obj, value )
       
    55 	local ftype = obj.t
       
    56 	if value == nil then
       
    57 		-- XXX
       
    58 		return obj.v
       
    59 	else
       
    60 		if ftype == 'jid-multi' or ftype == 'list-multi' or ftype == 'text-multi' then
       
    61 			table.insert ( obj.v, value )
       
    62 		else
       
    63 			obj.v = value
       
    64 		end
       
    65 	end
       
    66 end
       
    67 
       
    68 function M.values ( obj )
       
    69 	local ftype = obj.t
       
    70 	if ftype == 'jid-multi' or ftype == 'list-multi' or ftype == 'text-multi' then
       
    71 		return ipairs ( obj.v )
       
    72 	else
       
    73 		return
       
    74 			function ( arg )
       
    75 				if not arg then
       
    76 					return obj.v
       
    77 				else
       
    78 					return nil
       
    79 				end
       
    80 			end, nil
       
    81 	end
       
    82 end
       
    83 
       
    84 function M.clear ( obj )
       
    85 	local ftype = obj.t
       
    86 	if ftype == 'jid-multi' or ftype == 'list-multi' or ftype == 'text-multi' then
       
    87 		obj.v = { }
       
    88 	else
       
    89 		obj.v = ''
       
    90 	end
       
    91 end
       
    92 
       
    93 function M.required ( obj )
       
    94 	return obj.r
       
    95 end
       
    96 
       
    97 return F
       
    98 
       
    99 -- vim: se ts=4: --