Модуль:Wikidata/where
Реализация шаблона {{Wikidata/where}}
local p = {}
local function FormatWhereLinkFromCatName(cat_link_text, sitelink)
local prep, linktext = string.match(cat_link_text, '^Категория:[^ ]+ ([^ ]+) (.+)$');
if sitelink then
return prep .. ' ' .. "[[" .. sitelink .. "|" .. linktext .. "]]";
else
return prep .. ' ' .. linktext;
end
end
local function MakeWherePlace(place, propertyOfProperty, isUpperplace)
if place.mainsnak.datavalue then -- если значение свойства "значение неизвестно", то datavalue nil
local id = 'Q' .. place.mainsnak.datavalue.value['numeric-id']
local placeEntity = mw.wikibase.getEntity(id)
local categories = placeEntity.claims[propertyOfProperty]
if categories ~= nil then
local sitelink = mw.wikibase.sitelink(id)
local cat_qid = 'Q' .. categories[1].mainsnak.datavalue.value['numeric-id']
local cat_link_text = mw.wikibase.label(cat_qid)
if cat_link_text ~= nil then
return FormatWhereLinkFromCatName(cat_link_text, sitelink)
end
end
if isUpperplace == nil then
local upperPlace = placeEntity.claims.P131
if upperPlace ~= nil then
return MakeWherePlace(upperPlace[1], propertyOfProperty, true)
end
end
end
return nil
end
local function MakeWherePlaces(places, propertyOfProperty)
local res = ''
for i, place in pairs(places) do
if i > 1 then
if next(places, _) == nil then
res = res .. ' и ';
else
res = res .. ', ';
end
end
local text = MakeWherePlace(place, propertyOfProperty)
if text then
res = res .. text
end
end
return res
end
function p.mainFunction(frame)
local args = {}
if frame == mw.getCurrentFrame() then
args = frame.args;
else
args = frame
end
local result = ''
local entity = mw.wikibase.getEntity()
if entity ~= nil and entity.claims ~= nil then
local countries = entity.claims[ args[1] ]
if countries ~= nil then
result = result .. MakeWherePlaces(countries, args[2])
end
end
return result
end
return p