Модуль:Wikidata/Interproject

Навигацин тӀегӀо Лахарна тӀегӀо

ХӀокху модулах лаьцна хааман Модуль:Wikidata/Interproject/doc агӀо кхолла мега

local p = {};

local function getLangCodeByArticle(name) -- длинный список
	local L=mw.loadData("Module:Languages/data");
	for k,v in pairs(L) do
		if v[2] == name then return k end
	end
	return {false}
end

function p.getWikisourceLink ( )
	return p.getSisterProjectLink( 's', 'wikisource' )
end

function p.getWikiquoteLink ( )
	return p.getSisterProjectLink( 'q', 'wikiquote' )
end

function p.getSisterProjectLink( projectInterwikiLettter, projectName )
	-- По умолчанию старается достать ссылку на русском,
	-- иначе - на родном (P103), иначе - на хоть бы каком
	local entity = mw.wikibase.getEntityObject()
	if not entity or not entity.sitelinks then
		return ''
	end
	if entity.sitelinks['ru' .. projectName] then
		return projectInterwikiLettter .. ':' .. entity.sitelinks['ru' .. projectName].title
	end

	if entity.claims then
		local propValues = entity.claims['P103']
		if propValues then
			local codes = mw.loadData('Module:Wikidata/Language-codes');
			for index, propClaim in pairs(propValues) do
				if propClaim.mainsnak and propClaim.mainsnak.datavalue and propClaim.mainsnak.datavalue.value and propClaim.mainsnak.datavalue.value["numeric-id"] then
					local languageWikidataId = 'Q' .. propClaim.mainsnak.datavalue.value["numeric-id"]
					local code = (codes[languageWikidataId] or getLangCodeByArticle(entity:getSitelink('ruwiki')))[1]
					if code then
						local sitelink = entity.sitelinks[code .. projectName]
						if sitelink then
							return projectInterwikiLettter .. ':' .. code .. ':' .. sitelink.title
						end
					end
				end
			end
		end
	end

	-- just take the first one...
	for key, value in pairs(entity.sitelinks) do
		if mw.ustring.sub(key, 0 - mw.ustring.len("projectName")) == projectName then
			return projectInterwikiLettter .. ':' .. mw.ustring.sub(key, 0, mw.ustring.len(key) - 10) .. ':' .. value.title
		end
	end

	return ''
end

return p;