examples/lm/form_field.lua
changeset 68 742878c74b8e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/lm/form_field.lua	Tue Mar 31 18:35:34 2009 +0300
@@ -0,0 +1,99 @@
+
+-- 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: --