Module:Check for unknown parameters and Module:Check for unknown parameters/sandbox: Difference between pages

From Food & Medicine Encyclopedia

(Difference between pages)

Page 1
Page 2
m 1 revision imported
 
CSV import
 
Line 1: Line 1:
-- This module may be used to compare the arguments passed to the parent
'''Module:Check for unknown parameters/sandbox''' is a [[sandbox]] version of the [[Module:Check for unknown parameters]], which is used in [[MediaWiki]] to identify and report unknown or unexpected parameters in [[template]]s. This module is particularly useful in maintaining the integrity and accuracy of data input in templates across various pages in a MediaWiki environment.
-- with a list of arguments, returning a specified result if an argument is
-- not on the list


require ('strict');
== Overview ==
The sandbox version of Module:Check for unknown parameters allows developers and editors to test changes and enhancements to the module before they are implemented in the live environment. This practice helps prevent errors that could affect the content and functionality of live pages. The module operates by comparing the parameters used in a template call to a predefined list of expected parameters. Any parameter not on the list is flagged as unknown.


local p = {}
== Functionality ==
The primary function of the module is to ensure that templates are used correctly by checking for typos, deprecated parameters, or incorrect parameter names. When a template is invoked, the module:
* Checks each parameter against a list of known parameters.
* Generates a list of any parameters that are not recognized.
* Optionally categorizes the page into maintenance categories for further review by editors.


local mapframe_params = {
== Usage ==
'coord',
To use the module in a template, editors typically include a call to the module in the template code. This is often done using the [[Lua (programming language)|Lua]] scripting language, which is integrated into MediaWiki via the [[Scribunto]] extension. The module can be invoked directly in the template's code or through another Lua module designed to interface with it.
'coordinates',
'id',
'qid',
'mapframe',
'mapframe-area_km2',
'mapframe-area_mi2',
'mapframe-caption',
'mapframe-coord',
'mapframe-coordinates',
'mapframe-custom',
'mapframe-frame-coord',
'mapframe-frame-coordinates',
'mapframe-frame-height',
'mapframe-frame-width',
'mapframe-geomask',
'mapframe-geomask-fill',
'mapframe-geomask-fill-opacity',
'mapframe-geomask-stroke-color',
'mapframe-geomask-stroke-colour',
'mapframe-geomask-stroke-width',
'mapframe-height',
'mapframe-id',
'mapframe-length_km',
'mapframe-length_mi',
'mapframe-line',
'mapframe-line-stroke-color',
'mapframe-line-stroke-colour',
'mapframe-marker',
'mapframe-marker-color',
'mapframe-marker-colour',
'mapframe-point',
'mapframe-population',
'mapframe-shape',
'mapframe-shape-fill',
'mapframe-shape-fill-opacity',
'mapframe-shape-stroke-color',
'mapframe-shape-stroke-colour',
'mapframe-stroke-color',
'mapframe-stroke-colour',
'mapframe-stroke-width',
'mapframe-switcher',
'mapframe-type',
'mapframe-width',
'mapframe-wikidata',
'mapframe-zoom'
}


local function trim(s)
== Testing and Development ==
return s:match('^%s*(.-)%s*$')
In the sandbox environment, changes to the module can be tested in a controlled manner. This includes:
end
* Adding new known parameters to the module as templates evolve.
* Adjusting the error reporting mechanisms to be more helpful to users.
* Testing the module with new templates that are under development.


local function isnotempty(s)
== Importance ==
return s and s:match('%S')
The use of this module helps maintain the quality and reliability of information on MediaWiki sites by ensuring template parameters are used correctly. It aids in the detection of errors that could mislead readers or distort information, which is crucial for maintaining the credibility of a wiki.
end


local function clean(text)
== See Also ==
-- Return text cleaned for display and truncated if too long.
* [[Module:Check for unknown parameters]]
-- Strip markers are replaced with dummy text representing the original wikitext.
* [[Template]]
local pos, truncated
* [[MediaWiki]]
local function truncate(text)
* [[Scribunto]]
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)
[[Category:MediaWiki technical documentation]]
if type(args) ~= "table" or type(pargs) ~= "table" then
[[Category:Lua-based modules]]
-- TODO: error handling
return
end


-- create the list of known args, regular expressions, and the return string
{{documentation-stub}}
local knownargs = {}
if isnotempty(args['mapframe_args']) then
for _, v in ipairs(mapframe_params) do
    knownargs[v] = 1
end
end
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_text == 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