Admin (обсуждение | вклад) м (1 версия импортирована) |
Admin (обсуждение | вклад) м (1 версия импортирована) |
||
(не показаны 2 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
local p = {} | local p = {} | ||
function p.getWikibooksLink ( ) | function p.getWikibooksLink( context ) | ||
return p.getSisterProjectLink( 'b', 'wikibooks' ) | return p.getSisterProjectLink( 'b', 'wikibooks', context.args.from ) | ||
end | end | ||
function p.getWikiquoteLink ( ) | function p.getWikiquoteLink( context ) | ||
return p.getSisterProjectLink( 'q', 'wikiquote' ) | return p.getSisterProjectLink( 'q', 'wikiquote', context.args.from ) | ||
end | end | ||
function p.getWikisourceLink ( ) | function p.getWikisourceLink( context ) | ||
return p.getSisterProjectLink( 's', 'wikisource' ) | return p.getSisterProjectLink( 's', 'wikisource', context.args.from ) | ||
end | end | ||
function p.getWikipediaLink ( ) | function p.getWikipediaLink( context ) | ||
return p.getSisterProjectLink( 'w', 'wiki' ) | return p.getSisterProjectLink( 'w', 'wiki', context.args.from ) | ||
end | end | ||
function p.getWiktionaryLink ( ) | function p.getWiktionaryLink( context ) | ||
return p.getSisterProjectLink( 'wikt', 'wiktionary' ) | return p.getSisterProjectLink( 'wikt', 'wiktionary', context.args.from ) | ||
end | end | ||
function p.getSisterProjectLink( | function p.getSisterProjectLink( projectInterwikiPrefix, projectName, entityId ) | ||
entityId = entityId or mw.wikibase.getEntityIdForCurrentPage() | |||
-- По умолчанию старается достать ссылку на русском, иначе - на родном (P103) | -- По умолчанию старается достать ссылку на русском, иначе - на родном (P103) | ||
local wbStatus, | local wbStatus, sitelink = pcall( mw.wikibase.getSitelink, entityId, 'ru' .. projectName ) | ||
if wbStatus ~= true or not | 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 '' | return '' | ||
end | 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 | ||
Строка 51: | Строка 52: | ||
end | end | ||
end | end | ||
return '' | return '' | ||
end | end | ||
return p | return p |
Текущая версия от 18:34, 21 июня 2023
Внимание! Это один из самых используемых модулей. |
Прежде чем вносить какие-либо изменения в этот модуль, просьба оттестировать их в /песочнице и проверить результат на странице с /контрольными примерами. Вносить тестированные изменения в этот модуль следует ровно одной правкой. |
Модуль возвращает ссылку на братские проекты согласно информации из Викиданных:
- если есть русская ссылка, возвращается она
- если есть ссылка на родном языке писателя (см. передаваемый аргумент), то используется она. Поддерживаются 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