Модуль:Wikidata/InterprojectLite/sandbox
Этому модулю не хватает документации. |
local p = {};
function p.getCommonsLink ( )
return p.getSisterProjectLink('commonswiki' );
end
function p.getMediawikiLink ( )
return p.getSisterProjectLink('mediawikiwiki' );
end
function p.getMetawikiLink ( )
return p.getSisterProjectLink('metawiki' );
end
function p.getWikispeciesLink ( )
return p.getSisterProjectLink('specieswiki' );
end
function p.getWikipediaLink()
return p.getSisterProjectLink('wiki');
end
function p.getWikibooksLink ( )
return p.getSisterProjectLink('wikibooks' );
end
function p.getWikiquoteLink()
return p.getSisterProjectLink('wikiquote');
end
function p.getWikisourceLink()
return p.getSisterProjectLink('wikisource');
end
function p.getWikiversityLink()
return p.getSisterProjectLink('wikiversity');
end
function p.getWikivoyageLink()
return p.getSisterProjectLink('wikivoyage');
end
function p.getWiktionaryLink ( )
return p.getSisterProjectLink('wiktionary' );
end
function p.getSisterProjectLink(projectName)
-- По умолчанию старается достать ссылку на русском, иначе - на родном (P103)
local entity = mw.wikibase.getEntityObject()
if not entity or not entity.sitelinks then
return ''
end
if entity.sitelinks['ru' .. projectName] then
return entity.sitelinks['ru' .. projectName].title
end
if entity.claims then
local propValues = entity.claims['P103']
if propValues then
local codes = mw.loadData('Module:Wikidata:Dictionary/P424');
for i, 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 codesById = codes[languageWikidataId];
if ( codesById ) then
for j, code in pairs( codesById ) do
local sitelink = entity.sitelinks[code .. projectName]
if sitelink then
return code .. ':' .. sitelink.title
end
end
end
end
end
end
end
if entity.sitelinks[projectName] then
return entity.sitelinks[projectName].title
end
return ''
end
return p;