Модуль:Wikidata/link: различия между версиями
Перейти к навигации
Перейти к поиску
Буквица>Всеслав Чародей |
Karaby (обсуждение | вклад) м 1 версия импортирована |
(нет различий)
| |
Текущая версия от 15:36, 27 июля 2025
Набор функций для преобразования 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 )
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 '[https://verum.icu/index.php?claster=gvr&q=' .. id .. ' ' .. id .. ']';
else
local ref = frame:callParserFunction{ name = '#tag:ref', args = { '{{Книга:РПВ ГИ|' .. HydrologyBookTom .. '|' .. HydrologyBookVypusk .. '}}' } };
return '[https://verum.icu/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;