Modul:Tjek for ukendte parametre/sandkasse

Documentation icon Moduldokumentation[vis] [redigér] [historik] [opfrisk]

Dette modul kan indsættes i skabelonkoden for at tjekke om ukendte parametre bliver anvendt blandt de sider, der benytter skabelonen.

{{#invoke:Tjek for ukendte parametre|check
|unknown=[[Kategori:Navn på ønsket sporingskategori|_VALUE_|ignoreblank=ja]]
|arg1|arg2|...|argN}}

Her er arg1, arg2, ..., argN de kendte parametre. Enhver parameter der er brugt, men ikke befinder sig i denne liste, vil få modulet til at tilføje siden til den angivne sporingskategori. Værdien _VALUE_ vil blive erstattet med navnet på den ukendte parameter. Dette er praktisk, fordi det vil sortere siderne i kategorien baseret på den ukendte parameters navn. På den måde kan man nemmere finde frem til den ukendte parametre, fordi man kender parameterens begyndelsesbogstav.

Som regel ønsker man ikke at medtage ukendte parametre som er blanke (uden værdi). Dette kan undgås ved at tilføje parameteren |ignoreblank=ja. Man kan også udfylde parameteren |unknown= med mere information som vist i eksemplet neden for.

Eksempel

redigér

Eksempel med skabelonkode med kun fire parametre

{{Infoboks 
| above = {{{navn|}}}

| label1 = Højde
| data1 = {{{height|}}}

| label2 = Vægt
| data2 = {{{vægt|}}}

| label3 = Hjemmeside
| data3 = {{{website|}}}
}}<!-- 
  slut på selve skabelonen
-->{{#invoke:Tjek for ukendte parametre|check
| unknown = <span class=error> Ukendt parameter i [[Skabelon:skabelonnavn]]: _VALUE_</span>[[Kategori:Navn på ønsket sporingskategori|_VALUE_]]
| ignoreblank = ja
| navn | højde| vægt | website }}

Hvis skabelonen indeholder mange kendte parametre, kan det være upraktisk at skulle skrive deres navne ind manuelt. I stedet kan man skaffe en liste over parametrene ved at vælge knappen Manage TemplateData, der kommer frem øverst på siden når man i skabelonen klikker på "Rediger wikikode". Listen kommer frem når man trykker "Add xxx suggested parameters". Når listen er kopieret til et tekstdokument, siger man "Cancel", så Templatedata ikke gemmes. I tekstdokumentet erstatter man samtlige kommaer med |, inden listen kopieres ind i skabelonkoden på det rigtige sted forklaret oven for.

Skabeloner der bruger dette modul

redigér

Et par af de skabeloner der i øjeblikket anvender modulet:

Skabeloner der anvender "Modul:Tjek for ukendte parametre"
Skabelon Sporingskategori
{{Infoboks Wikidata person}} Kategori:Sider med ukendte parametre i Infoboks Wikidata person ( 127 )
{{Infoboks skuespiller}} Kategori:Sider med ukendte parametre i Infoboks skuespiller ( 48 )

Se også

redigér
-- This module may be used to compare the arguments passed to the parent
-- with a list of arguments, returning a specified result if an argument is
-- not on the list
local p = {}

local function trim(s)
	return s:match('^%s*(.-)%s*$')
end

local function isnotempty(s)
	return s and s:match('%S')
end

local function clean(text)
	-- Return text cleaned for display and truncated if too long.
	-- Strip markers are replaced with dummy text representing the original wikitext.
	local pos, truncated
	local function truncate(text)
		if truncated then
			return ''
		end
		if mw.ustring.len(text) > 25 then
			truncated = true
			text = mw.ustring.sub(text, 1, 25) .. '...'
		end
		return mw.text.nowiki(text)
	end
	local parts = {}
	for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do
		pos = remainder
		table.insert(parts, truncate(before) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;')
	end
	table.insert(parts, truncate(text:sub(pos or 1)))
	return table.concat(parts)
end

function p._check(args, pargs)
	if type(args) ~= "table" or type(pargs) ~= "table" then
		-- TODO: error handling
		return
	end

	-- create the list of known args, regular expressions, and the return string
	local knownargs = {}
	local regexps = {}
	for k, v in pairs(args) do
		if type(k) == 'number' then
			v = trim(v)
			knownargs[v] = 1
		elseif k:find('^regexp[1-9][0-9]*$') then
			table.insert(regexps, '^' .. v .. '$')
		end
	end

	-- loop over the parent args, and make sure they are on the list
	local ignoreblank = isnotempty(args['ignoreblank'])
	local showblankpos = isnotempty(args['showblankpositional'])
	local values = {}
	for k, v in pairs(pargs) do
		if type(k) == 'string' and knownargs[k] == nil then
			local knownflag = false
			for _, regexp in ipairs(regexps) do
				if mw.ustring.match(k, regexp) then
					knownflag = true
					break
				end
			end
			if not knownflag and ( not ignoreblank or isnotempty(v) )  then
				table.insert(values, clean(k))
			end
		elseif type(k) == 'number' and knownargs[tostring(k)] == nil then
			local knownflag = false
			for _, regexp in ipairs(regexps) do
				if mw.ustring.match(tostring(k), regexp) then
					knownflag = true
					break
				end
			end
			if not knownflag and ( showblankpos or isnotempty(v) ) then
				table.insert(values, k .. ' = ' .. clean(v))
			end
		end
	end

	-- add results to the output tables
	local res = {}
	if #values > 0 then
		local unknown_text = args['unknown'] or 'Found _VALUE_, '

		if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
			local preview_text = args['preview']
			if isnotempty(preview_text) then
				preview_text = require('Module:If preview')._warning({preview_text})
			elseif preview == nil then
				preview_text = unknown_text
			end
			unknown_text = preview_text
		end
		for _, v in pairs(values) do
			-- Fix odd bug for | = which gets stripped to the empty string and
			-- breaks category links
			if v == '' then v = ' ' end

			-- avoid error with v = 'example%2' ("invalid capture index")
			local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v})
			table.insert(res, r)
		end
	end

	return table.concat(res)
end

function p.check(frame)
	local args = frame.args
	local pargs = frame:getParent().args
	return p._check(args, pargs)
end

return p