Модуль:Wikidata/link
Набор функций для преобразования ID из свойств Викиданных в работающие ссылки.
Обычно для ссылок используется URL-форматтер из свойства Ошибка Lua в Модуль:WD на строке 450: attempt to index field 'wikibase' (a nil value)., его можно изменить параметром 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.wiki/index.php?claster=gvr&q=' .. id .. ' ' .. id .. ']'; else local ref = frame:callParserFunction{ name = '#tag:ref', args = { '{{Книга:РПВ ГИ|' .. HydrologyBookTom .. '|' .. HydrologyBookVypusk .. '}}' } }; return '[https://verum.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;