モジュール:サンドボックス/かにふとん

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

この説明文は 『 モジュール:サンドボックス/かにふとん/doc 』 から呼び出されています。
キャッシュを破棄

{{#invoke:サンドボックス/かにふとん|osusume|6}}


警告: 既定のソートキー「さんとほつくすかにふとん」が、その前に書かれている既定のソートキー「おすすめこうもく」を上書きしています。

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