「テンプレート:元首」の版間の差分

提供:経済屋
ナビゲーションに移動 検索に移動
(ページの作成:「{{元首 | 人名 = | 各国語表記 = | 画像 = | 画像サイズ = | キャプション = | 国名 = | 代数 = | 職名 = | 就任日 = | 退任日 = | 副大統領 = | 副大統領職 = | 元首 = | 元首職 = | 首相 = | 内閣 = <!-- ↓省略可↓ --> | 国名2 = | 代数2 = | 職名2 = | 就任日2 = | 退任日2 = | 副大統領2 = | 副大統領職2 = | 元首2 = | 元首職2 = | 首相2 = | 内閣2 = | 国名3 = | 代数3…」)
 
編集の要約なし
1行目: 1行目:
{{元首
local p = {}
| 人名 =  
 
| 各国語表記 =  
function p.main(frame)
| 画像 =  
local args = require('Module:Arguments').getArgs(frame, {parentOnly = true}) --引数取得
| 画像サイズ =  
local child = (args.child == 'yes')
| キャプション =  
local subbox = (args.subbox == 'yes')
| 国名 =  
local h = {subheader = {}, image = {{}}} --ヘッダー部(subheader, image)テーブル
| 代数 =  
local body, sbody = {}, {} --本体部テーブル, ソート済み本体部テーブル
| 職名 =  
local link = args.tnavbar or args.name --(フッター部)テンプレート名
| 就任日 =  
local result = '' --結果格納用
| 退任日 =  
| 副大統領 =  
--[[
| 副大統領職 =  
subheader, image用引数振り分け
| 元首 =  
]]
| 元首職 =  
local function args2tbl(str, k, v)
| 首相 =  
local num = string.match(k, '%d*$')
| 内閣 =  
num = (num == '') and 1 or tonumber(num)
<!-- ↓省略可↓ -->
h[str][num] = h[str][num] or {}
| 国名2 =  
if k == str then
| 代数2 =  
h[str][1][1] = v
| 職名2 =  
elseif string.match(k, str .. '%d+') then
| 就任日2 =  
h[str][num][1] = v
| 退任日2 =  
elseif string.find(k, 'style') then
| 副大統領2 =  
if string.match(k, 'style$') then
| 副大統領職2 =  
h[str]['style'] = v
| 元首2 =  
else
| 元首職2 =  
h[str][num]['style'] = v
| 首相2 =  
end
| 内閣2 =  
elseif string.find(k, 'rowclass') then
| 国名3 =  
if string.match(k, 'rowclass$') then
| 代数3 =  
h[str]['rowclass'] = v
| 職名3 =  
else
| 就任日3 =  
h[str][num]['rowclass'] = v
| 退任日3 =  
end
| 副大統領3 =  
elseif string.match(k, 'class$') then
| 副大統領職3 =  
h[str]['class'] = v
| 元首3 =  
end
| 元首職3 =  
end
| 首相3 =  
| 内閣3 =  
--[[
| 国名4 =
引数振り分け
| 代数4 =
]]
| 職名4 =
for k, v in pairs(args) do
| 就任日4 =  
--subheader
| 退任日4 =  
if string.find(k, 'subheader') then
| 副大統領4 =  
args2tbl('subheader', k, v)
| 副大統領職4 =  
--image
| 元首4 =
elseif string.find(k, 'image') then
| 元首職4 =
args2tbl('image', k, v)
| 首相4 =
elseif string.find(k, 'caption') then
| 内閣4 =
if string.match(k, 'caption$') then
| 国名5 =  
h['image'][1]['caption'] = '<div style="' .. (args.captionstyle or '') .. '">' .. v .. '</div>'
| 代数5 =
elseif string.match(k, 'caption%d+') then
| 職名5 =
local num = tonumber(string.match(k, '%d*$'))
| 就任日5 =  
h['image'][num] = h['image'][num] or {}
| 退任日5 =
h['image'][num]['caption'] = '<div style="' .. (args.captionstyle or '') .. '">' .. v .. '</div>'
| 副大統領5 =
end
| 副大統領職5 = 
--その他(本体部)
| 元首5 =
elseif string.match(k, '^%D+%d+$') then
| 元首職5 =  
local str, num = string.match(k, '^(%D+)(%d+)$')
| 首相5 =
num = tonumber(num)
| 内閣5 =
if not body[num] then
<!-- ↑省略可↑ -->
local OddOrEven = (num % 2 ~= 0) and 'odd' or 'even'
| 出生日 =  
body[num] = {
| 生地 =  
num,
| 死亡日 =
headerstyle = (args.headerstyle or '') .. (args[OddOrEven .. 'headerstyle'] or ''),
| 没地 =
labelstyle = (args.labelstyle or '') .. (args[OddOrEven .. 'labelstyle'] or ''),
| 出身校 =
datastyle = (args.datastyle or '') .. (args[OddOrEven .. 'datastyle'] or '')
| 配偶者 =
}
| 子女 = 
end
| 親族 =
body[num][str] = (body[num][str] or '') .. v
| 宗教 =
end
| 政党 =
end
| 受賞 =
| サイン =
--[[
}}
Template:Infobox/row
]]
local function row(header, headerstyle, label, labelstyle, data, datastyle, rowstyle, class, rowclass, id, itemprop, rowitemprop, itemtype, rowitemtype, itemref, rowitemref)
local result =''
if header then
result = '<tr style="' .. (rowstyle or '') ..'"' .. (rowitemtype and (' itemscope itemtype="' .. rowitemtype .. '"') or '') .. ' itemref="' .. (rowitemref or '') .. '"><th scope="col" colspan="2" class="' .. (class or '') .. '" style="text-align:center; ' .. (headerstyle or '') .. '">' .. header .. '</th></tr>'
elseif data then
result = '<tr class="' .. (rowclass or '') .. '" style="' .. (rowstyle or '') .. '" itemprop="' .. (rowitemprop or '') .. '"' .. (rowitemtype and (' itemscope itemtype="' .. rowitemtype .. '"') or '') .. ' itemref="' .. (rowitemref or '') .. '">'
if label then
result = result .. '<th scope="row" style="text-align:left; white-space:nowrap; ' .. (labelstyle or '') .. '">' .. label .. '</th><td class="' .. (class or '') .. '" style="' .. (datastyle or '') .. '" itemprop="' .. (itemprop or '') .. '"' .. (itemtype and (' itemscope itemtype="' .. itemtype .. '"') or '') .. ' itemref="' .. (itemref or '') .. '">'
else
result = result .. '<td colspan="2" class="' .. (class or '') .. '" style="text-align:center; ' .. (datastyle or '') .. '" itemprop="' .. (itemprop or '') .. '"' .. (itemtype and (' itemscope itemtype="' .. rowitemtype .. '"') or '') .. ' itemref="' .. (itemref or '') .. '">'
end
result = result .. '\n' .. data .. '</td></tr>'
end
return result
end
--[[
Template:Infobox
]]
--ヘッダー部
if not child then
--tableタグ
result = '<table class="' .. (subbox and '' or 'infobox ') .. (args.bodyclass or '') .. '" style="' .. (subbox and 'min-width:100%; width:calc(100% + 6px); margin:-3px; ' or 'width:22em; ') .. (args.bodystyle or '') .. '"' .. (args.bodyitemtype and (' itemscope itemtype="' .. args.bodyitemtype .. '"') or '') .. ' itemref="' .. (args.bodyitemref or '') .. '">'
if args.title then
--captionタグ
result = result .. '<caption itemprop="name" class="' .. (args.titleclass or '') .. '" style="' .. (args.titlestyle  or '') .. '">' .. args.title .. '</caption>'
end
if args.above then
result = result .. '<tr><th colspan="2" class="' .. (args.aboveclass or '') .. '" style="text-align:center; font-size:125%; font-weight:bold; ' .. (args.abovestyle or '') .. '" itemprop="' .. (args.aboveitemprop or '') .. '"' .. (args.aboveitemtype and (' itemscope itemtype="' .. args.aboveitemtype .. '"') or '') .. ' itemref="' .. (args.aboveitemref or '') .. '">' .. args.above ..'</th></tr>'
end
else
if args.title then
result = '<b itemprop="name' .. '"' .. (args.bodyitemtype and (' itemscope itemtype="' .. args.bodyitemtype .. '"') or '') .. ' itemref="' .. (args.bodyitemref or '') .. '">' .. args.title .. '</b>'
end
end
 
for k, v in pairs(h.subheader) do
result = result .. row(nil, nil, nil, nil, v[1], v.style or h.subheader.style, v.rowstyle, h.subheader.class, v.rowclass, nil, nil, nil, nil, nil, nil, nil)
end
for k, v in pairs(h.image) do
result = result .. row(nil, nil, nil, nil, v[1] and (v[1] .. (v.caption or '')), v.style or h.image.style, v.rowstyle, h.image.class, v.rowclass, nil, nil, nil, nil, nil, nil, nil)
end
--本体部ソート
for k, v in pairs(body) do
sbody[#sbody + 1] = v
end
table.sort(sbody,
function (a, b) return a[1] < b[1] end
)
--本体部
for k, v in ipairs(sbody) do
result = result .. row(v.header, v.headerstyle, v.label, v.labelstyle, v.data, v.datastyle, v.rowstyle, v.class, v.rowclass, v.id, v.itemprop, v.rowitemprop, v.itemtype, v.rowitemtype, v.itemref, v.rowitemref)
end
--フッター部
if args.below then
result = result .. '<tr><td colspan="2" class="' .. (args.belowclass or '') .. '" style="text-align:center; ' .. (args.belowstyle or '') .. '">' .. args.below .. '</td></tr>'
end
if link then
--Template:Transclude
link = string.gsub(link, ':?[Tt]emplate:', '')
if not string.find(link, ':') then
link = 'Template:' .. link
end
result = result .. '<tr class="noprint"><td colspan=2 style="text-align:right; font-size:85%;">[[' .. link .. '|テンプレートを表示]]</td></tr>'
end
--tableタグ閉じ
if not child then
result = result .. '</table>'
end
--出力
return result
end
 
return p

2022年2月13日 (日) 22:41時点における版

local p = {}

function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {parentOnly = true}) --引数取得 local child = (args.child == 'yes') local subbox = (args.subbox == 'yes') local h = {subheader = {}, image = {{}}} --ヘッダー部(subheader, image)テーブル local body, sbody = {}, {} --本体部テーブル, ソート済み本体部テーブル local link = args.tnavbar or args.name --(フッター部)テンプレート名 local result = --結果格納用

--[[ subheader, image用引数振り分け ]] local function args2tbl(str, k, v) local num = string.match(k, '%d*$') num = (num == ) and 1 or tonumber(num) h[str][num] = h[str][num] or {} if k == str then h[str][1][1] = v elseif string.match(k, str .. '%d+') then h[str][num][1] = v elseif string.find(k, 'style') then if string.match(k, 'style$') then h[str]['style'] = v else h[str][num]['style'] = v end elseif string.find(k, 'rowclass') then if string.match(k, 'rowclass$') then h[str]['rowclass'] = v else h[str][num]['rowclass'] = v end elseif string.match(k, 'class$') then h[str]['class'] = v end end

--[[ 引数振り分け ]] for k, v in pairs(args) do --subheader if string.find(k, 'subheader') then args2tbl('subheader', k, v) --image elseif string.find(k, 'image') then args2tbl('image', k, v) elseif string.find(k, 'caption') then if string.match(k, 'caption$') then

h['image'][1]['caption'] = '

' .. v .. '

'

elseif string.match(k, 'caption%d+') then local num = tonumber(string.match(k, '%d*$')) h['image'][num] = h['image'][num] or {}

h['image'][num]['caption'] = '

' .. v .. '

'

end --その他(本体部) elseif string.match(k, '^%D+%d+$') then local str, num = string.match(k, '^(%D+)(%d+)$') num = tonumber(num) if not body[num] then local OddOrEven = (num % 2 ~= 0) and 'odd' or 'even' body[num] = { num, headerstyle = (args.headerstyle or ) .. (args[OddOrEven .. 'headerstyle'] or ), labelstyle = (args.labelstyle or ) .. (args[OddOrEven .. 'labelstyle'] or ), datastyle = (args.datastyle or ) .. (args[OddOrEven .. 'datastyle'] or ) } end body[num][str] = (body[num][str] or ) .. v end end

--[[ Template:Infobox/row ]] local function row(header, headerstyle, label, labelstyle, data, datastyle, rowstyle, class, rowclass, id, itemprop, rowitemprop, itemtype, rowitemtype, itemref, rowitemref) local result = if header then

result = '' .. header .. ''

elseif data then

result = '' if label then result = result .. '' .. label .. ''

else

result = result .. ''

end

result = result .. '\n' .. data .. '' end return result end --[[ Template:Infobox ]] --ヘッダー部 if not child then --tableタグ result = '

' if args.title then --captionタグ result = result .. '' end if args.above then result = result .. ''

end else if args.title then result = '' .. args.title .. '' end end

for k, v in pairs(h.subheader) do result = result .. row(nil, nil, nil, nil, v[1], v.style or h.subheader.style, v.rowstyle, h.subheader.class, v.rowclass, nil, nil, nil, nil, nil, nil, nil) end for k, v in pairs(h.image) do result = result .. row(nil, nil, nil, nil, v[1] and (v[1] .. (v.caption or )), v.style or h.image.style, v.rowstyle, h.image.class, v.rowclass, nil, nil, nil, nil, nil, nil, nil) end

--本体部ソート for k, v in pairs(body) do sbody[#sbody + 1] = v end table.sort(sbody, function (a, b) return a[1] < b[1] end ) --本体部 for k, v in ipairs(sbody) do result = result .. row(v.header, v.headerstyle, v.label, v.labelstyle, v.data, v.datastyle, v.rowstyle, v.class, v.rowclass, v.id, v.itemprop, v.rowitemprop, v.itemtype, v.rowitemtype, v.itemref, v.rowitemref) end

--フッター部 if args.below then

result = result .. ''

end

if link then --Template:Transclude link = string.gsub(link, ':?[Tt]emplate:', ) if not string.find(link, ':') then link = 'Template:' .. link end

result = result .. ''

end

--tableタグ閉じ if not child then

result = result .. '
' .. args.title .. '
' .. args.above ..'
' .. args.below .. '
テンプレートを表示

'

end

--出力 return result end

return p