モジュール:サンドボックス/かにふとん
ナビゲーションに移動
検索に移動
local p = {}
function p.osusume (frame)
local n = tonumber(frame.args['1'])
local list = {}
local i = 0
for title in mw.ustring.gmatch( frame:expandTemplate { title='Enpedia:おすすめ項目 (仮)' } , '%* *%[%[(.-)%]%]' ) do
i = i + 1
list[i] = title
end
local t = '\n'
while i >= 1 and n >= 1 do
local r = math.floor( math.fmod( os.time(), i ) ) + 1
t = t .. '*[[' .. list[r] .. ']]\n'
if i ~= r then list[i],list[r] = list[r],list[i] end
i = i - 1
n = n - 1
end
return t
end
-- 本体
function p.main( frame )
local args = frame.args
local temp = ''
local split = mw.text.split ( frame:getParent():getTitle(), ':' )
if args['title'] == nil or args['title'] == '' then
args['title'] = split[2]
end
local header = {}
-- outbox
header['outbox'] = '<table class="mw-collapsible" data-collapsetext="隠す" data-expandtext="表示" style="border:1px solid #aaa; background-color:#fff; border-collapse:separate; border-spacing:2px; position:relative; clear:both; margin:0 auto" Width="100%">'
-- tnavbar
header['tnavbar'] = '<div style="float:left; font-weight:normal; font-size:80%;" >' ..p._getTnavbar( frame ) ..'</div>'
-- title
header['title'] = '<tr><td colspan="2" style="background: #ccf; text-align: center; font-size: 110%; font-weight: bold;">' ..args['title'] ..header['tnavbar'] ..'</td></tr>'
-- above
if args['above'] ~= nil and args['above'] ~= '' then
header['above'] = '<tr><td colspan="2" Width=100% style="background: #ddf; text-align: center; margin: 1px; font-weight: bold;">' ..args['above'] ..'</td></tr>'
else
header['above'] = ''
end
local loop = p._loop( args )
local footer = {}
if args['below'] ~= nil and args['below'] ~= '' then
footer['below'] = '<tr><td colspan="2" style="background: #ddf; text-align: center; margin: 1px; font-weight: bold;">' ..args['below'] ..'</td></tr>'
else
footer['below'] = ''
end
footer['outbox'] = '</table>'
return header['outbox'] ..header['title'] ..loop ..footer['below'] ..footer['outbox']
end
-- **** Subs ****
-- 呼び出し元テンプレート名と引数を処理
function p._getTnavbar( frame )
local TemplateName = frame:getParent():getTitle()
local split = mw.text.split( TemplateName, ':' )
local title = ':' ..split[2]
local name = 'テンプレート';
local namespace = { name ..title, name ..'・トーク' ..title };
local link = {};
link[1] = '[[' ..namespace[1] ..'|' ..'表]]';
link[2] = '[[' ..namespace[2] ..'|' ..'話]]';
link[3] = '<span class="plainlinks">[' ..frame:preprocess( '{{fullurl:' ..namespace[1] ..'|action=edit}}' ) ..' 編]</span>';
link[4] = '<span class="plainlinks">[' ..frame:preprocess( '{{fullurl:' ..namespace[1] ..'|action=history}}' ) ..' 歴]</span>';
-- 表・話・編・歴
return '<span style="font-size: 80%;">' ..link[1] ..'・' ..link[2] ..'・' ..link[3] ..'・' ..link[4] ..'</span>'
end
-- Navbox + child 共通ループ処理
function p._loop( args )
local line = ''
local temp = ''
local group_i = ''
local list_i = ''
for i = 1, 200 do
-- 成形行を空にする
temp = '';
-- group
group_i = 'group' ..i;
group = args[group_i] or '';
-- list
list_i = 'list' ..i;
list = args[list_i] or '';
-- group と list が空でないとき
if ( group ~= '' or nil ) and ( list ~= '' or nil ) then
temp = '<tr><td style="background: #ddf; width: 12.5%; font-weight: bold; text-align: right; white-space: nowrap; border-right: 5px solid #aaf; padding: 0px 5px 0px 5px;">' .. group ..'</td><td style="border-bottom: 1px solid #ddd;">' ..list ..'</td></tr>';
-- group が空でないとき
elseif group ~= '' or nil then
temp = '<tr><td colspan="2" style="background: #ddf; font-weight: bold; text-align: center;">' .. group ..'</td></tr>';
-- list が空でないとき
elseif list ~= '' or nil then
temp = '<tr><td colspan="2" style="border-bottom: 1px solid #ddd; text-align: center;">' ..list ..'</td></tr>';
end
-- 成形行の中身をlineの末尾に追加
line = line ..temp;
end
return line
end
return p