Модуль:Wikidata/where: различия между версиями
Перейти к навигации
Перейти к поиску
[отпатрулированная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
Lockal (обсуждение | вклад) м args[2] обязательным |
Putnik (обсуждение | вклад) дополнительная проверка — может вернуться пустой объект |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
local p = {} |
local p = {} |
||
local function FormatWhereLinkFromCatName( |
local function FormatWhereLinkFromCatName( categoryPageName, sitelink ) |
||
local prep, linktext = string.match( |
local prep, linktext = string.match( categoryPageName, '^Категория:[^ ]+ ([^ ]+) (.+)$' ) |
||
if sitelink then |
if sitelink then |
||
return prep .. ' ' .. "[[" .. sitelink .. "|" .. linktext .. "]]" |
return prep .. ' ' .. "[[" .. sitelink .. "|" .. linktext .. "]]" |
||
else |
else |
||
return prep .. ' ' .. linktext |
return prep .. ' ' .. linktext |
||
end |
end |
||
end |
end |
||
local function MakeWherePlace(place, propertyOfProperty) |
local function MakeWherePlace(place, propertyOfProperty, isUpperplace) |
||
if place.mainsnak.datavalue then -- если значение свойства "значение неизвестно", то datavalue nil |
if place.mainsnak.datavalue then -- если значение свойства "значение неизвестно", то datavalue nil |
||
local |
local entityId = place.mainsnak.datavalue.value.id |
||
local |
local categories = mw.wikibase.getBestStatements( entityId, propertyOfProperty ) |
||
if categories and categories[ 1 ] then |
|||
⚫ | |||
⚫ | |||
local |
local categoryId = categories[ 1 ].mainsnak.datavalue.value.id |
||
local categoryPageName = mw.wikibase.label( categoryId ) |
|||
local cat_qid = 'Q' .. categories[1].mainsnak.datavalue.value['numeric-id'] |
|||
if categoryPageName then |
|||
⚫ | |||
return FormatWhereLinkFromCatName( |
return FormatWhereLinkFromCatName( categoryPageName, sitelink ) |
||
end |
|||
end |
|||
⚫ | |||
local upperPlace = mw.wikibase.getBestStatements( entityId, 'P131' ) |
|||
if upperPlace and upperPlace[ 1 ] then |
|||
return MakeWherePlace( upperPlace[ 1 ], propertyOfProperty, true ) |
|||
end |
|||
end |
end |
||
end |
end |
||
return nil |
return nil |
||
end |
end |
||
local function MakeWherePlaces(places, propertyOfProperty) |
local function MakeWherePlaces( places, propertyOfProperty ) |
||
local res = '' |
local res = '' |
||
for i, place in pairs(places) do |
for i, place in pairs(places) do |
||
if i > 1 then |
if i > 1 then |
||
if next(places, _) == nil then |
if next( places, _ ) == nil then |
||
res = res .. ' и ' |
res = res .. ' и ' |
||
else |
else |
||
res = res .. ', ' |
res = res .. ', ' |
||
end |
end |
||
end |
end |
||
local text = MakeWherePlace(place, propertyOfProperty) |
local text = MakeWherePlace( place, propertyOfProperty ) |
||
if text then |
if text then |
||
Строка 47: | Строка 56: | ||
end |
end |
||
function p.mainFunction(frame) |
function p.mainFunction( frame ) |
||
local args = {} |
local args = {} |
||
if frame == mw.getCurrentFrame() then |
if frame == mw.getCurrentFrame() then |
||
args = frame.args |
args = frame.args |
||
else |
else |
||
args = frame |
args = frame |
||
Строка 58: | Строка 67: | ||
local entity = mw.wikibase.getEntity() |
local entity = mw.wikibase.getEntity() |
||
if entity |
if entity and entity.claims then |
||
local countries = entity.claims[ args[1] ] |
local countries = entity.claims[ args[ 1 ] ] |
||
if countries |
if countries then |
||
result = result .. MakeWherePlaces(countries, args[2]) |
result = result .. MakeWherePlaces( countries, args[ 2 ] ) |
||
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