local p = {}
local getArgs = require('Module:Arguments').getArgs
-- Returns a table with the keys of the passed table as its values
local function getTableKeys(tbl)
local keys = {}
for k,_ in pairs(tbl) do
keys#keys + 1 = k
end
table.sort(keys)
return keys
end
-- Construct a table of the tagged CSDs and any arguments passed in for each CSD
-- Example format: |G6|rationale{{=}}G6 rationale|xfd|G7|rationale{{=}}G7 rationale
local function constructCsdTable(args)
local tbl = {}
local current = '' -- Code of current CSD being processed. Its value will be the last CSD-like param read (eg 'G6')
local size = 0
for k,v in pairs(args) do
if string.match(v, '^[GgAaFfCcUuRrTtPp]%d%d?$') then -- Begin collecting args for a new CSD
current, size = string.lower(v), 0
tblcurrent = {['size' = size}
else -- Add the arg to the CSD being processed (ie, the corresponding CSD)
local arg = mw.text.split(v, '=')
tblcurrent][string.lower(arg1])] = arg2
size = size + 1 -- Increment the 'size', ie number of params passed for a particular CSD
tblcurrent]['size' = size
end
end
return tbl
end
-- Build the Db-meta wrapper template
local function build(frame, args)
local passThruArgs = {'rationale', 'xfd', 'user', 'blanked', 'url', 'url2', 'url3', 'source', 'article', 'location', 'filename', 'criterion'} -- Arguments we'll pass through unchanged to the Db-meta wrapper
local csdTable = constructCsdTable(args)
local csdKeys = getTableKeys(csdTable)
--if true then return mw.dumpObject(csdTable) end
local builtCsdTemplates = {}
local summary = ""
-- Loop through CSDs (eg G1, G2)
local n = 0
for k,v in pairs(csdTable) do
n = n + 1
local templateArgs = {
'raw' = 'yes',
'nocat' = 'true' -- for test purposes
}
-- Add to summary the name of the CSD. Plus open brackets if we've got extra params
summary = summary .. string.upper(k) .. (v'size' > 0 and ' (' or '')
-- add values to templateArgs (and summary) in any custom params we got for this CSD, eg Rationale, URL
for _,arg in ipairs(passThruArgs) do
if varg then
templateArgsarg = varg
summary = summary .. arg .. ': ' .. varg .. (v'size' > _ and ', ' or '')
end
end
-- Close brackets if we had custom params. Add a comma if we've got another CSD
summary = summary .. (v'size' > 0 and ')' or '') .. (#csdKeys > n and ', ' or '')
-- Save the built template
table.insert(builtCsdTemplates, frame:expandTemplate{ title = 'Db-'..k, args = templateArgs })
end
-- Construct Db-meta wrapper, composed of all the built CSD templates
local dbTemplate = frame:expandTemplate{ title = 'Db-meta', args = {
1 = ' for the following reasons:</b><ul><li>'..table.concat(builtCsdTemplates, '</li><li>') .. '</li></ul> <b>The page may be deleted under any criterion that is valid',
'criterion' = 'NA',
'temp' = 'Db-notice-multiple',
'temp2' = '|'..table.concat(csdKeys, '|'),
'summary' = 'Multiple reasons: ' .. summary,
-- forward given params to Db-meta
'bot' = args'bot' or '',
'blanked' = args'blanked' or (csdTable'g10' and 'yes') or '',
'divblank' = args'divblank' or (csdTable'g10' and 'yes') or '',
'help' = args'help' or '',
}}
return dbTemplate
end
-- Exports
function p.main(frame)
local args = getArgs(frame)
return build(frame, args)
end
-- Test
function p.dump(frame)
return mw.dumpObject(mw.text.unstripNoWiki(frame.args1]))
end
return p
local p = {}
local getArgs = require('Module:Arguments').getArgs
-- Returns a table with the keys of the passed table as its values
local function getTableKeys(tbl)
local keys = {}
for k,_ in pairs(tbl) do
keys#keys + 1 = k
end
table.sort(keys)
return keys
end
-- Construct a table of the tagged CSDs and any arguments passed in for each CSD
-- Example format: |G6|rationale{{=}}G6 rationale|xfd|G7|rationale{{=}}G7 rationale
local function constructCsdTable(args)
local tbl = {}
local current = '' -- Code of current CSD being processed. Its value will be the last CSD-like param read (eg 'G6')
local size = 0
for k,v in pairs(args) do
if string.match(v, '^[GgAaFfCcUuRrTtPp]%d%d?$') then -- Begin collecting args for a new CSD
current, size = string.lower(v), 0
tblcurrent = {['size' = size}
else -- Add the arg to the CSD being processed (ie, the corresponding CSD)
local arg = mw.text.split(v, '=')
tblcurrent][string.lower(arg1])] = arg2
size = size + 1 -- Increment the 'size', ie number of params passed for a particular CSD
tblcurrent]['size' = size
end
end
return tbl
end
-- Build the Db-meta wrapper template
local function build(frame, args)
local passThruArgs = {'rationale', 'xfd', 'user', 'blanked', 'url', 'url2', 'url3', 'source', 'article', 'location', 'filename', 'criterion'} -- Arguments we'll pass through unchanged to the Db-meta wrapper
local csdTable = constructCsdTable(args)
local csdKeys = getTableKeys(csdTable)
--if true then return mw.dumpObject(csdTable) end
local builtCsdTemplates = {}
local summary = ""
-- Loop through CSDs (eg G1, G2)
local n = 0
for k,v in pairs(csdTable) do
n = n + 1
local templateArgs = {
'raw' = 'yes',
'nocat' = 'true' -- for test purposes
}
-- Add to summary the name of the CSD. Plus open brackets if we've got extra params
summary = summary .. string.upper(k) .. (v'size' > 0 and ' (' or '')
-- add values to templateArgs (and summary) in any custom params we got for this CSD, eg Rationale, URL
for _,arg in ipairs(passThruArgs) do
if varg then
templateArgsarg = varg
summary = summary .. arg .. ': ' .. varg .. (v'size' > _ and ', ' or '')
end
end
-- Close brackets if we had custom params. Add a comma if we've got another CSD
summary = summary .. (v'size' > 0 and ')' or '') .. (#csdKeys > n and ', ' or '')
-- Save the built template
table.insert(builtCsdTemplates, frame:expandTemplate{ title = 'Db-'..k, args = templateArgs })
end
-- Construct Db-meta wrapper, composed of all the built CSD templates
local dbTemplate = frame:expandTemplate{ title = 'Db-meta', args = {
1 = ' for the following reasons:</b><ul><li>'..table.concat(builtCsdTemplates, '</li><li>') .. '</li></ul> <b>The page may be deleted under any criterion that is valid',
'criterion' = 'NA',
'temp' = 'Db-notice-multiple',
'temp2' = '|'..table.concat(csdKeys, '|'),
'summary' = 'Multiple reasons: ' .. summary,
-- forward given params to Db-meta
'bot' = args'bot' or '',
'blanked' = args'blanked' or (csdTable'g10' and 'yes') or '',
'divblank' = args'divblank' or (csdTable'g10' and 'yes') or '',
'help' = args'help' or '',
}}
return dbTemplate
end
-- Exports
function p.main(frame)
local args = getArgs(frame)
return build(frame, args)
end
-- Test
function p.dump(frame)
return mw.dumpObject(mw.text.unstripNoWiki(frame.args1]))
end
return p