Внимание! Это один из самых используемых модулей. |
Прежде чем вносить какие-либо изменения в этот модуль, просьба оттестировать их в /песочнице и проверить результат на странице с /контрольными примерами. Вносить тестированные изменения в этот модуль следует ровно одной правкой. |
Модуль возвращает ссылку на братские проекты согласно информации из Викиданных:
- если есть русская ссылка, возвращается она
- если есть ссылка на родном языке писателя (см. передаваемый аргумент), то используется она. Поддерживаются multiple значения для языка
- если ничего из этого нет, возвращается пустая строка
Использование
- Викиучебник
{{#invoke:Wikidata/Interproject|getWikibooksLink}}
- Викитека
{{#invoke:Wikidata/Interproject|getWikisourceLink}}
- Викицитатник
{{#invoke:Wikidata/Interproject|getWikiquoteLink}}
- Викисловарь
{{#invoke:Wikidata/Interproject|getWiktionaryLink}}
local p = {}; function p.getWikibooksLink ( ) return p.getSisterProjectLink( 'b', 'wikibooks' ); end function p.getWikiquoteLink ( ) return p.getSisterProjectLink( 'q', 'wikiquote' ); end function p.getWikisourceLink ( ) return p.getSisterProjectLink( 's', 'wikisource' ); end function p.getWikipediaLink ( ) return p.getSisterProjectLink( 'w', 'wiki' ); end function p.getWiktionaryLink ( ) return p.getSisterProjectLink( 'wikt', 'wiktionary' ); end function p.getSisterProjectLink( projectInterwikiLettter, projectName ) -- По умолчанию старается достать ссылку на русском, иначе - на родном (P103) local wbStatus, entity = pcall( mw.wikibase.getEntityObject ) if wbStatus ~= true or not entity or not entity.sitelinks then return '' end if entity.sitelinks['ru' .. projectName] then return projectInterwikiLettter .. ':' .. entity.sitelinks['ru' .. projectName].title end if entity.claims then local propValues = entity.claims['P103'] if propValues then local codes = mw.loadData( 'Module:Wikidata:Dictionary/P424' ); for i, propClaim in pairs(propValues) do if propClaim.mainsnak and propClaim.mainsnak.datavalue and propClaim.mainsnak.datavalue.value and propClaim.mainsnak.datavalue.value["numeric-id"] then local languageWikidataId = 'Q' .. propClaim.mainsnak.datavalue.value["numeric-id"] local codesById = codes[languageWikidataId]; if ( codesById ) then for j, code in pairs( codesById ) do local sitelink = entity.sitelinks[code .. projectName] if sitelink then return projectInterwikiLettter .. ':' .. code .. ':' .. sitelink.title end end end end end end end return '' end return p;