Модуль:Wikidata/link: различия между версиями
Материал из ChronoWiki
Перейти к навигацииПерейти к поиску (- пока нет рабочего ОКАТО/ОКТМО) |
Lirik (обсуждение | вклад) м (1 версия импортирована) |
(нет различий)
|
Текущая версия на 00:08, 4 января 2020
Набор функций для преобразования 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;