Модуль:Wikidata/link
Поделись знанием:
< Модуль:Wikidata
Это текущая версия страницы, сохранённая Putnik (обсуждение | вклад) в 12:40, 16 июля 2016. Вы просматриваете постоянную ссылку на эту версию.
Документация
Предназначен для преобразования ID из свойств Викиданных в работающие ссылки. Работает совместно с {{Wikidata/link}}.
Если для свойства не прописана функция для форматирования, используется форматтер из свойства d:Property:P1630.
Во избежание поломок страниц, использующих данный модуль, желательно экспериментировать в Песочнице для модулей.
p = {} function p.fromTemplate( frame ) local args = frame.args; local propertyId = args[1]; local id = args[2]; return p.generateLink( propertyId, id ) end function p.fromModule( context, options, id ) return p.generateLink( options['property'], id ) end function p.generateLink( propertyId, id ) if p[propertyId] then return p[propertyId]( nil, nil, id ); end local pattern = p.findPattern( propertyId ) if pattern then return mw.ustring.gsub( '[' .. pattern .. ' $1]', '$1', id ) .. '' end return id end function p.p163( context, options, id ) return '[[' .. id .. '|Флаг]]'; end function p.p212( context, options, id ) return '[[Special:Booksources/' .. id .. '|' .. id .. ']]'; end function p.p237( context, options, id ) return '[[' .. id .. '|Герб]]'; end function p.p247( context, options, id ) return '[nssdc.gsfc.nasa.gov/nmc/spacecraftOrbit.do?id=' .. id .. ' ' .. id .. ']'; end function p.p267( context, options, id ) local frame = mw.getCurrentFrame() return frame:expandTemplate{ title = 'АТХ', args = { id } }; end function p.p296( context, options, id ) return '[osm.sbin.ru/esr/esr:' .. id .. ' ' .. id .. ']'; end function p.p345( context, options, id ) local number = string.sub( id, 3 ) local label = 'ID ' .. number if string.match( id, '^ch' ) then return '[[IMDbCharacter:' .. number .. '|' .. label .. ']]' end if string.match( id, '^co' ) then return '[[IMDbCompany:' .. number .. '|' .. label .. ']]' end if string.match( id, '^nm' ) then return '[[IMDbName:' .. number .. '|' .. label .. ']]' end if string.match( id, '^tt' ) then return '[[IMDbTitle:' .. number .. '|' .. label .. ']]' end return id; end function p.p685( context, options, id ) return '[www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=' .. id .. ' ' .. id .. ']'; end function p.p721( context, options, id ) local label = ''; for i = mw.ustring.len( id ), 1, -3 do if ( i ~= mw.ustring.len( id ) ) then label = ' ' .. label; end if ( i - 2 <= 0 ) then label = mw.ustring.sub( id, 0, i ) .. label; else label = mw.ustring.sub( id, i - 2, i ) .. label; end end return '[classif.spb.ru/classificators/view/okt.php?st=A&kr=1&kod=' .. id .. ' ' .. label .. ']'; end function p.p764( context, options, id ) local label = ''; for i = mw.ustring.len( id ), 1, -3 do if ( i ~= mw.ustring.len( id ) ) then label = ' ' .. label; end if ( i - 2 <= 0 ) then label = mw.ustring.sub( id, 0, i ) .. label; else label = mw.ustring.sub( id, i - 2, i ) .. label; end end return '[classif.spb.ru/classificators/view/tma.php?st=A&kr=1&kod=' .. id .. ' ' .. label .. ']'; end function p.p957( context, options, id ) return '[[Special:Booksources/' .. id .. '|' .. id .. ']]'; end function p.p1258( context, options, id ) return '[www.rottentomatoes.com/' .. 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;