Modul:Tjek for ukendte parametre
![]() | Dette Lua-modul bruges på ca. 387.000 sider, eller omkring 40% af alle sider. For at undgå store forstyrrelser og unødvendigt pres på serverne, bør alle ændringer af skabelonen først afprøves i dens tilhørende modulets /sandkasse eller /test-undersider, eller i din egen module sandkasse. De færdigafprøvede ændringer kan derefter overføres til denne side ved en enkelt redigering. Du bør også overveje at diskutere ændringer på diskussionssiden før du implementerer dem. |
Dette modul kan indsættes i skabelonkoden for at tjekke om ukendte parametre bliver anvendt blandt de sider, der benytter skabelonen.
Brug
{{#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
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 }}
Et tip
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
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 ( 124 ) |
{{Infoboks skuespiller}} | Kategori:Sider med ukendte parametre i Infoboks skuespiller ( 49 ) |
Se også
-- 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) .. '<' .. tag .. '>...</' .. tag .. '>')
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
local ignoreblank = isnotempty(args['ignoreblank'])
local showblankpos = isnotempty(args['showblankpositional'])
local knownargs = {}
local unknown = args['unknown'] or 'Found _VALUE_, '
local preview = args['preview']
local values = {}
local res = {}
local regexps = {}
-- create the list of known args, regular expressions, and the return string
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
if isnotempty(preview) then
preview = '<div class="hatnote" style="color:red"><strong>Advarsel:</strong> ' .. preview .. ' (denne besked vises kun i forhåndsvisning).</div>'
elseif preview == nil then
preview = unknown
end
-- loop over the parent args, and make sure they are on the list
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 and
( showblankpos or isnotempty(v) )
then
table.insert(values, k .. ' = ' .. clean(v))
end
end
-- add results to the output tables
if #values > 0 then
if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then
unknown = preview
end
for _, v in pairs(values) do
if v == '' then
-- Fix odd bug for | = which gets stripped to the empty string and
-- breaks category links
v = ' '
end
-- avoid error with v = 'example%2' ("invalid capture index")
local r = unknown: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