「モジュール:Navbox/former/sandbox」の版間の差分
表示
< モジュール:Navbox | former
削除された内容 追加された内容
m編集の要約なし |
Navbox with collapsible groupsを修正, 変数をローカル化 |
||
1行目: | 1行目: | ||
p = {} |
local p = {} |
||
--[[ |
--[[ |
||
61行目: | 61行目: | ||
Define Arguments |
Define Arguments |
||
]] |
]] |
||
local args = {} |
|||
local border |
|||
local child, none = false, false |
|||
local collapsible = '' |
|||
local colspan, rowspan = 0, 0 |
|||
local basestyle = '' |
|||
local bdcolor, trborder = '', '' |
|||
local odd, even = 'odd', 'even' |
|||
local list, liststyle = {}, {} |
|||
local group, groupstyle = {}, {} |
|||
local colheader, colheadercolspan, colheaderstyle = {}, {}, {} |
|||
local col, colstyle, colwidth = {}, {}, {} |
|||
local colfooter, colfootercolspan, colfooterstyle = {}, {}, {} |
|||
local abbr, state = {}, {} |
|||
local sect, section = {}, {} |
|||
local secttitlestyle = {} |
|||
local content, contentstyle = {} |
|||
local image, imageleft = {}, {} |
|||
local result = '' --出力用 |
|||
local function defArgs(frame) |
local function defArgs(frame) |
||
--グローバル変数として定義 |
|||
args = require('Module:Arguments').getArgs(frame, {parentOnly = true}) |
args = require('Module:Arguments').getArgs(frame, {parentOnly = true}) |
||
border = args.border or args[1] |
border = args.border or args[1] |
||
69行目: | 90行目: | ||
colspan = 2 + (args.imageleft and 1 or 0) + (args.image and 1 or 0) |
colspan = 2 + (args.imageleft and 1 or 0) + (args.image and 1 or 0) |
||
if args.basestyle then |
if args.basestyle then basestyle = args.basestyle .. ';' end |
||
basestyle = args.basestyle .. ';' |
|||
else |
|||
basestyle = '' |
|||
end |
|||
bdcolor = args.style and string.match(args.style, 'background.-:(.-);') or '#fff' --ボーダー色 |
bdcolor = args.style and string.match(args.style, 'background.-:(.-);') or '#fff' --ボーダー色 |
||
trborder = '<tr style="border-width:2px;border-style:solid none;border-color:' .. bdcolor .. '">' --ボーダーつきtr |
trborder = '<tr style="border-width:2px;border-style:solid none;border-color:' .. bdcolor .. '">' --ボーダーつきtr |
||
local switch = { |
|||
--common |
|||
group, groupstyle = {}, {} |
|||
list = function(num, v) list[num] = '\n' .. v end, |
|||
liststyle = function(num, v) liststyle[num] = v end, |
|||
group = function(num, v) group[num] = v end, |
|||
groupstyle = function(num, v) groupstyle[num] = v end, |
|||
--for with_columns |
|||
colheader = function(num,v) colheader[num] = v end, |
|||
colheadercolspan = function(num,v) colheadercolspan[num] = v end, |
|||
colheaderstyle = function(num,v) colheaderstyle[num] = v end, |
|||
col = function(num,v) col[num] = v end, |
|||
colstyle = function(num,v) colstyle[num] = v end, |
|||
colwidth = function(num,v) colwidth[num] = v end, |
|||
colfooter = function(num,v) colfooter[num] = v end, |
|||
colfootercolspan = function(num,v) colfootercolspan[num] = v end, |
|||
colfooterstyle = function(num,v) colfooterstyle[num] = v end, |
|||
--for with_collapsible_groups |
|||
abbr = function(num, v) abbr[num] = v end, |
|||
state = function(num, v) state[num] = v end, |
|||
sect = function(num, v) group[num] = v end, |
|||
section = function(num, v) group[num] = v end, |
|||
secttitlestyle = function(num, v) groupstyle[num] = v end, |
|||
content = function(num, v) list[num] = '\n' .. v end, |
|||
contentstyle = function(num, v) liststyle[num] = v end, |
|||
image = function(num, v) image[num] = v end, |
|||
imageleft = function(num, v) imageleft[num] = v end, |
|||
} |
|||
for k, v in pairs(args) do |
for k, v in pairs(args) do |
||
local str1, num, str2 = string.match(k, '(%D+)(%d+)(%D*)') |
|||
str1, num, str2 = str1 or '', tonumber(num), str2 or '' |
|||
list[tonumber(string.match(k, 'list(%d+)$'))] = '\n' .. v |
|||
if switch[str1 .. str2] and num then switch[str1 .. str2](num, v) end |
|||
v = nil |
|||
elseif string.match(k, 'list%d+style') then |
|||
liststyle[tonumber(string.match(k, 'list(%d+)style'))] = v |
|||
v = nil |
|||
elseif string.match(k, 'group%d+$') then |
|||
group[tonumber(string.match(k, 'group(%d+)$'))] = v |
|||
v = nil |
|||
elseif string.match(k, 'group%d+style') then |
|||
groupstyle[tonumber(string.match(k, 'group(%d+)style'))] = v |
|||
v = nil |
|||
end |
|||
end |
end |
||
rowspan = (#list - 1) * 2 - 1 |
rowspan = (#list - 1) * 2 - 1 |
||
odd, even = 'odd', 'even' |
|||
result = '' --出力用 |
|||
end |
end |
||
263行目: | 291行目: | ||
function p.with_columns(frame) |
function p.with_columns(frame) |
||
defArgs(frame) |
defArgs(frame) |
||
local colheader, colheadercolspan, colheaderstyle = {}, {}, {} |
|||
local col, colstyle, colwidth = {}, {}, {} |
|||
local colfooter, colfootercolspan, colfooterstyle = {}, {}, {} |
|||
for k, v in pairs(args) do |
|||
if string.match(k, 'col%d+header$') then |
|||
colheader[tonumber(string.match(k, 'col(%d+)header$'))] = v |
|||
elseif string.match(k, 'col%d+headercolspan') then |
|||
colheadercolspan[tonumber(string.match(k, 'col(%d+)headercolspan'))] = v |
|||
elseif string.match(k, 'col%d+headerstyle') then |
|||
colheaderstyle[tonumber(string.match(k, 'col(%d+)headerstyle'))] = v |
|||
elseif string.match(k, 'col%d+$') then |
|||
col[tonumber(string.match(k, 'col(%d+)$'))] = v |
|||
elseif string.match(k, 'col%d+style') then |
|||
colstyle[tonumber(string.match(k, 'col(%d+)style'))] = v |
|||
elseif string.match(k, 'col%d+width') then |
|||
colwidth[tonumber(string.match(k, 'col(%d+)width'))] = v |
|||
end |
|||
end |
|||
top() |
top() |
||
if args.title then title() end |
if args.title then title() end |
||
336行目: | 346行目: | ||
function p.with_collapsible_groups(frame) |
function p.with_collapsible_groups(frame) |
||
defArgs(frame) |
defArgs(frame) |
||
local abbr, state = {}, {} |
|||
local sect, section = {}, {} |
|||
local secttitlestyle = {} |
|||
local content, contentstyle = {} |
|||
local image, imageleft = {}, {} |
|||
for k, v in pairs(args) do |
|||
if string.match(k, 'abbr%d+$') then |
|||
abbr[tonumber(string.match(k, 'abbr(%d+)$'))] = v |
|||
elseif string.match(k, 'state%d+$') then |
|||
state[tonumber(string.match(k, 'state(%d+)$'))] = v |
|||
elseif string.match(k, 'sect%d+$') then |
|||
group[tonumber(string.match(k, 'sect(%d+)$'))] = v |
|||
elseif string.match(k, 'section%d+') then |
|||
group[tonumber(string.match(k, 'section(%d+)'))] = v |
|||
elseif string.match(k, 'sect%dtitlestyle') then |
|||
groupstyle[tonumber(string.match(k, 'sect(%d+)titlestyle'))] = v |
|||
elseif string.match(k, 'content%d+$') then |
|||
list[tonumber(string.match(k, 'content(%d+)$'))] = v |
|||
elseif string.match(k, 'content%d+style') then |
|||
liststyle[tonumber(string.match(k, 'content(%d+)style'))] = v |
|||
elseif string.match(k, 'image%d+') then |
|||
image[tonumber(string.match(k, 'image(%d+)'))] = v |
|||
elseif string.match(k, 'imageleft%d+') then |
|||
imageleft[tonumber(string.match(k, 'imageleft(%d+)'))] = v |
|||
end |
|||
end |
|||
top() |
top() |
||
if args.title then title() end |
if args.title then title() end |
||
if args.above then above() end |
if args.above then above() end |
||
local i = 1 |
|||
local function funcList() |
local function funcList() |
||
collapsible = (args.selected == abbr[i] or args.selected == group[i]) and '' or 'collapsible ' |
local collapsible = (args.selected == abbr[i] or args.selected == group[i]) and '' or 'collapsible ' |
||
args.name = nil |
args.name = nil |
||
args.state = collapsible .. (state[i] or 'collapsed') |
args.state = collapsible .. (state[i] or 'collapsed') |
||
379行目: | 364行目: | ||
result = result .. '<td style="' .. (args.groupwidth and '' or 'width:100%;') .. 'padding:0;' .. (args.liststyle or '') .. ';' .. (odd == 'odd' and (args.oddstyle or '') or (args.evenstyle or '')) .. ';' .. (liststyle[i] or '') .. '" class="navbox-list navbox-' .. (args.evenodd == 'swap' and even or args.evenodd or odd) .. ' ' .. (args.listclass or '') .. '"><div>' |
result = result .. '<td style="' .. (args.groupwidth and '' or 'width:100%;') .. 'padding:0;' .. (args.liststyle or '') .. ';' .. (odd == 'odd' and (args.oddstyle or '') or (args.evenstyle or '')) .. ';' .. (liststyle[i] or '') .. '" class="navbox-list navbox-' .. (args.evenodd == 'swap' and even or args.evenodd or odd) .. ' ' .. (args.listclass or '') .. '"><div>' |
||
if args.title then |
if args.title then |
||
if i ~= 1 then list[1], list[i] = list[i], nil end |
|||
none = true |
none = true |
||
top() |
top() |
||
392行目: | 376行目: | ||
--i = 1 |
--i = 1 |
||
i = 1 |
|||
result = result .. trborder |
result = result .. trborder |
||
if args.imageleft then |
if args.imageleft then |
||
406行目: | 389行目: | ||
result = result .. trborder |
result = result .. trborder |
||
i = j |
i = j |
||
list[1], list[i] = list[i], nil |
|||
funcList() |
funcList() |
||
end |
end |
2016年8月28日 (日) 04:58時点における版
これはモジュール:Navbox/former (差分)のモジュール・サンドボックスページです。 |
このLuaモジュールは440,000以上のページで使われています。 余計な混乱やサーバーへの負荷を避けるために、どんな変更でも最初はモジュールのサンドボックス・サブページ、テストケース・サブページで試すべきです。そうすれば、試した変更を1度の編集でこのモジュールに加えることができます。しかし、最初にあなたの提案した変更を、この項目のノートで議論するようにお願いします。 |
このモジュールは保護されています。このモジュールは非常に多くのページで使用されています。荒らしまたは過失によって多くのページが影響を受け、また些細な編集でもサーバーに多大な負荷をかけるため、編集保護されています。 |
{{Navbox}}を実装するモジュールです。詳しい使い方は当該テンプレートの説明文を参照してください。
local p = {}
--[[
Template:Tnavbar
]]
function p.tnavbar(frame)
local args = frame.args
if not args[1] then return '' end
local function tf(x)
return x == '1' and true or false
end
args.plain = tf(args.plain)
args.div = tf(args.div)
args.nodiv = tf(args.nodiv)
args.mini = tf(args.mini)
args.viewplain = tf(args.viewplain)
if args.miniv == '1' then args.mini, args.viewplain = true, true end
args.fontstyle = args.fontcolor ~= '' and ((args.fontstyle or '') .. ';color:' .. args.fontcolor .. ';') or args.fontstyle or ''
local r = {open = '<div class="noprint plainlinks navbar hlist" style="white-space:nowrap;font-size:60%;font-weight:normal;', content = '', close = '</div>'} --出力用
if args.nodiv then
r.open = r.open .. 'display:inline;padding:0 0.5em;'
else
r.open = r.open .. 'background-color:transparent;padding:0;color:#000;'
end
r.open = r.open .. args.fontstyle .. (args.style or '') .. '">'
if not (args.plain or args.mini or args.viewplain) then
r.content = '<span style="font-size:125%;">このテンプレートを: </span>'
end
local disp = args.mini and {'表', '話', '編', '歴'} or {'表示', 'ノート', '編集', '履歴'}
local ns = {'Template:', 'Template‐ノート:', 'Template:', 'Template:'}
local query = {nil, nil, 'action=edit', 'action=history'}
local title = {'このテンプレートを表示します', 'このテンプレートのノートを表示します', 'このテンプレートを編集します。保存の前にプレビューを忘れずに。', 'このテンプレートの過去の版を表示します'}
local color = {'', 'color:#002bb8;', 'color:#002bb8;', 'color:#002bb8;'}
local i = 0
local i_end = args.viewplain and 1 or 4
r.content = r.content .. '<ul style="display:inline;">'
for i = 1, i_end do
local l = {open = '', link = '', close = ''}
if query[i] then
l.open = '['
l.link = mw.uri.decode(tostring(mw.uri.canonicalUrl(ns[i] .. args[1], query[i]))) .. ' '
l.close = ']'
else
l.open = '[['
l.link = ns[i] .. args[1] .. '|'
l.close = ']]'
end
r.content = r.content .. '<li>' .. l.open .. l.link .. '<span title="' .. title[i] .. '" style="font-size:125%;' .. color[i] .. args.fontstyle .. '">' .. disp[i] .. '</span>' .. l.close
end
r.content = r.content .. '</ul>'
return r.open .. r.content .. r.close
end
--[[
Define Arguments
]]
local args = {}
local border
local child, none = false, false
local collapsible = ''
local colspan, rowspan = 0, 0
local basestyle = ''
local bdcolor, trborder = '', ''
local odd, even = 'odd', 'even'
local list, liststyle = {}, {}
local group, groupstyle = {}, {}
local colheader, colheadercolspan, colheaderstyle = {}, {}, {}
local col, colstyle, colwidth = {}, {}, {}
local colfooter, colfootercolspan, colfooterstyle = {}, {}, {}
local abbr, state = {}, {}
local sect, section = {}, {}
local secttitlestyle = {}
local content, contentstyle = {}
local image, imageleft = {}, {}
local result = '' --出力用
local function defArgs(frame)
args = require('Module:Arguments').getArgs(frame, {parentOnly = true})
border = args.border or args[1]
child, none = (border == 'subgroup' or border == 'child'), (border == 'none')
collapsible = (args.state == 'plain' or args.state == 'off') and '' or 'collapsible '
colspan = 2 + (args.imageleft and 1 or 0) + (args.image and 1 or 0)
if args.basestyle then basestyle = args.basestyle .. ';' end
bdcolor = args.style and string.match(args.style, 'background.-:(.-);') or '#fff' --ボーダー色
trborder = '<tr style="border-width:2px;border-style:solid none;border-color:' .. bdcolor .. '">' --ボーダーつきtr
local switch = {
--common
list = function(num, v) list[num] = '\n' .. v end,
liststyle = function(num, v) liststyle[num] = v end,
group = function(num, v) group[num] = v end,
groupstyle = function(num, v) groupstyle[num] = v end,
--for with_columns
colheader = function(num,v) colheader[num] = v end,
colheadercolspan = function(num,v) colheadercolspan[num] = v end,
colheaderstyle = function(num,v) colheaderstyle[num] = v end,
col = function(num,v) col[num] = v end,
colstyle = function(num,v) colstyle[num] = v end,
colwidth = function(num,v) colwidth[num] = v end,
colfooter = function(num,v) colfooter[num] = v end,
colfootercolspan = function(num,v) colfootercolspan[num] = v end,
colfooterstyle = function(num,v) colfooterstyle[num] = v end,
--for with_collapsible_groups
abbr = function(num, v) abbr[num] = v end,
state = function(num, v) state[num] = v end,
sect = function(num, v) group[num] = v end,
section = function(num, v) group[num] = v end,
secttitlestyle = function(num, v) groupstyle[num] = v end,
content = function(num, v) list[num] = '\n' .. v end,
contentstyle = function(num, v) liststyle[num] = v end,
image = function(num, v) image[num] = v end,
imageleft = function(num, v) imageleft[num] = v end,
}
for k, v in pairs(args) do
local str1, num, str2 = string.match(k, '(%D+)(%d+)(%D*)')
str1, num, str2 = str1 or '', tonumber(num), str2 or ''
if switch[str1 .. str2] and num then switch[str1 .. str2](num, v) end
end
rowspan = (#list - 1) * 2 - 1
end
--[[
top
]]
local function top()
if child then
result = result .. '</div>'
elseif not none then
result = result .. '<table class="navbox" style="border-collapse:collapse;' .. (args.bodystyle or '') .. ';' .. (args.style or '') .. '"><tr><td>'
end
result = result .. '<table class="' .. (args.nowraplinks or '') .. (args.bodyclass or '')
if args.title then
result = result .. ' ' .. collapsible .. (args.state or ' autocollapse')
end
if child or none then
result = result .. ' navbox-subgroup" style="margin:-2px 0;' .. (args.bodystyle or '') .. (args.style or '')
else
result = result .. '" style="background:transparent;color:inherit;border:1px solid ' .. bdcolor
end
result = result .. ';width:100%;border-spacing:0;border-collapse:collapse;' .. (args.innerstyle or '') .. '">'
end
--[[
title and navbar
]]
local function title()
result = result .. trborder
if args.titlegroup then
result = result .. '<td class="navbox-group ' .. (args.titlegroupclass or '') .. '" style="' .. basestyle .. (args.groupstyle or '') .. ';' .. (args.titlegroupstyle or '') .. '">' .. args.titlegroup .. '</td><th style="border-left:2px solid #fdfdfd;width:100%;'
else
result = result .. '<th style="'
end
result = result .. basestyle .. (args.titlestyle or '') .. '" colspan=' .. (colspan - (args.titlegroup and 1 or 0)) .. ' class="navbox-title">'
if (args.navbar == 'plain' or args.navbar == 'off') or (not args.name and (child or none)) then
if args.navbar == 'off' then
if args.state == 'plain' then
result = result .. '<div style="float:right;width:6em;"> </div>'
end
else
if args.state ~= 'plain' then
result = result .. '<div style="float:left;width:6em;text-align:left;"> </div>'
end
end
else
local tbl = {args = {args.name, mini = '1', fontstyle = basestyle .. (args.titlestyle or '') .. ';border:none;', fontcolor = ''}}
result = result .. '<div style="float:left;width6em;text-align:left;">' .. p.tnavbar(tbl) .. '</div>'
if args.state == 'plain' then
result = result .. '<div style="float:right;width:6em;"> </div>'
end
end
if args.titleclass then
args.titleclass = ' class="' .. args.titleclass .. '"'
else
args.titleclass = ''
end
result = result .. '<span ' .. args.titleclass .. ' style="font-size:' .. ((child or none) and '100' or '110') .. '%;">' .. args.title .. '</span></th></tr>'
end
--[[
above
]]
local function above()
result = result .. trborder .. '<td class="navbox-abovebelow ' .. (args.aboveclass or '') .. '" style="' .. basestyle .. (args.abovestyle or '') .. '" colspan=' .. colspan .. '>\n' .. args.above .. '</td></tr>'
end
--[[
body
]]
--first group/list and images
local function body1()
result = result .. trborder
if args.imageleft then
result = result .. '<td style="width:0;padding:0 2px 0 0;' .. (args.imageleftstyle or '') .. '" rowspan=' .. rowspan .. '>' .. args.imageleft .. '</td>'
end
if group[1] then
result = result .. '<td class="navbox-group ' .. (args.groupclass or '') .. '" style="border-right:2px solid ' .. bdcolor .. ';' .. basestyle .. (args.groupwidth and ('width:' .. args.groupwidth .. ';') or '') .. (args.groupstyle or '') .. ';' .. (groupstyle[1] or '') .. '">' .. group[1] .. '</td><td style="text-align:left;'
else
result = result .. '<td colspan=2 style="'
end
result = result .. (args.groupwidth and '' or 'width:100%;') .. 'padding:0;' .. (args.liststyle or '') .. ';' .. (odd == 'odd' and (args.oddstyle or '') or (args.evenstyle or '')) .. ';' .. (liststyle[1] or '') .. '" class="navbox-list navbox-' .. (args.evenodd == 'swap' and even or args.evenodd or odd) .. ' ' .. (args.listclass or '') .. '"><div style="padding:' .. (args.list1padding or args.listpadding or '0 0.25em') .. '">' .. list[1] .. '</div></td>'
if args.image then
result = result .. '<td style="width:0%;padding:0 0 0 2px;' .. (args.imagestyle or '') .. '" rowspan=' .. rowspan .. '>' .. args.image .. '</td>'
end
result = result .. '</tr>'
end
--remaining groups/lists
local function body2()
list[1] = nil
for i in pairs(list) do
odd, even = even, odd
result = result .. trborder
if group[i] then
result = result .. '<td class="navbox-group ' .. (args.groupclass or '') .. '" style="border-right:2px solid ' .. bdcolor .. ';' .. basestyle .. (args.groupwidth and ('width:' .. args.groupwidth .. ';') or '') .. (args.groupstyle or '') .. ';' .. (groupstyle[i] or '') .. '">' .. group[i] .. '</td><td style="text-align:left;'
else
result = result .. '<td colspan=2 style="'
end
result = result .. (args.groupwidth and '' or 'width:100%;') .. 'padding:0;' .. (args.liststyle or '') .. ';' .. (odd == 'odd' and (args.oddstyle or '') or (args.evenstyle or '')) .. ';' .. (liststyle[i] or '') .. '" class="navbox-list navbox-' .. (args.evenodd == 'swap' and even or args.evenodd or odd) .. ' ' .. (args.listclass or '') .. '"><div style="padding:' .. (args.listpadding or '0 0.25em') .. '">' .. list[i] .. '</div></td></tr>'
end
end
--[[
below
]]
local function below()
result = result .. trborder .. '<td class="navbox-abovebelow ' .. (args.belowclass or '') .. '" style="' .. basestyle .. (args.belowstyle or '') .. '" colspan=' .. colspan .. '>\n' .. args.below .. '</td></tr>'
end
--[[
close
]]
local function close()
result = result .. '</table>'
if child then
result = result .. '<div>'
elseif not none then
result = result .. '</table>'
end
end
--[[
Template:Navbox
]]
function p.navbox(frame)
defArgs(frame)
top()
if args.title then title() end
if args.above then above() end
if list[1] then body1() end
body2()
if args.below then below() end
close()
return result
end
--[[
Template:Navbox subgroup
]]
function p.subgroup(frame)
defArgs(frame)
if not border then child = true end
args.groupstyle = 'padding:' .. (args.grouppadding or '0 0.75em') .. ';' .. (args.groupstyle or '')
top()
if args.title then title() end
if args.above then above() end
if list[1] then body1() end
body2()
if args.below then below() end
close()
return result
end
--[[
Template:Navbox with columns
]]
function p.with_columns(frame)
defArgs(frame)
top()
if args.title then title() end
if args.above then above() end
local cols = '</div><table class="navbox-columns-table" style="border-spacing:0;border-collapse:collapse;text-align:left;' .. ((colheader[1] or args.fullwidth) and 'width:100%;' or 'margin:0 auto;') .. (args.coltablestyle or '') .. '">'
--Header row
if colheader[1] then
cols = cols .. '<tr class="navbox-abovebelow" style="border-bottom:2px solid #fdfdfd;font-weight:bold;' .. (args.colheaderstyle or '') .. '"><td colspan=' .. (colheadercolspan[1] or '1') .. ' style="border-right:2px solid #fdfdfd;' .. (colheaderstyle[1] or '') .. '">' .. colheader[1] .. '</td>'
colheader[1] = nil
for i in pairs(colheader) do
cols = cols .. '<td colspan=' .. (colheadercolspan[i] or '1') .. ' style="border-left:2px solid #fdfdfd;' .. (colheaderstyle[i] or '') .. '">' .. colheader[i] .. '</td>'
end
cols = cols .. '</tr>'
end
--Main columns
if col[1] then
cols = cols .. '<tr style="vertical-align:top;' .. (args.colstyle or '') .. '">'
if colheader[1] or colfooter[1] or args.fullwidth then
if args.padding then args.padding = string.gsub(args.padding, '^0[ep]?[mx]?%?;?', 'off') end
if args.padding == 'off' then
cols = cols .. '<td style="width:' .. (args.padding or '5em;') .. '"> </td>'
end
end
cols = cols .. '<td style="border-right:2px solid #fdfdfd;padding:0;' .. (args.oddcolstyle or '') .. ';' .. (colstyle[1] or '') .. ';width:' .. (colwidth[1] or args.colwidth or '10em;') .. '"><div>' .. col[1] .. '</div></td>'
col[1] = nil
for i in pairs(col) do
cols = cols .. '<td style="border-left:2px solid #fdfdfd;padding:0;' .. (args.oddcolstyle or '') .. ';' .. (colstyle[i] or '') .. ';width:' .. (colwidth[i] or args.colwidth or '10em;') .. '"><div>' .. col[i] .. '</div></td>'
args.oddcolstyle, args.evencolstyle = args.evencolstyle, args.oddcolstyle
end
cols = cols .. '</tr>'
end
--Footer row
if colfooter[1] then
cols = cols .. '<tr class="navbox-abovebelow" style="font-weight:bold;' .. (args.colfooterstyle or '') .. '"><td colspan=' .. (colfootercolspan[1] or '1') .. ' style="border-right:2px solid #fdfdfd;' .. (colfooterstyle[1] or '') .. '">' .. colfooter[1] .. '</td>'
colfooter[1] = nil
for i in pairs(colfooter) do
cols = cols .. '<td colspan=' .. (colfootercolspan[i] or '1') .. ' style="border-left:2px solid #fdfdfd;' .. colfooterstyle[i] .. '">' .. colfooter[i] .. '</td>'
end
cols = cols .. '</tr>'
end
cols = cols .. '</table><div>'
table.insert(list, 1, cols)
body1()
body2()
if args.below then below() end
close()
return result
end
--[[
Template:Navbox with collapsible groups
]]
function p.with_collapsible_groups(frame)
defArgs(frame)
top()
if args.title then title() end
if args.above then above() end
local i = 1
local function funcList()
local collapsible = (args.selected == abbr[i] or args.selected == group[i]) and '' or 'collapsible '
args.name = nil
args.state = collapsible .. (state[i] or 'collapsed')
args.titlestyle = basestyle .. (args.groupstyle or '') .. ';' .. (args.secttitlestyle or '') .. ';' .. (groupstyle[i] or '')
args.liststyle = (args.liststyle or '') .. ';' .. (args.contentstyle or '') .. ';' .. (liststyle[i] or '')
args.title, group[i] = group[i], nil
args.image = image[i]
args.imageleft = imageleft[i]
colspan = 2 + (args.imageleft and 1 or 0) + (args.image and 1 or 0)
rowspan = 1
result = result .. '<td style="' .. (args.groupwidth and '' or 'width:100%;') .. 'padding:0;' .. (args.liststyle or '') .. ';' .. (odd == 'odd' and (args.oddstyle or '') or (args.evenstyle or '')) .. ';' .. (liststyle[i] or '') .. '" class="navbox-list navbox-' .. (args.evenodd == 'swap' and even or args.evenodd or odd) .. ' ' .. (args.listclass or '') .. '"><div>'
if args.title then
none = true
top()
title()
body1()
close()
else
result = result .. (list[i] or '')
end
result = result .. '</div></td></tr>'
end
--i = 1
result = result .. trborder
if args.imageleft then
result = result .. '<td style="width:0;padding:0 2px 0 0;' .. (args.imageleftstyle or '') .. '" rowspan=' .. rowspan .. '>' .. args.imageleft .. '</td>'
end
funcList()
if args.image then
result = result .. '<td style="width:0%;padding:0 0 0 2px;' .. (args.imagestyle or '') .. '" rowspan=' .. rowspan .. '>' .. args.image .. '</td>'
end
list[1] = nil
--i > 2
for j in pairs(list) do
result = result .. trborder
i = j
list[1], list[i] = list[i], nil
funcList()
end
if args.below then below() end
child, none = (border == 'subgroup' or border == 'child'), (border == 'none') --再定義
close()
return result
end
--[[
Template:NavboxYears
Template:NavboxYears2
]]
local function calc_years(args, fmtLink)
local numtab = tonumber(args.tab) or 0
local numstart = tonumber(args.start)
local numend = tonumber(args['end'])
local numstep = tonumber(args.step) or 1
if numstart and numend then
if numtab > 0 then
for i = 2, numtab + 1 do
args[i] = nil
end
end
local numD = numend - numstart + 1
for i = 1, numD, numstep do
args[i + numtab + 1] = numstart + i - 1
end
end
local result = '<table style="width:100%;border-spacing:0;border-collapse:collapse;text-align:center;">'
local h = 1
repeat
h = h + 1
result = result .. '<tr>'
for i = 2, 11 do
result = result .. '<td style="width:10%;">'
if (tonumber(args[i]) or -1) > 0 then
result = result .. ('[[' .. fmtLink(args[1], args[i]) .. '|' .. args[i] .. ']]')
else
result = result .. (args[i] or '')
end
result = result .. '</td>'
args[i], args[i + 10] = args[i + 10], args[i + h * 10]
end
result = result .. '</tr>'
until not args[2]
result = result .. '</table>'
return result
end
local function years(frame, fmtLink)
defArgs(frame)
if args.var then fmtLink = function(str, num) return str:gsub(args.var, num) end end
if args.name then
args.style = 'width:' .. (args.width or '38em') .. ';' .. (args.style or '')
top()
if args.title then title() end
if args.above then above() end
if not list[1] and args[1] then list[1] = calc_years(args, fmtLink) end
if list[1] then body1() end
body2()
if args.below then below() end
close()
return result
else
return calc_years(args, fmtLink)
end
end
function p.years(frame)
local fmtLink = function(str, num) return str .. num end
return years(frame, fmtLink)
end
function p.years2(frame)
local fmtLink = function(str, num) return num .. str end
return years(frame, fmtLink)
end
return p