require('strict')
local getArgs = require('Module:Arguments').getArgs
local p = {}
local function buildSidebarColumn(builder, args, columnCode)
local columnAlias = mw.text.split(args[columnCode..'_alias'], '%s*,%s*')
local builder = builder:tag('table')
:addClass('mw-collapsible')
:attr('cellpadding', '3')
:attr('cellspacing', '0')
:css('width', '100%')
local state
for _, v in ipairs(columnAlias) do
if args[v] == 'expanded' then
state = 'mw-uncollapsed'
break
elseif args[v] == 'collapsed' then
state = 'mw-collapsed'
break
end
end
if state then
builder:addClass(state)
elseif args.all == 'expanded' then
builder:addClass('mw-uncollapsed')
else
builder:addClass('mw-collapsed')
end
builder:tag('tr'):tag('th')
:attr('colspan', '2')
:css('text-align', 'left')
:css('border-top', '1px solid ' .. args.borderColor)
:css('background-color', args.backgroundColor)
:wikitext(args[columnCode])
for i = 1, 10 do
local itemCode, itemTalkCode
itemCode = columnCode .. i
itemTalkCode = itemCode .. '_talk'
if args[itemCode] then
local builder = builder:tag('tr')
builder:tag('td'):wikitext(args[itemCode])
builder:tag('td'):css('width', '20%'):wikitext(args[itemTalkCode] or '')
for j = 97, 106 do
local subItemCode, subItemTalkCode
subItemCode = itemCode .. string.char(j)
subItemTalkCode = subItemCode .. '_talk'
if args[subItemCode] then
local builder = builder:tag('tr')
builder:tag('td'):css('text-indent', '1em'):wikitext(args[subItemCode])
builder:tag('td'):css('width', '20%'):wikitext(args[subItemTalkCode] or '')
end
end
end
end
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
local ret = mw.html.create('div')
:css('float', 'right')
:css('margin', '0 0 1em 1em')
:css('width', '200px')
:css('font-size', '88%')
-- Shortcut
if args[1] then
local shortcut = ret:tag('table')
:addClass('shortcutbox')
:attr('cellpadding', '0')
:attr('cellspacing', '0')
:css('background-color', 'var(--background-color-neutral-subtle,#F9F9F9)')
:css('border', '1px solid #aaa')
:css('width', '100%')
:css('margin-bottom', '0.3em')
:css('color', 'inherit')
shortcut:tag('tr'):tag('td')
:css('font-size', 'small')
:css('text-align', 'center')
:css('font-weight', 'bold')
:wikitext('[[Wikipedia:捷徑|-{zh-cn:快捷方式; zh-tw:捷徑;}-]]')
:wikitext('<span class="plainlinks" style="margin-left: 0.5em;">[' .. tostring(mw.uri.fullUrl(args[1],'redirect=no')) .. ' ' .. args[1] .. ']</span>')
end
-- Archive
if args.archive then
local archive = ret:tag('table')
:attr('cellpadding', '0')
:attr('cellspacing', '0')
:css('background-color', '#F9F9F9')
:css('border', '1px solid #aaa')
:css('border-collapse', 'collapse')
:css('width', '100%')
:css('margin-bottom', '0.3em')
archive:tag('tr'):css('font-size', '100%'):tag('th')
:wikitext('[[File:Replacement filing cabinet.svg|40px|center|alt=|link=]]')
:wikitext(args['archive-header'] or '[[Wikipedia:存档|存档]]')
archive:tag('tr'):tag('td')
:wikitext(args.archive)
end
-- Sidebar
local navbar = ret:tag('table')
:addClass(args.class or '')
:attr('cellpadding', '0')
:attr('cellspacing', '0')
:css('background-color', '#F9F9F9')
:css('border', '1px solid ' .. args.borderColor)
:css('border-collapse', 'collapse')
:css('width', '100%')
local header = navbar:tag('tr'):tag('th')
:css('padding', '0px')
:css('border-bottom', '1px solid ' .. args.borderColor)
:attr('colspan', '2')
header = header:tag('table')
:attr('cellpadding', '0')
:attr('cellspacing', '0')
:css('background-color', args.backgroundHighlightColor)
:css('width', '100%')
:css('font-size', '111%')
:css('text-align', 'center')
:tag('tr')
header:tag('td')
:css('width' ,'48px')
:wikitext('[[File:' .. args.icon .. '|30px|link=]]')
header:tag('td')
:wikitext('[[WikiProject:' .. args.project ..'|')
:wikitext('<span style="font-weight: bold; color: ' .. args.textHighlightColor .. ';">')
:wikitext(args.title or args.project .. '專題')
:wikitext('</span>]]')
local columnZero = navbar:tag('tr'):tag('td'):attr('colspan', '2')
columnZero = columnZero:tag('table')
:attr('cellpadding', '3')
:attr('cellspacing', '0')
:css('width', '100%')
:tag('tr')
columnZero:tag('td'):wikitext('[[WikiProject:' .. args.project .. '|-{zh-cn:主页; zh-tw:首頁}-]]')
columnZero:tag('td'):css('width', '20%'):wikitext('[[WikiProject talk:' .. args.project .. '|讨论]]')
for i = 65, 74 do
local columnCode = string.char(i)
if args[columnCode] then
local builder = navbar:tag('tr'):tag('td'):attr('colspan', '2')
buildSidebarColumn(builder, args, columnCode)
end
end
local alsoList = {}
for i = 1, 5 do
local paraLink, paraName
paraLink = 'also' .. i
paraName = 'also' .. i .. '_name'
if args['also' .. i] then
table.insert(alsoList, {link = args[paraLink], name = args[paraName]})
end
end
if #alsoList > 0 then
local also = navbar:tag('tr'):tag('td'):attr('colspan', '2')
:css('border-top', '1px solid ' .. args.borderColor)
:css('border-bottom', '1px solid ' .. args.borderColor)
:css('background-color', args.backgroundColor)
:css('text-align', 'center')
also = also:tag('ol')
:addClass('hlist')
:css('margin', 'auto')
for _, v in ipairs(alsoList) do
also:tag('li')
:wikitext('[[' .. v.link .. '|')
:wikitext('<span style="' .. args.textColor .. ';">')
:wikitext(v.name)
:wikitext('</span>]]')
end
end
local bottom = navbar:tag('tr'):tag('td'):css('text-align', 'center'):attr('colspan', '2')
bottom = bottom:tag('ol')
:addClass('hlist')
:addClass('plainlinks')
:css('font-size', '95%')
:css('margin', 'auto')
bottom:tag('li'):wikitext('[[WikiProject:' .. args.link .. '|-{zh-cn:查看; zh-tw:檢視}-]]')
bottom:tag('li'):wikitext('[[WikiProject talk:' .. args.link .. '|讨论]]')
bottom:tag('li')
:wikitext('[')
:wikitext(mw.getCurrentFrame():callParserFunction('fullurl:WikiProject:' .. args.link, 'action=edit'))
:wikitext(' 编辑]')
bottom:tag('li'):wikitext('[[Special:RecentChangesLinked/WikiProject:' .. args.link .. '|变动]]')
return ret
end
return p