Модуль: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;