모듈:CGI2: 두 판 사이의 차이
백괴게임>Gustmd7410 잔글편집 요약 없음 |
편집 요약 없음 |
||
(사용자 2명의 중간 판 8개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
local getArgs = require('모듈:Arguments').getArgs | local getArgs = require('모듈:Arguments').getArgs | ||
local p = {} | local p = {} | ||
local actions = { | |||
set = "entry", | |||
del = "key", | |||
default = "entry", | |||
restrict = "key" | |||
} | |||
function | 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 args = getArgs(frame:getParent()) | ||
local params = {} | local params = {} | ||
for key in pairs(args) do | for key, value in pairs(args) do | ||
table.insert(params, { | local payload | ||
if(actions[action] == "entry") then payload = {key, value} | |||
elseif(actions[action] == "key") then payload = value | |||
end | |||
table.insert(params, {[action] = payload}) | |||
end | end | ||
return | return encode(params) | ||
end | end | ||
function p.toGET(frame) | function p.toGET(frame) | ||
local params = mw.text.jsonDecode('[' .. frame.args[1]:sub(1, -2) .. ']') | local params = mw.text.jsonDecode('[' .. mw.text.decode(frame.args[1]):sub(1, -2) .. ']') | ||
for index, wrapper in pairs(params) do | for index, wrapper in pairs(params) do | ||
34번째 줄: | 53번째 줄: | ||
for index, entry in pairs(params) do | for index, entry in pairs(params) do | ||
local payload = mw.text.split(entry, "=") | |||
for i, str in pairs( | for i, str in pairs(payload) do | ||
payload[i] = mw.uri.decode(str) | |||
end | end | ||
params[index] = {set = payload} | |||
end | end | ||
return | return encode(params) | ||
end | end | ||
return p | return setmetatable(p, { | ||
__index = function(t, action) | |||
if(actions[action]) then | |||
return function(frame) | |||
return set(action, frame) | |||
end | |||
end | |||
end | |||
}) |
2024년 2월 5일 (월) 00:20 판
위 설명은 모듈: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
})