Модуль:WDCommon

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация

Вспомогательный модуль для работы с Викиданными. Содержит некоторые высокоуровневые функции для получения типовых сведений, которые могут быть полезны в других модулях.

Функции

[править код]

Доступны следующие функции для получения сведений об элементе Викиданных по QID:

  • name — название;
  • short — короткое название;
  • abbr — сокращённое название (возможности ограничены);
  • abbrBiblio — сокращённое название в контексте библиографии (возможности ограничены);
  • unit — обозначение единицы измерения;
  • urlMask — маска адреса URL.

Вторым аргументом функции принимают желаемый/требуемый язык, на котором требуется получить значение.

Внесение изменений

[править код]

При исправлении ошибки, пожалуйста, сначала добавьте тест, который будет проваливаться из-за обнаруженной ошибки, и только затем вносите исправление. При внесении исправления проверьте, чтобы все тесты проходили. Вносить исправление можно только, если оно не ломает другие тесты.

Добавление нового функционала рекомендуется делать у себя в песочнице, скопировав в неё модуль. В правке копирования необходимо указать тот факт, что делается копирование, и сделать ссылку на оригинальный модуль в виде викитекста. При добавлении нового функционала сначала желательно добавить тест на этот функционал, затем добавить сам функционал, убедившись, что все тесты при этом проходят.

✔ Все тесты пройдены.

Название Ожидается Фактически
✔ test_abbrBiblio
✔ test_name
✔ test_short
✔ test_unit
✔ 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