モジュール:サンドボックス/Waiesu/sandbox

これはこのページの過去の版です。Waiesu (会話 | 投稿記録) による 2016年5月27日 (金) 14:39個人設定で未設定ならUTC)時点の版であり、現在の版とは大きく異なる場合があります。

モジュールの解説[作成]
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