Набор функций для преобразования ID из свойств Викиданных в работающие ссылки.
Обычно для ссылок используется URL-форматтер из свойства маска URL (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 )
if id:match("^[%s-0-9X]*$") or id:match("^%s*ISBN[%s-0-9X]*$") then
return '[[Special:Booksources/' .. id .. '|' .. id .. ']]';
else
local frame = mw.getCurrentFrame();
if id:match("<br") or id:match("\*") then
return frame:expandTemplate{ title = 'Некорректный ISBN', args = { ['1']=id, noprefix='1', nolink='1' } };
else
return frame:expandTemplate{ title = 'Некорректный ISBN', args = { ['1']=id, noprefix='1' } };
end
end
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 == '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 HydrologyBookTom = string.sub(id, 13, 14);
local HydrologyBookVypusk = string.sub(id, 15, 15);
if HydrologyBookTom == '99' then
return '[http://ver.m.wiki/index.php?claster=gvr&q=' .. id .. ' ' .. id .. ']';
else
local ref = frame:callParserFunction{ name = '#tag:ref', args = { '{{Книга:РПВ ГИ|' .. HydrologyBookTom .. '|' .. HydrologyBookVypusk .. '}}' } };
return '[http://ver.m.wiki/index.php?claster=gvr&q=' .. id .. ' ' .. id .. ']' .. ref;
end
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;