Модуль:Spouse

Материал из Буквицы
Перейти к навигации Перейти к поиску

Используется в {{Spouse}} (см. его документацию).

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


local sp = {} -- Как положено в языке Lua, объявляем имя результирующей переменной модуля.

function spouseId ( ddd ) --[[ объявляем внутреннюю функцию, выдающую, как результат,
перечень супругов (при их наличии) из заданного элемента Викиданных ]]
	spouseId = '' -- присваиваем результирующей переменной пустое значение
	test , GetSpouseId = pcall ( mw.wikibase.getBestStatements , ddd , 'P26' ) --[[ производим безопасный запрос
таблицы с перечнем супругов из заданного элемента Викиданных ]]
	if not test -- проверяем: если запрос был неудачным,
		then do return spouseId end -- то возвращаем пустое значение
	end -- закончили проверку
	for key1, key2 in pairs ( GetSpouseId ) -- для каждой пары полученных табличных данных производим циклические действия
		do spouseId = spouseId .. ',' .. key2.mainsnak.datavalue.value.id --[[ добавляем к результирующей переменной запятую
и id элемента Викиданных очередного супруга ]]
	end -- циклические действия закончились
	spouseId = string.gsub( spouseId, ',' , '', 1 ) -- вырезаем из результирующей переменной ненужную начальную запятую
	return spouseId -- возвращаем результирующую переменную
end; -- локальная функция закончилась

function siteLink ( bbb ) --[[ объявляем внутреннюю функцию, выдающую, как результат,
ссылку на страницу Википедии (при её наличии) из заданного элемента Викиданных ]]
	GetsiteLink = mw.wikibase.getSitelink ( bbb , 'ruwiki' ) --[[ производим запрос
ссылки на статью в разделе Википедии на русском языке из заданного элемента Викиданных ]]
	if GetsiteLink ~= nil -- проверяем: если запрос был успешным,
		then do return '[[' .. GetsiteLink .. ']]' end -- то возвращаем ссылку на статью в формате [[Название статьи]]
	end -- закончили проверку
	GetsiteLink =mw.wikibase.getSitelink ( bbb , 'enwiki' ) --[[ производим запрос
ссылки на статью в разделе Википедии на английском языке из заданного элемента Викиданных ]]
	if GetsiteLink ~= nil -- проверяем: если запрос был успешным,
		then do return '[[:en:' .. GetsiteLink .. '|' .. GetsiteLink .. ']]' end -- то возвращаем ссылку на статью
-- в формате [[:en:Page name|Page name]]
	end -- закончили проверку
	GetsiteLink = mw.wikibase.getSitelink ( bbb , 'dewiki' ) --[[ производим запрос
ссылки на статью в разделе Википедии на немецком языке из заданного элемента Викиданных ]]
	if GetsiteLink ~= nil -- проверяем: если запрос был успешным,
		then do return '[[:de:' .. GetsiteLink .. '|' .. GetsiteLink .. ']]' end -- то возвращаем ссылку на статью
-- в формате [[:de:Page name|Page name]]
	end -- закончили проверку
	return nil -- если все запросы оказались безуспешными, возвращаем пустое значение
end; -- локальная функция закончилась

function sid (eee) --[[ объявляем внутреннюю функцию, выдающую, как результат,
id элемента Викиданных, для которого будет составляться список супругов ]]
	test2, test3 = pcall ( mw.wikibase.entityExists , eee ) --[[ производим безопасный запрос
на предмет существования заданного элемента Викиданных ]]
	if test2 and test3 and eee ~= 'Q6' -- проверяем: если запрос оказался успешным и заданный элемент Викиданных существует,
		then do return eee end -- то возвращаем id заданного элемента Викиданных
    end -- закончили проверку
	return mw.wikibase.getEntityIdForCurrentPage() -- возвращаем id элемента Викиданных,
-- привязанного к странице, вызывающей модуль
end; -- локальная функция закончилась

function sp.spouse (frame) --[[ объявляем глобальную функцию, выдающую, как результат,
для человека с заданным id элемента Вкиданных,
или человека, со страницы которого производится вызов функции,
ссылку на страницу Википедии о единственном(ой) супруге, указанном на Викиданных,
или маркированный список таких супругов при их неединственности ]]
	if frame.args and frame.args[1] and frame.args[1] ~='' -- проверяем: если прислан аргумент,
		then vid = frame.args[1] -- то присваиваем переменной значение присланного аргумента
		else vid = 'Q6' -- иначе присваиваем переменной значение id несуществующего элемента Викиданных
	end -- закончили проверку
	id = sid ( vid ) --[[ через локальную функцию присваиваем переменной
значение id элемента Викиданных, с которым придётся работать ]]
	if id == nil -- проверяем: если нет такого элемента Викиданных,
		then do return nil end -- то возвращаем пустое значение
	end -- закончили проверку
	id2 = spouseId ( id ) --[[ через локальную функцию присваиваем переменной
значение списка id элементов Викиданных супругов ]]
	if id2 == '' -- проверяем: если на Викиданных отсутствуют супруги,
		then do return nil end -- то возвращаем пустое значение
	end -- закончили проверку
	if mw.ustring.match(id2, ",") == nil -- проверяем: если получен не список супругов, а единственное значение,
		then do return siteLink (id2) end -- то возвращаем ссылку (при её наличии) на соответствующую статью
	end -- закончили проверку
	spouse = '' -- задаём переменной пустое значение
	for did in mw.ustring.gmatch ( id2 , "[Qq]%d+" ) -- для каждого супруга 
	do -- делаем циклические действия
		spouse2 = siteLink (did) -- запрашиваем ссылку на страницу
		if spouse2 ~= nil -- проверяем: если сссылка на страницу получена, 
			then spouse = spouse .. '\n* ' .. spouse2 -- то добавляем её в маркированный список
		end -- закончили проверку
	end -- закончили циклические действия
	return spouse -- возвращаем полученный в функции результат
end -- глобальная функция закончилась

return sp -- возвращаем полученный в модуле результат