Přeskočit na obsah

Modul:CheckParameters

Z Wikipedie, otevřené encyklopedie
(rozdíl) ← Starší revize | zobrazit aktuální verzi (rozdíl) | Novější revize → (rozdíl)
local p = {}

local function inSequence(param, sequence)
	for _, value in pairs(sequence) do
		if param == value then
			return true
		end
	end
	return false
end

function p.checkParameters(frame)
	local parent = frame:getParent()
	local template = parent:getTitle()
	local template_content = template:getContent()
	local TemplateDataJSON
	if mw.ustring.match(template_content, '<templatedata>') then
		TemplateDataJSON = mw.text.trim(mw.ustring.match(template_content, '<templatedata>(.-)</templatedata>'))
	else
		local doc = mw.title.new(template.fullText .. '/doc')
		if doc.exists then
			local doc_content = doc:getContent()
			if mw.ustring.match(doc_content, '<templatedata>') then
				TemplateDataJSON = mw.text.trim(mw.ustring.match(doc_content, '<templatedata>(.-)</templatedata>'))
			end
		end
	end
	if not TemplateDataJSON then
		mw.log(mw.ustring.format("TemplateData šablony %s nenalezena", template.fullText))
		return nil
	end

	local TemplateData = mw.text.jsonDecode(TemplateDataJSON)
	local used_params = parent.args or {}
	local all_params = {}
	if TemplateData.params then
		for param, data in pairs(TemplateData.params) do
			table.insert(all_params, param)
			if data.aliases then
				for _, alias in pairs(data.aliases) do
					table.insert(all_params, alias)
				end
			end
		end
	end
	return p._checkParameters(used_params, all_params)
end

function p._checkParameters(used_params, all_params)
	for param in pairs(used_params) do
		if not inSequence(param, all_params) then
			return ''
		end
	end
	return nil
end

return p