examples/lm/form_field.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 28 Nov 2012 20:17:53 +0200
changeset 146 04d19c9c1196
parent 68 742878c74b8e
permissions -rw-r--r--
Fix module loading problem


-- DATA FORM FIELD

local F = { }
local M = { }
M.__index = M

-- field.new      -- create new field
-- field:index    -- get index
-- field:type     -- get type
-- field:name     -- get var
-- field:desc     -- get label, desc
-- field:value    -- get/set value
-- field:values   -- get values
-- field:clear    -- clear value
-- field:options  -- get options
-- field:required -- get required

function F.new ( args )
	local obj = {
		t = args.type,
		l = args.label,
		d = args.desc,
		o = args.options,  -- XXX
		v = args.value,    -- XXX
		r = args.required,
		n = args.var,
		i = args.index,    -- XXX
	}
	setmetatable ( obj, M )
	return obj
end

function M.index ( obj )
	return obj.i
end

function M.type ( obj )
	return obj.t
end

function M.name ( obj )
	return obj.n
end

function M.desc ( obj )
	return obj.l, obj.d
end

function M.options ( obj )
	return pairs ( obj.o )
end

function M.value ( obj, value )
	local ftype = obj.t
	if value == nil then
		-- XXX
		return obj.v
	else
		if ftype == 'jid-multi' or ftype == 'list-multi' or ftype == 'text-multi' then
			table.insert ( obj.v, value )
		else
			obj.v = value
		end
	end
end

function M.values ( obj )
	local ftype = obj.t
	if ftype == 'jid-multi' or ftype == 'list-multi' or ftype == 'text-multi' then
		return ipairs ( obj.v )
	else
		return
			function ( arg )
				if not arg then
					return obj.v
				else
					return nil
				end
			end, nil
	end
end

function M.clear ( obj )
	local ftype = obj.t
	if ftype == 'jid-multi' or ftype == 'list-multi' or ftype == 'text-multi' then
		obj.v = { }
	else
		obj.v = ''
	end
end

function M.required ( obj )
	return obj.r
end

return F

-- vim: se ts=4: --