|
|
| 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
| |