모듈:CGI2
보이기
	
	
| 위 설명은 모듈:CGI2/설명문서의 내용을 가져와 보여주고 있습니다. (편집 | 역사) 이 모듈에 대한 수정 연습과 시험은 연습장 (만들기 | 미러)과 시험장 (만들기)에서 할 수 있습니다. 분류는 /설명문서에 넣어주세요. 이 모듈에 딸린 문서.  | 
local getArgs = require('모듈:Arguments').getArgs
local p = {}
local actions = {
	set = "entry",
	del = "key",
	default = "entry",
	restrict = "key"
}
function encode(t)
	if #t > 0 then
		return mw.text.encode(mw.text.jsonEncode(t):sub(2, -2) .. ',')
	else
		return ''
	end
end
function set(action, frame)
	local args = getArgs(frame:getParent())
	local params = {}
	
	for key, value in pairs(args) do
		local payload
		
		if(actions[action] == "entry") then payload = {key, value}
		elseif(actions[action] == "key") then payload = value
		end
		
		table.insert(params, {[action] = payload})
	end
	
	return encode(params)
end
function p.toGET(frame)
	local params = mw.text.jsonDecode('[' .. mw.text.decode(frame.args[1]):sub(1, -2) .. ']')
	
	for index, wrapper in pairs(params) do
		if(wrapper.set) then
			for i, str in pairs(wrapper.set) do
				wrapper.set[i] = mw.uri.encode(str)
			end
			
			params[index] = table.concat(wrapper.set, "=")
		end
	end
	
	return table.concat(params, '&')
end
function p.fromGET(frame)
	local params = mw.text.split(frame.args.get, "&")
	
	for index, entry in pairs(params) do
		local payload = mw.text.split(entry, "=")
		
		for i, str in pairs(payload) do
			payload[i] = mw.uri.decode(str)
		end
		
		params[index] = {set = payload}
	end
	
	return encode(params)
end
return setmetatable(p, {
	__index = function(t, action)
		if(actions[action]) then
			return function(frame)
				return set(action, frame)
			end
		end
	end
})