Модуль:Wikidata/Interproject: различия между версиями
Перейти к навигации
Перейти к поиску
Peandre2 (обсуждение | вклад) м (1 версия импортирована) |
ru>Dima st bk (fix) |
||
Строка 1: | Строка 1: | ||
local p = {}; | local p = {}; | ||
− | + | ||
+ | function p.getWikibooksLink ( ) | ||
+ | return p.getSisterProjectLink( 'b', 'wikibooks' ); | ||
+ | end | ||
+ | |||
+ | function p.getWikiquoteLink ( ) | ||
+ | return p.getSisterProjectLink( 'q', 'wikiquote' ); | ||
+ | end | ||
+ | |||
function p.getWikisourceLink ( ) | function p.getWikisourceLink ( ) | ||
return p.getSisterProjectLink( 's', 'wikisource' ); | return p.getSisterProjectLink( 's', 'wikisource' ); | ||
+ | end | ||
+ | |||
+ | function p.getWikipediaLink ( ) | ||
+ | return p.getSisterProjectLink( 'w', 'wiki' ); | ||
end | end | ||
− | function p. | + | function p.getWiktionaryLink ( ) |
− | return p.getSisterProjectLink( ' | + | return p.getSisterProjectLink( 'wikt', 'wiktionary' ); |
end | end | ||
− | + | ||
function p.getSisterProjectLink( projectInterwikiLettter, projectName ) | function p.getSisterProjectLink( projectInterwikiLettter, projectName ) | ||
-- По умолчанию старается достать ссылку на русском, иначе - на родном (P103) | -- По умолчанию старается достать ссылку на русском, иначе - на родном (P103) | ||
− | local entity = mw.wikibase.getEntityObject | + | local wbStatus, entity = pcall( mw.wikibase.getEntityObject ) |
− | if not entity or not entity.sitelinks then | + | if wbStatus ~= true or not entity or not entity.sitelinks then |
return '' | return '' | ||
end | end | ||
Строка 18: | Строка 30: | ||
return projectInterwikiLettter .. ':' .. entity.sitelinks['ru' .. projectName].title | return projectInterwikiLettter .. ':' .. entity.sitelinks['ru' .. projectName].title | ||
end | end | ||
− | + | ||
if entity.claims then | if entity.claims then | ||
local propValues = entity.claims['P103'] | local propValues = entity.claims['P103'] | ||
if propValues then | if propValues then | ||
− | local codes = mw.loadData('Module:Wikidata:Dictionary/P424'); | + | local codes = mw.loadData( 'Module:Wikidata:Dictionary/P424' ); |
for i, propClaim in pairs(propValues) do | 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 | if propClaim.mainsnak and propClaim.mainsnak.datavalue and propClaim.mainsnak.datavalue.value and propClaim.mainsnak.datavalue.value["numeric-id"] then | ||
Строка 39: | Строка 51: | ||
end | end | ||
end | end | ||
− | + | ||
return '' | return '' | ||
end | end | ||
− | + | ||
return p; | return p; |
Версия 12:42, 2 августа 2017
Внимание! Это один из самых используемых модулей. Каждое его изменение создаёт дополнительную нагрузку на серверы проекта. Пожалуйста, убедитесь в адекватности и правильности ваших изменений, проверьте их на тестовых страницах. |
Прежде чем вносить какие-либо изменения в данный модуль, просьба оттестировать их в /песочнице и проверить результат на странице с /контрольными примерами. Изменения могут быть внесены после этого в данный модуль всего одной правкой. |
Модуль возвращает ссылку на братские проекты согласно информации из Викиданных:
- если есть русская ссылка, возвращается она
- если есть ссылка на родном языке писателя (см. передаваемый аргумент), то используется она. Поддерживаются 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;