Модуль:Wikidata/links
Для документации этого модуля может быть создана страница Модуль:Wikidata/links/doc
local p = {};
function p.getSisterProjectLink( projectInterwikiLettter, projectName, frame )
-- По умолчанию старается достать ссылку на русском, иначе - на en, затем на родном (P103)
local itemID = mw.text.trim(frame.args[1] or "")
local entity = mw.wikibase.getEntityObject(itemID)
if entity == nil or entity.sitelinks == nil then
return ''
end;
local sitelink = entity.sitelinks['ru' .. projectName]
if sitelink ~= nil then
return projectInterwikiLettter .. ':' .. sitelink.title
end;
-- tries to returns :en:w: link right after
sitelink = entity.sitelinks['en' .. projectName]
if sitelink ~= nil then
return 'en:w:' .. sitelink.title;
end;
if entity.claims then
local propValues = entity.claims['P103']
if propValues ~= nil 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
sitelink = entity.sitelinks[code .. projectName];
if sitelink ~= nil then
return projectInterwikiLettter .. ':' .. code .. ':' .. sitelink.title;
end;
end;
end;
end;
end;
end;
end;
return '';
end;
function p.getWV (frame)
local itemID = mw.text.trim(frame.args[1] or "")
local entity = mw.wikibase.getEntityObject(itemID)
if not entity or not entity.sitelinks then
return ''
end
if entity.sitelinks['ru' .. 'wikivoyage'] then
return entity.sitelinks['ru' .. 'wikivoyage'].title
end
end;
function p.getWikipediaLink(frame)
return p.getSisterProjectLink( 'w', 'wiki', frame );
end;
return p;