پودمان:WorkInfoBox
ظاهر
توضیحات این پودمان میتواند در پودمان:WorkInfoBox/توضیحات قرار گیرد.
local p = {}
local getArgs = require('Module:Arguments').getArgs
local html = mw.html
local Fields = require('Module:WorkInfoBox/Data/Fields')
local Layouts = require('Module:WorkInfoBox/Data/Layouts')
local Labels = require('Module:WorkInfoBox/Data/Labels')
local Aliases = require('Module:WorkInfoBox/Data/Aliases')
----------------------------------------------------------
-- Helpers
----------------------------------------------------------
local function norm(value)
if not value then
return nil
end
value = tostring(value)
value = mw.text.trim(value)
if value == '' then
return nil
end
return value
end
local function firstArg(args, field)
local value = norm(args[field])
if value then
return value
end
local alias = Aliases[field]
if alias then
for _, name in ipairs(alias) do
value = norm(args[name])
if value then
return value
end
end
end
return nil
end
----------------------------------------------------------
-- Rendering
----------------------------------------------------------
local function addRow(tbl, label, value)
if not value then
return
end
local row = tbl:tag('tr')
row:tag('th')
:addClass('infobox-label')
:wikitext(label)
row:tag('td')
:addClass('infobox-data')
:wikitext(value)
end
local function render(frame)
local args = getArgs(frame)
local kind = firstArg(args, 'type') or 'default'
local layout = Layouts[kind] or Layouts.default
local root = html.create('table')
:addClass('infobox')
------------------------------------------------------
-- Temporary
-- (Header, image and sections will be added later)
------------------------------------------------------
for _, section in ipairs(layout) do
for _, field in ipairs(section.fields) do
local value = firstArg(args, field)
if value then
local info = Fields[field]
if info then
addRow(root, info.label, value)
end
end
end
end
return tostring(root)
end
----------------------------------------------------------
function p.main(frame)
return render(frame)
end
return p