Модуль:Wikidata/Interproject: различия между версиями
Перейти к навигации
Перейти к поиску
[отпатрулированная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
Vlsergey (обсуждение | вклад) Нет описания правки |
Putnik (обсуждение | вклад) м fix |
||
Строка 35: | Строка 35: | ||
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 |
||
local languageWikidataId = 'Q' .. propClaim.mainsnak.datavalue.value["numeric-id"] |
local languageWikidataId = 'Q' .. propClaim.mainsnak.datavalue.value["numeric-id"] |
||
local code = |
local code = codes[languageWikidataId] or getLangCodeByArticle(entity:getSitelink('ruwiki'))[1] |
||
if code then |
if code then |
||
local sitelink = entity.sitelinks[code .. projectName] |
local sitelink = entity.sitelinks[code .. projectName] |
Версия от 10:44, 19 августа 2014
![]() | Внимание! Это один из самых используемых модулей. |
![]() | Прежде чем вносить какие-либо изменения в этот модуль, просьба оттестировать их в /песочнице и проверить результат на странице с /контрольными примерами. |
Модуль возвращает ссылку на братские проекты согласно информации из Викиданных:
- если есть русская ссылка, возвращается она
- если есть ссылка на родном языке писателя (см. передаваемый аргумент), то используется она. Поддерживаются multiple значения для языка
- если ничего из этого нет, возвращается пустая строка
Использование
- Викиучебник
{{#invoke:Wikidata/Interproject|getWikibooksLink}}
- Викитека
{{#invoke:Wikidata/Interproject|getWikisourceLink}}
- Викицитатник
{{#invoke:Wikidata/Interproject|getWikiquoteLink}}
- Викисловарь
{{#invoke:Wikidata/Interproject|getWiktionaryLink}}
local p = {};
local function getLangCodeByArticle(name) -- длинный список
local L=mw.loadData("Module:Languages/data");
for k,v in pairs(L) do
if v[2] == name then return k end
end
return {false}
end
function p.getWikisourceLink ( )
return p.getSisterProjectLink( 's', 'wikisource' )
end
function p.getWikiquoteLink ( )
return p.getSisterProjectLink( 'q', 'wikiquote' )
end
function p.getSisterProjectLink( projectInterwikiLettter, projectName )
-- По умолчанию старается достать ссылку на русском,
-- иначе - на родном (P103), иначе - на хоть бы каком
local entity = mw.wikibase.getEntityObject()
if 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/Language-codes');
for index, 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 code = codes[languageWikidataId] or getLangCodeByArticle(entity:getSitelink('ruwiki'))[1]
if code then
local sitelink = entity.sitelinks[code .. projectName]
if sitelink then
return projectInterwikiLettter .. ':' .. code .. ':' .. sitelink.title
end
end
end
end
end
end
-- just take the first one...
for key, value in pairs(entity.sitelinks) do
if mw.ustring.sub(key, 0 - mw.ustring.len("projectName")) == projectName then
return projectInterwikiLettter .. ':' .. mw.ustring.sub(key, 0, mw.ustring.len(key) - 10) .. ':' .. value.title
end
end
return ''
end
return p;