Module:其它版本

維基文庫,自由的圖書館
文档图示 模块文档[创建]
local p = {};

-- 輸出至目標數據項的鏈接
local function outputlink(entityid)
	if entityid ~= mw.wikibase.getEntityIdForCurrentPage() then
		local sitelink = mw.wikibase.getSitelink(entityid)
		-- 僅輸出維基中存在的條目
		if sitelink ~= nil then
			return '*[[' .. sitelink .. ']]\n'
		else
			return ''
		end
	else
		return ''
	end
end

-- 輸出至目標數據項各版本的鏈接
local function outputversion(entityid)
	-- 先輸出主條目
	local text = outputlink(entityid)
	-- 使用版本P747屬性輸出其它版本
	local versions = mw.wikibase.getBestStatements(entityid, 'P747')
	for k, v in pairs(versions) do
		if v['mainsnak']['snaktype'] == 'value' then
			text = text .. outputlink(v['mainsnak']['datavalue']['value']['id'])
		end
	end
	return text
end

function p.main(frame)
	local text = ''
	local entityid = frame.args['wikidata']
	if mw.wikibase == nil then
		return ''
	end
	if entityid == nil then
		entityid = frame.args['Wikidata']
	end
	if entityid == nil then
		entityid = mw.wikibase.getEntityIdForCurrentPage()
	end
	if entityid ~= nil then
		-- 先輸出主條目
		text = outputversion(entityid)
		-- 輸出各版本條目
		local editionof = mw.wikibase.getBestStatements(entityid, 'P629')
		for k, v in pairs(editionof) do
			if v['mainsnak']['snaktype'] == 'value' then
				text = text .. outputversion(v['mainsnak']['datavalue']['value']['id'])
			end
		end
	end
	-- 去掉末行空行
	if text ~= '' then
		return string.sub(text, 0, string.len(text) - 1)
	else
		return text
	end
end

return p;