Модуль:WDCommon (Bk;rl,&WDCommon)
Вспомогательный модуль для работы с Викиданными. Содержит некоторые высокоуровневые функции для получения типовых сведений, которые могут быть полезны в других модулях.
Функции
[править код]Доступны следующие функции для получения сведений об элементе Викиданных по QID:
- name — название;
- short — короткое название;
- abbr — сокращённое название (возможности ограничены);
- abbrBiblio — сокращённое название в контексте библиографии (возможности ограничены);
- unit — обозначение единицы измерения;
- urlMask — маска адреса URL.
Вторым аргументом функции принимают желаемый/требуемый язык, на котором требуется получить значение.
Внесение изменений
[править код]При исправлении ошибки, пожалуйста, сначала добавьте тест, который будет проваливаться из-за обнаруженной ошибки, и только затем вносите исправление. При внесении исправления проверьте, чтобы все тесты проходили. Вносить исправление можно только, если оно не ломает другие тесты.
Добавление нового функционала рекомендуется делать у себя в песочнице, скопировав в неё модуль. В правке копирования необходимо указать тот факт, что делается копирование, и сделать ссылку на оригинальный модуль в виде викитекста. При добавлении нового функционала сначала желательно добавить тест на этот функционал, затем добавить сам функционал, убедившись, что все тесты при этом проходят.
Тесты
[править код]1 тест провалился.
Название | Ожидается | Фактически | |
---|---|---|---|
test_abbrBiblio | |||
test_name | |||
test_short | |||
test_unit | Модуль:WDCommon/testcases:39: Failed to assert that nil equals expected с | ||
test_urlMask |
require('strict')
local p = {}
local NS_MODULE = 828 --: https://www.mediawiki.org/wiki/Extension_default_namespaces
local moduleNamespace = mw.site.namespaces[NS_MODULE].name
local base = require(moduleNamespace .. ':WDBase')
p.base = base
p.P_SHORT_NAME = 'P1813'
p.P_UNIT = 'P5061'
p.P_URL_MASK = 'P1630'
p.P_NAME = 'P1476'
p.P_ABBR_ENTRY = 'P8703'
p.P_USED_BY = 'P1535'
function p.name(entity, lang)
local name, valueLang = base.tryTextByLang(entity, p.P_NAME, lang)
if not name then
if lang then
name = mw.wikibase.getLabelByLang(entity, lang)
valueLang = lang
end
if not name then
name, valueLang = mw.wikibase.getLabelWithLang(entity)
end
end
return name, valueLang
end
function p.nameData(entity, lang)
local data = {}
data.value, data.lang = base.tryTextByLang(entity, p.P_NAME, lang)
if not data.value then
if lang then
data.value = mw.wikibase.getLabelByLang(entity, lang)
data.lang = lang
end
if not data.value then
data.value, data.lang = mw.wikibase.getLabelWithLang(entity)
end
if data.value then
data.fromLabel = true
end
end
data.entity = entity
return data
end
function p.short(entity, lang)
local short = base.textByLang(entity, p.P_SHORT_NAME, lang)
local ok = true
if not short then
if lang then
short = mw.wikibase.getLabelByLang(entity, lang)
else
short, lang = mw.wikibase.getLabelWithLang(entity)
end
ok = false
end
return short, lang, ok
end
function p.abbr(entity, lang)
-- Currently there is no global property for abbreviations by languages,
-- see [[d:Wikidata:Property proposal/abbreviation for details]]
local abbrByLang = {
ru = 'Q114796497',
}
local abbrTableEntity = abbrByLang[lang]
local abbr = base.valueByQualifier(entity, p.P_ABBR_ENTRY, p.P_USED_BY, abbrTableEntity)
if not abbr then
local short, lang = p.short(entity, lang)
return short, lang, false
end
return abbr, lang, true
end
function p.abbrBiblio(entity, lang)
-- Only Russian language is supported
local abbrByLang = {
ru = 'Q19670003',
}
if not lang then
lang = defaultLang
end
local abbrTableEntity = abbrByLang[lang]
local abbr = base.valueByQualifier(entity, p.P_ABBR_ENTRY, p.P_USED_BY, abbrTableEntity)
if not abbr then
return p.abbr(entity, lang)
end
return abbr, lang, true
end
function p.unit(entity, lang)
return base.textByLang(entity, p.P_UNIT, lang)
end
function p.urlMask(entity, lang)
return base.tryTextByLang(entity, p.P_URL_MASK, lang)
end
return p