モジュール:サンドボックス/本日晴天/仮リンク/link

モジュールの解説[作成]
require('strict')

local function otherLangLink(langCode, pageName)
	-- 引数が指定されていない場合はnilを返す
	if not langCode or not pageName then
		return nil
	end
	
	local langDisp
	
	-- wikidataの場合は「wikidata」、それ以外の場合は言語名+「版」とする
	if langCode == 'wikidata' or langCode == 'Wikidata' then
		return string.format('[[:d:%s|wikidata]]', pageName)
	end
	langDisp = mw.loadData('モジュール:Wikipedia言語名/lang mapping')[langCode]
	
	if not langDisp then
		error('言語コードの指定に誤りがあります', 0)
	end
	
	return string.format(
		'[[:%s:%s|%s版]]',
		langCode,
		pageName,
		langDisp
		)
end

local function otherLangLinkDispName(langCode, pageName, interwikilabel, short, links)
	-- 必須引数が指定されていない場合はnilを返す
	if not langCode or not pageName then
		return nil
	end
	
	-- 言語ページ取得
	local langPage = mw.loadData('モジュール:Wikipedia言語名/lang mapping')[langCode] 
	
	if not langPage then
		error('言語コードの指定に誤りがあります', 0)
	end
	
	-- 言語短縮名取得
	local langShort
	if short == 'on' then
		langShort = mw.loadData('モジュール:Wikipedia言語名/lang mapping short')[langCode]
	end
	
	-- 言語表示部分取得
	local langLink
	if links == 'no' then
		langLink = langShort or langPage
	else
		langLink = string.format(
			langShort and '[[%s|%s]]' or '[[%s]]',
			langPage,
			langShort
			)
	end
	
	return string.format(
		'%s: <span lang="%s", xml:lang="%s">[[:%s:%s|%s]]<span>',
		langLink,
		langCode,
		langCode,
		langCode,
		pageName,
		interwikilabel or pageName
		)
end

local p = {}

function p.otherLangLinkList(args)

    local label = args.label or args[1] or ''
	local result = mw.html.create()
		
	-- ツールチップ指定
	if args.view then
		local tooltip = mw.html.create('span')
			:attr('title', (args.link .. args.title))
			:wikitext(label)
		if args.black then
			result:node(tooltip)
		else
			result:wikitext('[[', args.link, '|')
				:node(tooltip)
				:wikitext(']]')
		end
	else
		result:wikitext(
			'[[',
			args.link,
			'|',
			label,
			']]<span class="interlangLink_solved" style="display: none;" title="この仮リンクは解消済みです。日本語版記事をチェックして問題がなければ通常の内部リンクに書き換えてください。">'
			)
	end
	
	if args[2] and args[3] then
		-- フォント指定
		if not args.viewInterwikiPageName then
			result:wikitext(
				'<span style="font-size: 0.77em; font-weight: normal;" class="noprint">'
				)
		end

		-- 改行指定対応
		if args.br then
			result:wikitext('<br/>')
		end
		
		result:wikitext('(')
		if args.viewInterwikiPageName then
			result:node(
				otherLangLinkDispName(args[2], args[3], args.interwikilabel, args.short, args.links)
				)
		else
			result:wikitext(
				table.concat(
					{
						otherLangLink(args[2], args[3]),
						otherLangLink(args[4], args[5]),
						otherLangLink(args[6], args[7]),
						otherLangLink(args[8], args[9])
					},
					'、'
					)
				)
		end
		if args.add then
			result:wikitext(args.add)
		end
		result:wikitext(')')
		
		if not args.viewInterwikiPageName then
			result:wikitext('</span>')
		end
	end
	if not args.view then
		result:wikitext('<sup>&#91;解消済&#93;</sup></span>')
	end
	
	return result
end

return p