Jump to content
Wikipedia The Free Encyclopedia

Module:ParameterCount/sandbox

From Wikipedia, the free encyclopedia
This is the module sandbox page for Module:ParameterCount (diff).
See also the companion subpage for test cases (run).
Module documentation[view] [edit] [history] [purge]
Warning This Lua module is used on approximately 1,600,000 pages, or roughly 2% of all pages .
To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them.

This module counts the number of parameters that are passed to a template. For example, you might put the code {{#invoke:ParameterCount|all}} inside the {{my template}} template. If you then use {{my template}} like this:

{{my template
| one
| two
| three
}}

Then the {{#invoke:ParameterCount|all}} code inside the template will give the result 3.

This module can be configured to count all parameters, or specific parameters defined by a template author. This module is only useful in templates. It should not be used on non-template pages.

The module has two functions available, all and main.

all

[edit ]

The all function is used to count all parameters specified when using a template, regardless of whether or not they are used in the template itself.

Usage

{{#invoke:ParameterCount|all}}

Examples

If the code {{#invoke:ParameterCount|all}} was added to the {{my example template}} template, the code {{my example template|1|2|foo=bar}} would make ParameterCount produce 3.

main

[edit ]

The main function is used to count parameters with specific names. There are two ways of specifying parameters: by name, and using Lua patterns.

By name

{{#invoke:ParameterCount|main|1|2|3|abc|def}}

To specify a parameter by name, add the parameter name as a positional parameter.

By pattern

{{#invoke:ParameterCount|main|pattern1=^param%d+$|pattern2=^abc}}

To specify parameters by Lua Ustring pattern, add the pattern to |pattern1=, |pattern2= etc. For information on constructing Lua patterns, see the Lua Users' Wiki pattern tutorial, as well as the Lua reference manual sections on Lua patterns and Ustring patterns.

Examples

If the code {{#invoke:ParameterCount|main|1|2|abc}} was added to the {{my example template}} template, the code {{my example template|1|2|abc=some value|other=some other value}} would make ParameterCount produce 3.

If the code {{#invoke:ParameterCount|main|pattern1=^param%d+$}} was added to the {{my example template}} template, the code {{my example template|param1=a value|param2=another value|param5=yet another value}} would make ParameterCount produce 3.

Checking for blanks

[edit ]
{{#invoke:ParameterCount|all|checkblanks=no}}
{{#invoke:ParameterCount|main|checkblanks=no}}

By default, the module doesn't count parameters whose values contain only whitespace, e.g. |abc=   . If you wish to count all parameters, regardless of their value, use |checkblanks=no. This works with both the all and main functions.

Examples

If the code {{#invoke:ParameterCount|all|checkblanks=no}} was added to the {{my example template}} template, the code {{my example template|1|2|foo=bar|baz=}} would make ParameterCount produce 4.

See also

[edit ]
The above documentation is transcluded from Module:ParameterCount/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (edit | run) pages.
Add categories to the /doc subpage. Subpages of this module.
 -- This module produces a count of all the arguments passed to it.

 localyesno=require('Module:Yesno')

 -- Trim a string
 localfunctiontrim(s)
 returns:match('^%s*(.-)%s*$')
 end

 -- Test whether a string is blank
 localfunctionisBlank(s)
 --mw.log("here?")
 --mw.log(s)
 --mw.log(s:find('%S'))
 --mw.log(not s:find('%S'))
 returnnots:find('%S')
 end

 -- Tests whether a string is a valid positional key, and if so, returns it. If
 -- the key is invalid, this returns nil.
 localfunctionisPositionalKey(s)
 s=trim(s)
 ifs:find('^[1-9][0-9]*$')then
 returntonumber(s)
 end
 end

 -- Return the count of all arguments for which testFunc returns a truthy value.
 localfunctioncount(args,testFunc)
 localret=0
 forkey,valinpairs(args)do
 iftestFunc(key,val)then
 --mw.log(key)
 --mw.log(val)
 ret=ret+1
 end
 end
 returnret
 end

 -- Check shared arguments and get the parent argument count.
 localfunctionmain(frame,testFunc)
 localblankifiedTestFunc
 localmodified_count=0
 ifyesno(frame.args.checkblanks)then
 -- Extend the test function to check for blanks as well.
 blankifiedTestFunc=function(key,val)
 ifnotisBlank(val)then
 returntestFunc(key,val)
 end
 end

 modified_count=-1
 else
 blankifiedTestFunc=testFunc
 end

 ifframe.args.checkblanksthen
 mw.log("here?")
 modified_count=modified_count-1
 end

 localmodule_count=count(frame.args,blankifiedTestFunc)
 localparent_count=count(frame:getParent().args,blankifiedTestFunc)
 returnmodule_count+parent_count+modified_count
 end

 return{
 -- Called with {{#invoke:ParameterCount|all}}
 -- All specified parameters are counted, even those not supported by the
 -- template.
 all=function(frame)
 returnmain(frame,function()returntrueend)
 end,

 -- Called with {{#invoke:ParameterCount|main}}
 -- Users can specify a list of parameters to check, and a list of Lua
 -- Ustring patterns to check each parameter against.
 main=function(frame)
 localargs=frame.args
 localkeys,patterns={},{}

 -- Get key list
 fori,keyinipairs(args)do
 localpositionalKey=isPositionalKey(key)
 ifpositionalKeythen
 keys[positionalKey]=true
 else
 keys[trim(key)]=true
 end
 end

 -- Get patterns
 do
 localfunctiongetPattern(i)
 localpattern=args['pattern'..tostring(i)]
 ifpatternandpattern~=''then
 returnpattern
 end
 end
 locali=1
 localpattern=getPattern(i)
 whilepatterndo
 patterns[i]=pattern
 i=i+1
 pattern=getPattern(i)
 end
 end

 -- Construct the test function
 localtestFunc=function(key,val)
 ifkeys[key]then
 returntrue
 end
 fori,patterninipairs(patterns)do
 ifmw.ustring.find(tostring(key),pattern)then
 returntrue
 end
 end
 returnfalse
 end

 returnmain(frame,testFunc)
 end
 }

AltStyle によって変換されたページ (->オリジナル) /