Модуль:Wikidata/where
Перейти к навигации
Перейти к поиску
Реализация шаблона {{Wikidata/where}}
local p = {}
local function FormatWhereLinkFromCatName( categoryPageName, sitelink )
local prep, linktext = string.match( categoryPageName, '^Категория:[^ ]+ ([^ ]+) (.+)$' )
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 entityId = place.mainsnak.datavalue.value.id
local categories = mw.wikibase.getBestStatements( entityId, propertyOfProperty )
if categories and categories[ 1 ] then
local sitelink = mw.wikibase.sitelink( entityId )
local categoryId = categories[ 1 ].mainsnak.datavalue.value.id
local categoryPageName = mw.wikibase.label( categoryId )
if categoryPageName then
return FormatWhereLinkFromCatName( categoryPageName, sitelink )
end
end
if isUpperplace == nil then
local upperPlace = mw.wikibase.getBestStatements( entityId, 'P131' )
if upperPlace and upperPlace[ 1 ] 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 and entity.claims then
local countries = entity.claims[ args[ 1 ] ]
if countries then
result = result .. MakeWherePlaces( countries, args[ 2 ] )
end
end
return result
end
return p