Module:Enumerate: Difference between revisions
Appearance
Content deleted Content added
Handle cases where for some reason someone doesn't invoke this in the template and instead invokes it directly, ultimately ruining the purpose of this module. |
Remove blanks to discourage out-of-order counting. |
||
Line 7: | Line 7: | ||
local args = getArgs(frame, { |
local args = getArgs(frame, { |
||
trim = true, |
trim = true, |
||
removeBlanks = |
removeBlanks = true |
||
}) |
}) |
||
Line 30: | Line 30: | ||
local parentArgs = frame:getParent() and getArgs(frame:getParent(), { |
local parentArgs = frame:getParent() and getArgs(frame:getParent(), { |
||
trim = true, |
trim = true, |
||
removeBlanks = |
removeBlanks = true |
||
}) or args |
}) or args |
||
local finalOutput = "" |
local finalOutput = "" |
Revision as of 20:20, 14 April 2021
![]() | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
Usage
This module is meant to be invoked inside of a template, since it requires the argument list of the calling template.
This module allows the enumeration of a set of parameters with a given prefix. If the prefix was notes
, the parameters notes1
, notes2
, notes3
, and so on will be enumerated in a unordered list until it sees the first null parameter.
The prefix is defined by the first argument passed into the invocation.
Template:X35 |
---|
{{#invoke:Enumerate|main|notes}} |
Any page |
{{X35 | notes1 = Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. | notes2 = Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. | notes3 = Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. | notes4 = Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. }} |
Output |
|
The entries will cut off in the event that the parameters are out of order.
Template:X35 |
---|
{{#invoke:Enumerate|main|notes}} |
Any page |
{{X35 | notes1 = Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. | notes2 = Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. | notes3 = | notes4 = Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. }} |
Output |
|
Do note that {{X35}} is sandbox template and does not actually call this module.
Parameters
|1=
(or|prefix=
) - The parameter prefix to enumerate over. Can be left blank.|2=
(or|suffix=
) - The parameter suffix to enumerate over. Can be left blank.|ordered=yes
- Set to a yes, true, etc. to output a ordered list(<ol>
) rather than a unorder list (<ul>
)
|pre=
- Text to prefix each list item with.|post=
- Text to suffix each list item with.
Examples uses
See also
-- Enumerates a given parameter set from the invoking template as a bullet list.
local getArgs = require('Module:Arguments').getArgs
local yesno = require("Module:Yesno")
local p = {}
function p.main(frame)
local args = getArgs(frame, {
trim = true,
removeBlanks = true
})
return p._main(frame, args)
end
function startswith(target, prefix)
return mw.ustring.sub(target, 1, mw.ustring.len(prefix)) == prefix
end
function endswith(target, suffix)
return mw.ustring.sub(target, -mw.ustring.len(suffix), -1) == suffix
end
function p._main(frame, args)
if not args[1] then
error("A parameter prefix to use was not found.")
end
local prefix = args[1]
local suffix = args[2] or ""
local parentArgs = frame:getParent() and getArgs(frame:getParent(), {
trim = true,
removeBlanks = true
}) or args
local finalOutput = ""
local list = mw.html.create(yesno(args["ordered"]) and "ol" or "ul")
local current = 1
local searching = true
mw.logObject(args)
mw.logObject(parentArgs)
while searching do
if parentArgs[prefix .. tostring(current) .. suffix] then
mw.log(prefix .. tostring(current) .. suffix)
mw.log(parentArgs[prefix .. tostring(current) .. suffix])
list:node(
mw.html.create("li")
:wikitext(parentArgs[prefix .. tostring(current) .. suffix])
)
current = current + 1
else
searching = false
end
end
return current == 1 and "" or tostring(list)
end
return p