Модуль:Wikidata/iwikiQ

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

Данный модуль получает список интервик произвольной странцы по её идентификатору на Викиданных.

Функции

iwiki

{{#invoke:Wikidata/iwikiQ|iwiki|Q12345|f=[[:$1:$2]]|s=", "|lang=}}
Результат: de:Graf Zahl, en:Count von Count, es:Count von Count, eu:Count von Count, gl:Count von Count, it:Count von Count, ja:カウント伯爵, nl:Graaf Tel, pt:Count von Count, ru:Граф фон Знак, simple:Count von Count, ur:کاؤنٹ وون کاؤنٹ

Первый параметр или id - id объекта Викиданных, lang или второй (необязательно) - язык интервики (эти параметры, если отсутствуют, могут браться из вызвавшего шаблона). Если есть параметр lang, выводится название статьи на данном языке без префикса (для подавления действия параметра вызвавшего шаблона введите в invoke пустой параметр lang).

Если параметр lang не задан или пуст, выводится список интервик. Каждый пункт списка форматируется по строке из параметра f, по умолчанию : [[:$1:$2|({{#language:$1|ru}})]]. При этом $1 будет заменяться на код языка, а $2 - на название страницы. Обратите внимание, что функции парсера надо передавать в тэге <nowiki>, иначе они сработают один раз и вряд ли правильно. Разделитель формируется параметром s, по молчанию пустая строка. Если параметр s содержит в начале или в конце пробелы, заключите его в " парные кавычки "; если в начале или в конце стоят кавычки, ""продублируйте"" их.

local M={}

function M.iwiki(f)-- Интервики для указанного языка и указанной страницы (только с ВД)
	local parent = f:getParent()
	local lang = f.args.lang or f.args[2] or parent.args.lang or parent.args[2]
	if lang == "" then
		lang = nil
	end
	local id = f.args.id or f.args[1] or parent.args.id or parent.args[1]
    local function try()
	    if lang then
	        return mw.wikibase.getEntity(id).sitelinks[lang..'wiki'].title
	    else-- список интервик
	        local r={}
	       local fg = f.args.f
	        if fg then
	        	fg = mw.text.unstripNoWiki(fg)
	        else
	        	fg = ": [[:$1:$2|({{#language:$1|ru}})]]"
	        end
	        for k,v in pairs( mw.wikibase.getEntity(id).sitelinks or {} ) do
				if k:sub(-4)=="wiki" then
	            	table.insert( r,  mw.message.newRawMessage(fg):rawParams(k:sub(1,-5),v.title):plain() )
	            end
	        end
                table.sort(r)
	        return f:preprocess( table.concat(r, (f.args.s or "\n"):gsub('^"(.*)"$',"%1"),nil) )
	    end
	end
	local r, result = pcall(try);
    if r then
    	return result
    else
    	return '<strong class="error">Ошибка работы со страницей Викиданных '..(id or mw.wikibase.getEntityIdForCurrentPage())..' ('..result..')</strong>';
    end
end

return M