Модуль:Wikidata/Interproject
Время | Внимание! Это один из самых используемых модулей. |
Файл:OOjs UI icon notice-warning.svg | Прежде чем вносить какие-либо изменения в данный модуль, просьба оттестировать их в /песочнице и проверить результат на странице с /контрольными примерами. Изменения могут быть внесены после этого в данный модуль всего одной правкой. |
Модуль возвращает ссылку на братские проекты согласно информации из Викиданных:
- если есть русская ссылка, возвращается она
- если есть ссылка на родном языке писателя (см. передаваемый аргумент), то используется она. Поддерживаются multiple значения для языка
- если ничего из этого нет, возвращается пустая строка
Использование[править код]
- Викиучебник
{{#invoke:Wikidata/Interproject|getWikibooksLink}}
- Викитека
{{#invoke:Wikidata/Interproject|getWikisourceLink}}
- Викицитатник
{{#invoke:Wikidata/Interproject|getWikiquoteLink}}
- Викисловарь
{{#invoke:Wikidata/Interproject|getWiktionaryLink}}
local p = {}
function p.getWikibooksLink( context )
return p.getSisterProjectLink( 'b', 'wikibooks', context.args.from )
end
function p.getWikiquoteLink( context )
return p.getSisterProjectLink( 'q', 'wikiquote', context.args.from )
end
function p.getWikisourceLink( context )
return p.getSisterProjectLink( 's', 'wikisource', context.args.from )
end
function p.getWikipediaLink( context )
return p.getSisterProjectLink( 'w', 'wiki', context.args.from )
end
function p.getWiktionaryLink( context )
return p.getSisterProjectLink( 'wikt', 'wiktionary', context.args.from )
end
function p.getSisterProjectLink( projectInterwikiPrefix, projectName, entityId )
entityId = entityId or mw.wikibase.getEntityIdForCurrentPage()
-- По умолчанию старается достать ссылку на русском, иначе - на родном (P103)
local wbStatus, sitelink = pcall( mw.wikibase.getSitelink, entityId, 'ru' .. projectName )
if wbStatus and sitelink then
return projectInterwikiPrefix .. ':' .. sitelink
end
local wbStatus, langClaims = pcall( mw.wikibase.getBestStatements, entityId, 'P103' )
if wbStatus ~= true or not langClaims then
return ''
end
local codes = mw.loadData( 'Module:Wikidata:Dictionary/P424' )
for _, claim in ipairs( langClaims ) do
if claim.mainsnak and
claim.mainsnak.datavalue and
claim.mainsnak.datavalue.value and
claim.mainsnak.datavalue.value.id
then
local codesById = codes[ claim.mainsnak.datavalue.value.id ]
if codesById then
for _, code in ipairs( codesById ) do
wbStatus, sitelink = pcall( mw.wikibase.getSitelink, entityId, code .. projectName )
if wbStatus and sitelink then
return projectInterwikiPrefix .. ':' .. code .. ':' .. sitelink
end
end
end
end
end
return ''
end
return p