Модуль: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 -- возвращаем полученный в модуле результат