Module:Sandbox/ProcrastinatingReader/Dbm
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
tbl[current] = {['size'] = size}
else -- Add the arg to the CSD being processed (ie, the corresponding CSD)
local arg = mw.text.split(v, '=')
tbl[current][string.lower(arg[1])] = arg[2]
size = size + 1 -- Increment the 'size', ie number of params passed for a particular CSD
tbl[current]['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 v[arg] then
templateArgs[arg] = v[arg]
summary = summary .. arg .. ': ' .. v[arg] .. (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.args[1]))
end
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.