en>Frietjes |
en>MZMcBride |
Line 1: |
Line 1: |
| -- This module may be used to compare the arguments passed to the parent
| | <div class="messagebox" id="template_doc_page_viewed_directly" style="text-align: center"> |
| -- with a list of arguments, returning a specified result if an argument is
| | This is the [[Wikipedia:Template documentation|documentation]] page {{{1|for [[{{NAMESPACE}}:{{BASEPAGENAME}}]].}}} <div style="font-size: 90%">When it is viewed directly, links using [[Help:Variable|variables]] may appear broken; do not replace these with [[hard coding|hardcoded]] page names or URLs.</div> |
| -- not on the list
| | </div><includeonly>{{#if: {{{inhib|{{{inhibit|}}}}}} |<!-- skip -->|[[Category:Template documentation|{{PAGENAME}}]]}}</includeonly><noinclude> |
| local p = {}
| | {{pp-semi-protected|small=yes}} |
| | | {{template doc}} |
| local function trim(s)
| | <!-- Add categories and interwikis to the /doc subpage, not here! --> |
| return s:match('^%s*(.-)%s*$')
| | </noinclude> |
| end
| |
| | |
| local function isnotempty(s)
| |
| return s and trim(s) ~= ''
| |
| end
| |
| | |
| function p.check (frame)
| |
| local args = frame.args
| |
| local pargs = frame:getParent().args
| |
| local ignoreblank = isnotempty(frame.args['ignoreblank'])
| |
| local checkpos = isnotempty(frame.args['checkpositional'])
| |
| local knownargs = {}
| |
| local unknown = frame.args['unknown'] or 'Found _VALUE_, '
| |
| local preview = frame.args['preview'] or unknown
| |
| | |
| local res = {}
| |
| local regexps = {}
| |
| local comments = {}
| |
| local commentstr = ''
| |
|
| |
| local ispreview = frame:preprocess( "{{REVISIONID}}" ) == "" and 1 or 0
| |
| | |
| -- 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(frame.args['preview']) then
| |
| preview = '<div class="hatnote" style="color:red"><strong>Warning:</strong> ' .. frame.args['preview'] .. ' (this message is shown only in preview).</div>'
| |
| elseif frame.args['preview'] then
| |
| preview = frame.args['preview']
| |
| else
| |
| preview = unknown
| |
| end
| |
| if ispreview == 1 then unknown = preview end
| |
|
| |
| -- adds one result to the output tables
| |
| local function addresult(k)
| |
| if k == '' then
| |
| -- Fix odd bug for | = which gets stripped to the empty string and
| |
| -- breaks category links
| |
| k = ' '
| |
| end
| |
| local r = unknown:gsub('_VALUE_', k)
| |
| table.insert(res, r)
| |
| table.insert(comments, '"' .. k .. '"')
| |
| 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 i, regexp in ipairs(regexps) do
| |
| if mw.ustring.match(k, regexp) then
| |
| knownflag = true
| |
| break
| |
| end
| |
| end
| |
| if (not knownflag) and ispreview or ( (not ignoreblank) and (not isnotempty(v)) ) then
| |
| k = mw.ustring.gsub(k, '[^%w\-_ ]', '?')
| |
| addresult(k)
| |
| end
| |
| elseif checkpos and
| |
| type(k) == 'number' and
| |
| knownargs[tostring(k)] == nil and
| |
| ( not ignoreblank or isnotempty(v) )
| |
| then
| |
| addresult(k)
| |
| end
| |
| end
| |
| | |
| if #comments > 0 then
| |
| commentstr = '<!-- Module:Check for unknown parameters results: ' ..
| |
| table.concat(comments, ', ') .. '-->'
| |
| end
| |
|
| |
| return table.concat(res) .. commentstr
| |
| end
| |
| | |
| return p
| |