Модуль:WikidataMagic
Для следующих параметров используются спец. шаблоны:
- государство (P17) → {{wikidata/p17}}
- место рождения (P19) → {{wikidata/p19}}
- место смерти (P20) → {{wikidata/p20}}
- гражданство (P27) → {{wikidata/p27}}
- род занятий (P106) → {{wikidata/p106}}
- расположение штаб-квартиры (P159) → {{wikidata/p159}}
- полученные награды (P166) → {{wikidata/p166}}
- ISBN-13 (P212) → {{wikidata/p212}}
- международное научное название (P225) → {{wikidata/p225}}
- версия (P348) → {{wikidata/p348}}
- категория на Викискладе (P373) → {{wikidata/p373}}
- часовой пояс (P421) → {{wikidata/p421}}
- страна происхождения (P495) → {{wikidata/p495}}
- учёная степень (P512) → {{wikidata/p512}}
- место жительства (P551) → {{wikidata/p551}}
- дата рождения (P569) → {{wikidata/p569}}
- дата смерти (P570) → {{wikidata/p570}}
- дата основания, создания, возникновения (P571) → {{wikidata/p571}}
- дата публикации (P577) → {{wikidata/p577}}
- ISBN-10 (P957) → {{wikidata/p957}}
- численность населения (P1082) → {{wikidata/p1082}}
- число носителей языка (P1098) → {{wikidata/p1098}}
- число сотрудников (P1128) → {{wikidata/p1128}}
- расширение файла (P1195) → {{wikidata/p1195}}
- размер коллекции (P1436) → {{wikidata/p1436}}
- представляет страну в спорте (P1532) → {{wikidata/p1532}}
- начало периода активности (P2031) → {{wikidata/p2031}}
- окончание периода активности (P2032) → {{wikidata/p2032}}
- площадь (P2046) → {{wikidata/p2046}}
local p = {}
--[[
Получение идентификатора свойства по имени параметра шаблона.
]]
function p.propertyIdByName( name )
local names = require( 'Module:WikidataMagic/names' )
name = string.gsub( name, ' ', ' ' )
name = string.gsub( name, '%s+', ' ' )
name = string.gsub( name, '%[%[[^%[%]%|]+%|([^%[%]%|]+)%]%]', '%1' )
name = string.gsub( name, ':$', '' )
name = mw.language.getContentLanguage():ucfirst( name )
if names[ name ] then
return 'P' .. names[ name ]
end
mw.log( 'Parameter not mapped with Wikidata property: "' .. name .. '"' )
return nil
end
--[[
Получение параметров форматтера, которые обычно используются для вывода свойства.
]]
function p.usualPropertyParams( propertyId )
propertyId = string.upper( string.gsub( propertyId, '%[.*$', '' ) )
-- род занятий
if propertyId == 'P18' then
return {
['size'] = '250x350px',
}
elseif propertyId == 'P41' then
return {
['size'] = '150x200px',
}
elseif propertyId == 'P94' then
return {
['size'] = '100x200px',
}
elseif propertyId == 'P106' then
return {
['claim-module'] = 'Wikidata/item',
['claim-function'] = 'formatEntityWithGenderClaim',
['conjunction'] = ', ',
}
elseif propertyId == 'P109' then
return {
['size'] = '150x150px',
}
elseif propertyId == 'P117' then
return {
['size'] = '290x300px',
}
elseif propertyId == 'P154' then
return {
['size'] = '220x80px',
}
elseif propertyId == 'P242' then
return {
['size'] = '300x300px',
}
elseif propertyId == 'P1477' then
return {
['separator'] = '<br>',
['conjunction'] = '<br>',
['monolingualLangTemplate'] = 'lang',
}
elseif propertyId == 'P1559' then
return {
['separator'] = '<br>',
['conjunction'] = '<br>',
['monolingualLangTemplate'] = 'lang',
}
elseif propertyId == 'P1621' then
return {
['size'] = '300x300px',
}
elseif propertyId == 'P2910' then
return {
['size'] = '100x80px',
}
end
return {}
end
--[[
Обёртка над методом formatProperty модуля Wikidata.
]]
function p.formatProperty( frame )
local Wikidata = require( 'Module:Wikidata' )
-- если локальное значение передано в параметрах вызова,
-- сразу вызывается форматтер Wikidata для вывода
if frame.args.value and frame.args.value ~= '' then
return Wikidata.formatProperty( frame )
end
-- поиск свойства по названию
-- if not string.match( frame.args.property, '^[Pp]%d' ) then
-- local propertyId = p.propertyIdByName( frame.args.property )
-- if not propertyId then
-- return ''
-- end
-- frame.args.property = propertyId
-- end
-- автоматическое форматирование свойства
local propertyParams = p.usualPropertyParams( frame.args.property )
for key, value in pairs( propertyParams ) do
frame.args[ key ] = value
end
-- временное решение для использования специальных шаблонов
if #propertyParams == 0 then
local specalTemplates = { P17 = 1, P19 = 1, P20 = 1, P27 = 1, P106 = 1,
P159 = 1, P166 = 1, P212 = 1, P225 = 1, P348 = 1,
P373 = 1, P421 = 1, P495 = 1, P512 = 1, P551 = 1, P569 = 1,
P570 = 1, P571 = 1, P577 = 1, P957 = 1, P1082 = 1,
P1098 = 1, P1128 = 1, P1195 = 1, P1436 = 1, P1532 = 1,
P2031 = 1, P2032 = 1, P2046 = 1 }
if specalTemplates[ string.upper( frame.args.property ) ] then
return frame:expandTemplate{ title = 'Wikidata/' .. string.lower( frame.args.property ) }
end
end
return Wikidata.formatProperty( frame )
end
return p