モジュール:サンドボックス/Waiesu/sandbox
表示
これはモジュール:サンドボックス/Waiesuのモジュール・サンドボックスページです。 対応するテストケース・サブページ (実行) もご確認ください。 |
モジュールの解説[作成]
local p = {}
--[[
作品リスト用
使い方:
テンプレート呼び出し: {{(TEMPLATE_NAME)|西暦年(数字のみ)|内容1|内容2|...}}
テンプレートソース: {{#invoke:モジュール:サンドボックス/Waiesu/sandbox|year_calc}}
]]
function p.year_calc(frame)
local args = require('Module:Arguments').getArgs(frame)
local year = frame.args[1] - 2
local result
for key, value in pairs(args) do
result = (key == 1) and '' or result .. '<dt>' .. (year + key) .. '年</dt><dd style="margin-left: 0;">\n' .. value .. '</dd>'
end
result = '<dl>' .. result .. '</dl>'
return result
end
--[[
作品リスト用
使い方:
テンプレート呼び出し: {{(TEMPLATE_NAME)|dt1=dd1|dt2=dd2|...}}
テンプレートソース: {{#invoke:モジュール:サンドボックス/Waiesu/sandbox|year_param}}
]]
function p.year_param(frame)
local result = ''
for key, value in pairs(require('Module:Arguments').getArgs(frame, {wrappers = 'Template:定義リスト2'})) do
result = result .. '<dt>' .. key .. '</dt><dd style="margin-left: 0;">\n' .. value .. '</dd>'
end
return '<dl style="margin-left: 0;">' .. result .. '</dl>'
end
--[[
for step用
]]
function p.for_step(frame)
local get_args = require('Module:Arguments').getArgs(frame)
local sep,var,i_start,i_end,step,prefix,suffix,call = '','',1,1,1,'','',''
local args = {}
for key, value in pairs(get_args) do
if key == 'sep' then sep = value
elseif key == 'name' then var = value
elseif key == 'start' then i_start = value
elseif key == 'end' then i_end = value
elseif key == 'step' then step = value
elseif key == 'prefix' then prefix = value
elseif key == 'suffix' then suffix = value
elseif key == 'call' then call = value
else args[key] = value end
end
if var == '' then error('引数varが指定されていません') end
if call == '' then call = 'concat' end
local result = {} --結果格納用テーブル
for i = i_start, i_end, step do
for key, value in pairs(args) do
key = string.gsub(key, var, prefix .. i .. suffix)
args[key] = string.gsub(value, var, prefix .. i .. suffix)
end
table.insert(result, frame:expandTemplate{title = call, args = args})
end
return table.concat(result, sep)
end
--[[
Template:Main, See, See also 用
]]
local function isValidPageName(s)
local success, res = pcall(mw.title.new, s)
return (success and res) and '「[[' .. s .. ']]」' or '「' .. s .. '」'
end
local msgNoArticle = '<strong class="error">エラー: 記事名が入力されていません</strong>'
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {parentOnly = true})
local links = {nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil}
local prefix, suffix = frame.args['prefix'], frame.args['suffix']
local error_msg = not args[1] and msgNoArticle or args[16] and '…<strong class="error">最大15記事までです。</strong>' or ''
for i = 1, 15 do
if args[i] then links[i] = isValidPageName(args[i]) else break end
end
return '<div class="rellink" style="margin-bottom:0.5em;padding-left:2em;font-style:italic;">' .. prefix .. mw.text.listToText(links, '、', '、および') .. error_msg .. suffix .. '参照</div>'
end
--[[
Template:Main2 用
]]
function p.main2(frame)
local args = require('Module:Arguments').getArgs(frame, {parentOnly = true})
local result = {nil, nil, nil, nil, nil, nil, nil, nil, nil, nil}
if not args[1] then
result = {msgNoArticle}
elseif not args[2] then
result = {args[1]}
else
for i = 2, 20, 2 do
if args[i] then table.insert(result, args[i - 1] .. 'については' .. isValidPageName(args[i]) .. 'を') else break end
end
end
return '<div class="rellink" style="margin-bottom:0.5em;padding-left:2em;font-style:italic;">' .. table.concat(result, '、') .. '参照</div>'
end
return p