モジュール:サンドボックス/Waiesu/sandbox
表示
これはモジュール:サンドボックス/Waiesuのモジュール・サンドボックスページです。 対応するテストケース・サブページ (実行) もご確認ください。 |
モジュールの解説[作成]
local p = {}
--[[
Template:Main, See, See also 用
]]
-- Template:IsValidPageName
local function isValidPageName(pageName)
local success, res = pcall(mw.title.new, pageName)
return (success and res) and '「[[' .. pageName .. ']]」' or '「' .. pageName .. '」'
end
-- Template:Rellink
local function rellink(content)
local div = mw.html.create('div')
div :addClass('rellink')
:css({
margin = '0 0 .5em 2em'
})
:wikitext(content)
return tostring(div)
end
local msgNoArticle = '<strong class=error>エラー: 記事名が入力されていません</strong>'
function p.main(frame)
local prefix, suffix = frame.args.prefix, frame.args.suffix
local args = frame:getParent().args
local links = {}
local errorMsg = not args[1] and msgNoArticle or ''
for i in ipairs(args) do
links[i] = isValidPageName(args[i])
end
return rellink(prefix .. mw.text.listToText(links, '、', '、および') .. errorMsg .. suffix .. '参照')
end
--[[
Template:Main2 用
]]
function p.main2(frame)
local args = frame:getParent().args
if not args[1] then
-- {{{1}}}がないときはエラーを返す
return msgNoArticle
elseif not args[2] then
-- {{{2}}}がないときは{{{1}}}をそのまま返す
return args[1] .. '参照'
else
-- {{{2}}}があるときは「${奇数}については${偶数}を」を返す
local res = {}
for i in ipairs(args) do
if i % 2 == 0 then
-- 偶数はスキップ(奇数とまとめて処理)
elseif args[i] then
table.insert(res, args[i] .. 'については' .. isValidPageName(args[i + 1]) .. 'を')
else
break
end
end
return rellink(table.concat(res, '、') .. '参照')
end
end
--[[
Template:Main3(提案)
]]
function p.main3(frame)
local args = frame:getParent().args
local res = {}
for k, v in pairs(args) do
table.insert(res, k .. 'については' .. isValidPageName(v) .. 'を')
end
return rellink(table.concat(res, '、') .. '参照')
end
return p