Module:EB1911 contributor table
Appearance
This module depends on the following other modules: |
This module uses TemplateStyles: |
Implements {{EB1911 contributor table/entry}}.
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local TableTools = require('Module:TableTools')
local function _contributor_table_entry(args)
local tr = mw.html.create('tr')
:tag('td'):wikitext(args.initials)
:allDone()
local name_td = tr:tag('td')
name_td:tag('span')
:addClass('wst-eb1911-contributor-name')
:wikitext(args.name)
:done()
if args.description then
name_td:tag('dl'):tag('dd'):wikitext(args.description)
end
local subject_data = {}
for k, v in pairs(args) do
local text = string.match(k, '^(%w*subject)%d+$')
local n = tonumber(string.match(k, '%d+$'))
if text and n then
subject_data[n] = subject_data[n] or {}
subject_data[n][text] = v
end
end
subject_data = TableTools.compressSparseArray(subject_data)
local subject_data_len = #subject_data
for i = 1, subject_data_len do
if not subject_data[i].subject then
subject_data[i] = nil
end
end
subject_data = TableTools.compressSparseArray(subject_data)
if #subject_data > 0 and args.brace then
tr:tag('td'):wikitext(mw.getCurrentFrame():preprocess(args.brace))
elseif #subject_data > 0 then
tr:tag('td')
end
local subject_text = {}
for i, data in ipairs(subject_data) do
local text = {}
local subject = data.subject
local subpage = data.lnksubject or subject
local subsubject = data.subsubject
local cosubject = data.cosubject
if subsubject then
table.insert(text, mw.html.create('b'):wikitext('[[1911 Encyclopædia Britannica/' .. subpage .. '|' .. subject .. ']]:'))
table.insert(text, ' ')
table.insert(text, mw.html.create('i'):wikitext('[[1911 Encyclopædia Britannica/' .. subpage .. '#' .. subsubject .. '|' .. subsubject .. ']]'))
else
table.insert(text, mw.html.create('b'):wikitext('[[1911 Encyclopædia Britannica/' .. subpage .. '|' .. subject .. ']]'))
end
if cosubject then
table.insert(text, ' (')
table.insert(text, mw.html.create('i'):wikitext('in part'))
table.insert(text, ')')
end
table.insert(text, mw.html.create('b'):wikitext((data.pncsubject or ';') .. ' '))
table.insert(subject_text, text)
end
local subject_td = tr:tag('td')
for i, text in ipairs(subject_text) do
for j, t in ipairs(text) do
if i < #subject_text or j < #text then
if type(t) == 'string' then
subject_td:wikitext(t)
else
subject_td:node(t)
end
end
end
end
if yesno(args.endperiod) ~= false then
subject_td:tag('b'):wikitext('.')
end
local freeform = args.freeform or args.freeform1
if freeform then
subject_td:wikitext(freeform)
end
return tostring(tr)
end
function p.contributor_table_entry(frame)
return _contributor_table_entry(getArgs(frame))
end
return p