Модуль:WikidataTree
[прагляд] [правіць] [гісторыя] [падстаронкі] [абнавіць]
Дакументацыя
Выкарыстоўваецца для адлюстравання класіфікацыі ў шаблонах {{Мова}} и {{Моўная група}}.
Каб пазбегнуць паломак старонак, дзе ўжыты гэты модуль, пажадана эксперыментаваць у пясочніцы для модуляў.
local p = {}
local WDS = require( 'Module:WikidataSelectors' )
--[[
Функцыя для афармлення ідэнтыфікатара існасці
Прамае: радок ідэнтыфікатара (тыпу Q42) і табліцу параметраў,
Вяртае: радок аформленага тэксту
]]
function p.formatEntityId( entityId, options )
-- атрыманне лакалізаванай назвы
local label = nil
if options and options.text and options.text ~= '' then
label = options.text
else
label = mw.wikibase.label( entityId )
end
-- атрыманне спасылкі па ідэнтыфікатары
local link = mw.wikibase.sitelink( entityId )
if link then
if label then
return '[[' .. link .. '|' .. label .. ']]'
else
return '[[' .. link .. ']]'
end
end
if label then
-- чырвоная спасылка
if not mw.title.new( label ).exists then
return options.frame:expandTemplate{
title = 'не перакладзена 5',
args = { label, '', 'd', entityId }
}
end
-- аднайменны артыкул ужо існуе — выводзіцца тэкст і спасылка на ВД
return '<span class="iw" data-title="' .. label .. '">' .. label
.. '<sup class="noprint">[[:d:' .. entityId .. '|[d]]]</sup>'
.. '</span>'
end
-- паведамленне аб адсутнасці лакалізаванай назвы
-- not good, but better than nothing
return '[[:d:' .. entityId .. '|' .. entityId .. ']]'
.. '<span style="border-bottom: 1px dotted; cursor: help; white-space: nowrap"'
.. ' title="У Вікіданых няма беларускага подпісу да элемента. Вы можаце дапамагчы, пазначыўшы беларускі варыянт подпісу."'
.. '>?</span>' -- .. categoryLinksToEntitiesWithMissingLabel
end
--[[
Абірае ўласцівасці па property id, фільтруючы іх па ранзе, і вяртае першае са значэнняў
]]
local function selectFirstClaim( entityId, propertySelector )
if not entityId then
error( 'Адсутнічае entityId' )
end
if not propertySelector then
error( 'Не ўказаны propertySelector' )
end
local claims = WDS.load( entityId, propertySelector )
if claims and claims[ 1 ] then
return claims[ 1 ]
end
return nil
end
local function itemString( frame, entityId, formatEntityId )
return formatEntityId( entityId, { frame = frame } )
end
--[[
Функцыя для фармавання дрэва па ўласцівасці для вышэйстаячага элемента для бягучай старонкі
]]
function p.parentTree( frame )
local entityId = frame.args.from
if not entityId or entityId == '' then
entityId = mw.wikibase.getEntityIdForCurrentPage()
end
if not entityId then
return ''
end
local list = {}
local level = 1
local parentProperty = 'P279'
if frame.args.parent then
parentProperty = string.upper( frame.args.parent )
end
local formatterFunction = itemString
if frame.args[ 'value-module' ] then
local formatter = require( 'Module:' .. frame.args[ 'value-module' ] )
formatterFunction = formatter[ frame.args[ 'value-function' ] ]
end
while true do
list[ level ] = formatterFunction( frame, entityId, p.formatEntityId )
level = level + 1
parentClaim = selectFirstClaim( entityId, parentProperty )
if ( not parentClaim
or not parentClaim.mainsnak
or not parentClaim.mainsnak.datavalue
or not parentClaim.mainsnak.datavalue.value
or not parentClaim.mainsnak.datavalue.value.id
) then
break
end
entityId = parentClaim.mainsnak.datavalue.value.id
end
local out = ''
local maxLevel = level
local tab = frame.args[ 'tab' ]
if tab and tab ~= '' then
for level, value in pairs( list ) do
out = string.rep( tab, maxLevel - level ) .. value .. '\n' .. out
end
else
for level, value in pairs( list ) do
out = value .. '\n' .. out
end
end
local before = frame.args[ 'before' ]
if before and before ~= '' then
out = before .. out;
end
local after = frame.args[ 'after' ]
if after and after ~= '' then
out = out .. after;
end
return out
end
return p