Модуль:Wikidata/where: различия между версиями
Перейти к навигации
Перейти к поиску
[отпатрулированная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
Putnik (обсуждение | вклад) оптимизация потребления памяти и дорогих функций |
Putnik (обсуждение | вклад) дополнительная проверка — может вернуться пустой объект |
||
Строка 15: | Строка 15: | ||
local entityId = place.mainsnak.datavalue.value.id |
local entityId = place.mainsnak.datavalue.value.id |
||
local categories = mw.wikibase.getBestStatements( entityId, propertyOfProperty ) |
local categories = mw.wikibase.getBestStatements( entityId, propertyOfProperty ) |
||
if categories then |
if categories and categories[ 1 ] then |
||
local sitelink = mw.wikibase.sitelink( entityId ) |
local sitelink = mw.wikibase.sitelink( entityId ) |
||
local categoryId = categories[ 1 ].mainsnak.datavalue.value.id |
local categoryId = categories[ 1 ].mainsnak.datavalue.value.id |
||
Строка 26: | Строка 26: | ||
if isUpperplace == nil then |
if isUpperplace == nil then |
||
local upperPlace = mw.wikibase.getBestStatements( entityId, 'P131' ) |
local upperPlace = mw.wikibase.getBestStatements( entityId, 'P131' ) |
||
if upperPlace then |
if upperPlace and upperPlace[ 1 ] then |
||
return MakeWherePlace( upperPlace[1], propertyOfProperty, true ) |
return MakeWherePlace( upperPlace[ 1 ], propertyOfProperty, true ) |
||
end |
end |
||
end |
end |
Текущая версия от 13:11, 9 мая 2023
Реализация шаблона {{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