Модуль:Wikidata/link
Материал из ChronoWiki
< Модуль:Wikidata
Перейти к навигацииПерейти к поискуВерсия от 16:40, 13 июля 2019; ru>Dima st bk (- пока нет рабочего ОКАТО/ОКТМО)
Набор функций для преобразования ID из свойств Викиданных в работающие ссылки.
Обычно для ссылок используется URL-форматтер из свойства Ошибка Lua в Модуль:WD на строке 452: свойство P1630 не найдено., его можно изменить параметром formatter, текст ссылки можно изменить параметром title. Новую функцию имеет смысл создавать, если задачу по изменению ссылки нельзя решить при помощи этих параметров.
p = {};
function p.fromTemplate( frame )
local args = frame.args;
return p.generateLink( args[ 1 ], args[ 2 ], args[ 'title' ] );
end
function p.fromModule( context, options, id )
return p.generateLink( options[ 'property' ], id, options[ 'title' ], context, options );
end
function p.generateLink( propertyId, id, title, context, options )
propertyId = propertyId:upper()
if p[ propertyId ] then
return p[ propertyId ]( context, options, id );
end
local pattern = p.findPattern( propertyId )
if pattern then
local link = mw.ustring.gsub( pattern, '$1', id );
if not title or title == '' then
title = id;
end
return '[' .. link .. ' ' .. title .. ']';
end
return id
end
function p.P212( context, options, id )
return '[[Special:Booksources/' .. id .. '|' .. id .. ']]';
end
function p.P267( context, options, id )
local frame = mw.getCurrentFrame();
return frame:expandTemplate{ title = 'АТХ', args = { id } };
end
function p.P345( context, options, id )
local prefix = options and options.prefix
local number = id
if not string.match( id, '^%d' ) then
prefix = string.sub( id, 1, 2 )
number = string.sub( id, 3 )
end
local label = 'ID ' .. number
if prefix == 'ch' then
return '[[IMDbCharacter:' .. number .. '|' .. label .. ']]'
end
if prefix == 'co' then
return '[[IMDbCompany:' .. number .. '|' .. label .. ']]'
end
if prefix == 'nm' then
return '[[IMDbName:' .. number .. '|' .. label .. ']]'
end
if prefix == 'tt' then
return '[[IMDbTitle:' .. number .. '|' .. label .. ']]'
end
return id;
end
function p.P884( context, options, id )
local frame = mw.getCurrentFrame();
local HydrologyBook = string.sub(id, 13, 15)
local ref = frame:callParserFunction{ name = '#tag:ref', args = { '{{Книга:РПВ ГИ|' .. string.sub(HydrologyBook, 1, 2) .. '|' .. string.sub(HydrologyBook, 3) .. '}}' } }
return id .. ref;
end
function p.P957( context, options, id )
return '[[Special:Booksources/' .. id .. '|' .. id .. ']]';
end
function p.findPattern( property )
local entity = mw.wikibase.getEntity( property:upper() );
if entity then
local statements = entity:getBestStatements( 'P1630' );
for _, statement in pairs( statements ) do
if statement.mainsnak.snaktype == 'value' then
return statement.mainsnak.datavalue.value;
end
end
end
return nil;
end
return p;