scripts/xep0004.lua
changeset 5 cba039bd6f13
parent 4 bca17e4a9851
child 6 90dceae3ed1f
--- a/scripts/xep0004.lua	Mon Feb 23 23:16:46 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-
-forms = { }
-
--- expects lm node   x = { xmlns = 'jabber:x:data', type = 'form', ... }
--- returns form index in forms table, you can do whatever you want to upper level table, except exp and val fields.
-function parse_form ( node )
-	local form = { title = 'unknown', exp = '', val = { } }
-	if node:child ( 'title' ) then
-		form.title = node:child( 'title' ):value ()
-	end
-	if node:child ( 'instructions' ) then
-		form.exp = form.exp .. 'Instructions: ' .. node:child( 'instructions' ):value () .. '\n'
-	end
-	form.exp = form.exp .. 'Fields:\n'
-	local field = node:children ()
-	while field do
-		if field:name () == 'field' then
-			local field_type  = field:attribute ( 'type' ) or 'text-single'
-			local field_var   = field:attribute ( 'var' ) or ''
-			form.exp = form.exp .. ' - ' .. field_var .. '\n   Type: ' .. field_type .. '\n'
-			if field:attribute ( 'label' ) then
-				form.exp = form.exp .. '   Label: ' .. ( field:attribute ( 'label' ) or '' ) .. '\n'
-			end
-			if field:child ( 'desc' ) then
-				form.exp = form.exp .. '   Description: ' .. field:child( 'desc' ):value () .. '\n'
-			end
-			if field:child ( 'required' ) then
-				form.exp = form.exp .. '   Required: yes\n'
-			end
-
-			local field_value
-			if field_type == 'jid-multi' or field_type == 'list-multi' or field_type == 'text-multi' then
-				field_value = { }
-				local value = field:children ()
-				form.exp = form.exp .. '   Default values:\n'
-				while value do
-					if value:name () == 'value' then
-						table.insert ( field_value, { value:value () } )
-						form.exp = form.exp .. '    - ' .. value:value () .. '\n'
-					end
-					value = value:next ()
-				end
-			else
-				if field:child ( 'value' ) then
-					field_value = field:child( 'value' ):value ()
-					form.exp = form.exp .. '   Default value: ' .. field_value .. '\n'
-				end
-			end
-
-			if field_type == 'list-single' or field_type == 'list-multi' then
-				form.exp = form.exp .. '   List options:\n'
-				local option = field:children ()
-				while option do
-					if option:name () == 'option' then
-						form.exp = form.exp .. '    - ' .. ( option:child( 'value' ):value () or '' ) .. ': ' .. ( option:attribute ( 'label' ) or '' ) .. '\n'
-					end
-					option = option:next ()
-				end
-			end
-
-			if field_type == 'boolean' then
-				table.insert ( form.val, { type = field_type, var = field_var, value = { field_value or '0' } } )
-			elseif field_type == 'fixed' then
-			elseif field_type == 'hidden' then
-				table.insert ( form.val, { type = field_type, var = field_var, value = { field_value or '' } } )
-			elseif field_type == 'list-single' then
-				table.insert ( form.val, { type = field_type, var = field_var, value = { field_value or '' } } )
-			elseif field_type == 'list-multi' then
-				table.insert ( form.val, { type = field_type, var = field_var, value = field_value or { } } )
-			elseif field_type == 'jid-multi' or field_type == 'text-multi' then
-				table.insert ( form.val, { type = field_type, var = field_var, value = field_value or { } } )
-			elseif field_type == 'jid-single' or field_type == 'text-single' then
-				table.insert ( form.val, { type = field_type, var = field_var, value = { field_value or '' } } )
-			elseif field_type == 'text-private' then
-				table.insert ( form.val, { type = field_type, var = field_var, value = { field_value or '' } } )
-			end
-		end
-		field = field:next ()
-	end
-	table.insert ( forms, form )
-	return #forms
-end
-
-function form_set ( id, name, value )
-	if forms[id] then
-		for index, field in ipairs ( forms[id].val ) do
-			if field.var == name then
-				if value == nil then
-					field.value = { }
-				else
-					if field.type == 'jid-multi' or field.type == 'list-multi' or field.type == 'text-multi' then
-						table.insert ( field.value, { value } )
-					else
-						field.value = { value }
-					end
-				end
-			end
-		end
-	end
-end
-
-main.add_command ( 'form',
-	function ( args )
-		args = parse_args ( args )
-		local action = args[1]
-		local id = tonumber (args[1])
-		if forms[id] then
-			if args[2] then
-				local field = args[2]
-				if args[3] == 'clear' then
-					form_set ( id, field, nil )
-				else
-					args[1] = nil
-					args[2] = nil
-					if args[3] == 'set' then
-						args[3] = nil
-					end
-					form_set ( id, field, rebuild_args_string ( args ) )
-				end
-			else
-				print ( 'Form: ' .. ( forms[id].title or '' ) .. '\n' .. forms[id].exp )
-				print ( 'Fields:' )
-				for index, field in ipairs ( forms[id].val ) do -- this should not be here, but setting up callback just for this...
-					if field.type == 'jid-multi' or field.type == 'list-multi' or field.type == 'text-multi' then
-						print ( ' - ' .. field.var .. ' [' .. field.type .. ']:' )
-						for vin, value in ipairs ( field.value ) do
-							print ( '    * ' .. value[1] )
-						end
-					else
-						print ( ' - ' .. field.var .. ' [' .. field.type .. ']: ' .. field.value[1] )
-					end
-				end
-			end
-		elseif action == 'del' then
-			forms[tonumber(args[2])] = nil
-		elseif action == 'send' then
-			local form = forms[tonumber(args[2])]
-			if form then
-				form.send ( form )
-			end
-		else
-			print ( 'Forms list:' )
-			for id, form in ipairs ( forms ) do
-				print ( ' - ' .. tostring(id) .. ' ' .. form.title .. ' [' .. ( form.status or 'unknown' ) .. ']' )
-			end
-		end
-	end )
-
-commands_help['form'] = "[del form_id | send form_id | form_id [field_name {clear | [set] value}]\n\nWith bare form id prints info on that form.\nWith field name sets or clears field value. Set subcommand is optional, just to allow values, starting with 'clear'.\nWithout arguments prints form list."
-
--- vim: se ts=4: --