Модул:Wikidata/redLink

Мавод аз Википедиа — донишномаи озод

Для реализации {{Мақола нест}}, простановки красных ссылок модулем Wikidata и части шаблона {{iw}}.

Санҷишҳо[вироиши манбаъ]

3 тестов провалено.

test_formatRedLinkFromTemplate:

Текст Ожидаемое значение Фактическое значение
✔ {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate }} Унсури Викидода нишон дода нашудааст Унсури Викидода нишон дода нашудааст
✔ {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q6 }} Унсур ишора надорад Q6 Унсур ишора надорад Q6
N {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q42 }} Дуглас Адамс Douglas Adams
N {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q42 | Дуглас Ноэл Адамс }} Дуглас Ноэл Адамс Дуглас Ноэл Адамс
✔ {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q2 | Замин }} Замин Замин
✔ {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q3124803 | HD 23985 }} HD 23985 HD 23985
N {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q100712902 | Я. Венник }} Я. Венник Унсур ишора надорад Q100712902
✔ {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q84437742 | LDS 5078 }} LDS 5078 LDS 5078
✔ {{#invoke:Wikidata/redLink | formatRedLinkFromTemplate | Q74169392 | [GS55] 204 }} [GS55] 204 [GS55] 204

test_getBioInfobox:

Текст Ожидаемое значение Фактическое значение
✔ getBioInfobox() Шахс Шахс
✔ getBioInfobox('Q81840636') Шахс Шахс
✔ getBioInfobox('Q40192238') Олим Олим

test_getInfobox:

Текст Ожидаемое значение Фактическое значение
✔ getInfobox() Қуттии ҳамагонӣ Қуттии ҳамагонӣ
✔ getInfobox('Q6') Қуттии ҳамагонӣ Қуттии ҳамагонӣ
✔ getInfobox('Q1') Қуттии ҳамагонӣ Қуттии ҳамагонӣ
✔ getInfobox('Q35762485') Қуттии ҳамагонӣ Қуттии ҳамагонӣ
✔ getInfobox('Q42') Шахс Шахс
✔ getInfobox('Q3427') Ситора Ситора
✔ getInfobox('Q4869') Галактика Галактика
✔ getInfobox('Q42', 'Адиб') Адиб Адиб

local p = {};

function p.formatRedLink(title, text, entityId, infobox)
	if infobox == nil or infobox == '' then
		infobox = 'Қуттии ҳамагонӣ'
	end
	return mw.ustring.format(
		'<span class="plainlinks">[//tg.wikipedia.org/w/index.php?title=%s&action=edit&editintro=Шаблон:Мақола_нест/editintro&preload=Шаблон:Мақола_нест/preload&preloadparams%%5B%%5D=%s&preloadparams%%5B%%5D=%s&preloadparams%%5B%%5D=%s <span style="color: #ba0000; text-decoration: inherit; -moz-text-decoration-color: #ba0000; text-decoration-color: #ba0000;">%s</span>]</span>',
		mw.uri.encode(title), entityId, mw.uri.encode(title), string.gsub(infobox, ' ', '+') , mw.text.nowiki(text)
	)
end

function p.formatRedLinkWithInfobox(title, text, entityId, defaultInfobox)
	return p.formatRedLink(title, text, entityId, p.getInfobox(entityId, defaultInfobox))
end

function p.getInfobox(entityId, defaultInfobox)
	if defaultInfobox then
		return defaultInfobox
	end
	if entityId then
		local result = mw.wikibase.getBestStatements(entityId, 'P31')
		for _, statement in pairs(result) do
			if statement.mainsnak.datavalue then
				local type = statement.mainsnak.datavalue.value.id
				if		type == 'Q5'	then return p.getBioInfobox(entityId)
				elseif	type == 'Q523'	then return 'Ситора'
				elseif	type == 'Q318'	then return 'Галактика'
				end
			end
		end
	end
	return 'Қуттии ҳамагонӣ'
end

function p.getBioInfobox(entityId)
	if entityId then
		local result = mw.wikibase.getBestStatements(entityId, 'P106')
		for _, statement in pairs(result) do
			if statement.mainsnak.datavalue then
				local occupation = statement.mainsnak.datavalue.value.id
				if occupation == 'Q901' then return 'Олим'
				end
			end
		end
	end
	return 'Шахс'
end

function p.formatRedLinkFromTemplate(frame)
	local args = frame['args']
	if not args[1] then -- may be arguments are passed from the parent template?
		args = frame:getParent().args
	end
	
	if not args[1] then
		return '<span class="error">Унсури Викидода нишон дода нашудааст</span>'
	end
	local entityId = mw.text.trim(args[1])

	local title = mw.wikibase.label(entityId)
	if not title then
		return mw.ustring.format('<span class="error">Унсур ишора надорад %s</span>', entityId)
	elseif mw.ustring.match(title, '[%[%]:]') then -- cannot create page with this name
		return title
	end
	local text = title
	if args[2] then
		text = mw.text.trim(args[2])
	end
	
	local sitelink = mw.wikibase.sitelink(entityId)
	if sitelink then
		if text == sitelink then
			return '[[' .. sitelink .. ']]'
		else
			return '[[' .. sitelink .. '|' .. text .. ']]'
		end
	end	

	return p.formatRedLinkWithInfobox(title, text, entityId, args[3])
end

return p