Difference between revisions of "Template:List"
J McKalling (Talk | contribs) (fixed: replaced rigid loop with flexible one, to keep it fast as possible (attempt)) |
J McKalling (Talk | contribs) (added the highly needed 'implode' functionality and updated documentation) |
||
(9 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<includeonly>{{ | <includeonly>{{ | ||
− | # | + | #vardefine: str|}}{{ |
− | |{{# | + | #vardefine: arg|1}}{{ |
− | + | #while: | |
− | + | |{{{ {{#var: arg}}|}}}{{#ifexpr: {{{range|0}}} >= {{#var: arg}}|true}} | |
− | + | |{{#if: {{{ {{#var: arg}}|}}} | |
− | }}</includeonly><noinclude>{{Infobox Template | + | |{{#if: {{{separator|}}}|{{#if:{{#var: str}}|{{{separator}}}}}|<nowiki /> |
+ | {{#ifeq: {{{numeric|false}}}|false|*|#}}}}{{{ {{#var: arg}}}}}{{ | ||
+ | #vardefine: str|1}}}}{{ | ||
+ | #vardefine: arg|{{#expr:{{#var: arg}} + 1}}}}}} | ||
+ | </includeonly><noinclude>{{Infobox Template | ||
|purpose=formatting | |purpose=formatting | ||
|singletag=optional | |singletag=optional | ||
Line 16: | Line 20: | ||
}} | }} | ||
− | This template | + | This template creates a list of a variable amount of (only) non-empty strings. This is useful if the strings are yet to be determined by transclusion context, and only need to be included in the list if they are actually non-empty. The order of the strings will be honoured, in respect to their position number. Gaps are allowed and will be omitted. |
− | + | The list will either use list bullets, or implode the items with a separator into a single string. | |
+ | |||
+ | The list is terminated as soon as it detects an empty string, but this may be turned off for a specified range of strings. | ||
+ | |||
+ | |||
+ | '''''Note''': Line-breaks in the middle of any of the strings will break the list in two, restarting any numbering, so don't use them.'' | ||
==Parameters== | ==Parameters== | ||
− | Unlimited unnamed parameters, case sensitive, all default to not displayed. | + | Unlimited unnamed parameters are accepted, case sensitive, all default to not displayed. |
− | * '''numeric''': Whether to render a numeric (ordered) list instead (any value will do, defaults to false) | + | * '''separator''': The string used to glue all values together (any non-empty value will disable list bullets/numbers, which are enabled by default) |
+ | * '''numeric''': Whether to render a numeric (ordered) list instead of the default bulleted list (any value other than false will do, defaults to false, ignored if '''separator''' is non-empty) | ||
+ | * '''range''': The minimum number of elements in the list to expect, before empty strings may terminate it (any digit greater than zero, defaults to zero) | ||
− | '''''Note''': The | + | '''''Note''': The '''range''' does not define the resulting size of the list, but only the size within which strings are allowed to be empty. Its value should not be greater than necessary, for best performance.'' |
==Syntax== | ==Syntax== | ||
− | <nowiki>{{list|numeric=yes | + | <nowiki>{{list|numeric=yes|separator=string |
|string one | |string one | ||
|string two | |string two | ||
|string three | |string three | ||
|... | |... | ||
− | |string ten | + | |string ten-whatnot |
}}</nowiki> | }}</nowiki> | ||
==Examples== | ==Examples== | ||
− | When specifying only | + | When specifying only three strings: |
<nowiki>{{list | <nowiki>{{list | ||
|Ape | |Ape | ||
|Bear | |Bear | ||
− | | | + | |Cow |
− | + | ||
− | + | ||
}}</nowiki> | }}</nowiki> | ||
− | :<ul><li>Ape</li><li>Bear</li><li> | + | :<ul><li>Ape</li><li>Bear</li><li>Cow</li></ul> |
− | If | + | If '''numeric''' is specified with any (empty) value other than "false": |
− | <nowiki>{{list| | + | <nowiki>{{list|numeric= |
+ | |string one | ||
+ | |string two | ||
+ | }}</nowiki> | ||
+ | <nowiki>{{list|numeric=sure | ||
+ | |another string one | ||
+ | |another string two | ||
+ | }}</nowiki> | ||
− | : | + | :<ol><li>string one</li><li>string two</li></ol> |
+ | :<ol><li>another string one</li><li>another string two</li></ol> | ||
− | If the | + | If the first string is empty or not specified, the list is terminated immediately and no list bullets will be displayed: |
− | <nowiki>{{list| | + | <nowiki>{{list||second string is ignored}}</nowiki> |
+ | <nowiki>{{list|2=second string is ignored}}</nowiki> | ||
+ | |||
+ | |||
+ | Similarly, any other empty string will terminate the list as well, ignoring any further strings: | ||
+ | <nowiki>{{list|one|two|three||||seven}}</nowiki> | ||
+ | <nowiki>{{list|one|two|three|7=seven}}</nowiki> | ||
+ | |||
+ | :<ol><li>one</li><li>two</li><li>three</li></ol> | ||
+ | :<ol><li>one</li><li>two</li><li>three</li></ol> | ||
+ | |||
+ | |||
+ | But if '''range''' is specified and greater than zero, that many strings won't terminate the list even if they are empty: | ||
+ | <nowiki>{{list|range=6|one|two|three||||seven||nine}}</nowiki> | ||
+ | |||
+ | :<ol><li>one</li><li>two</li><li>three</li><li>seven</li></ol> | ||
+ | |||
+ | |||
+ | Avoid using line-breaks within any of the strings, because they will totally mess up the list: | ||
<nowiki>{{list|numeric=yes | <nowiki>{{list|numeric=yes | ||
− | + | |one string that has a | |
− | + | multi-line value | |
+ | |another}}</nowiki> | ||
+ | |||
+ | :<ol><li>one string that has a</li></ol> | ||
+ | :multi-line value<ol><li>another</li></ol> | ||
+ | |||
+ | |||
+ | Instead of listing the strings as individual list items, using '''separator''' will glue them together with the specified string (substitute spaces with the html-entity): | ||
+ | <nowiki>{{list|separator=,&nbsp;|one|two|three}}</nowiki> | ||
+ | |||
+ | :one, two, three | ||
+ | |||
+ | |||
+ | To glue all strings together without a separator, specify an empty span element as '''separator''': | ||
+ | <nowiki>{{list|separator=<span></span>|one|two|three}}</nowiki> | ||
+ | |||
+ | :one<span></span>two<span></span>three | ||
+ | |||
+ | |||
+ | The value of the '''separator''' can be the result of a condition, because it will be ignored if it is empty: | ||
+ | <nowiki>{{list|separator=|one|two|three}}</nowiki> | ||
+ | |||
+ | :<ol><li>one</li><li>two</li><li>three</li></ol> | ||
+ | |||
+ | |||
+ | If only one string is specified, it will still be bulleted or numbered: | ||
+ | <nowiki>{{list|only one string this time}}</nowiki> | ||
+ | <nowiki>{{list|only one string this time|numeric=yes}}</nowiki> | ||
+ | |||
+ | :<ul><li>only one string this time</li></ul> | ||
+ | :<ol><li>only one string this time</li></ol> | ||
− | |||
− | |||
+ | This can be prevented if a single item is expected in advance, by specifying any '''separator''': | ||
+ | <nowiki>{{list|separator=whatever|a single string doesn't get a separator}}</nowiki> | ||
− | + | :a single string doesn't get a separator | |
</noinclude> | </noinclude> |
Latest revision as of 17:20, 7 June 2014
List | |
---|---|
Purpose |
Formatting [list all] |
Single tag |
Optional [list all] |
Multi-line |
Optional [list all] |
Protected |
No [list all] |
Game related |
No [list all] |
Categorization | |
Categories |
none [list all] |
Variables | |
Names |
One: [list all] |
|
|
Subpages |
This template creates a list of a variable amount of (only) non-empty strings. This is useful if the strings are yet to be determined by transclusion context, and only need to be included in the list if they are actually non-empty. The order of the strings will be honoured, in respect to their position number. Gaps are allowed and will be omitted.
The list will either use list bullets, or implode the items with a separator into a single string.
The list is terminated as soon as it detects an empty string, but this may be turned off for a specified range of strings.
Note: Line-breaks in the middle of any of the strings will break the list in two, restarting any numbering, so don't use them.
Parameters
Unlimited unnamed parameters are accepted, case sensitive, all default to not displayed.
- separator: The string used to glue all values together (any non-empty value will disable list bullets/numbers, which are enabled by default)
- numeric: Whether to render a numeric (ordered) list instead of the default bulleted list (any value other than false will do, defaults to false, ignored if separator is non-empty)
- range: The minimum number of elements in the list to expect, before empty strings may terminate it (any digit greater than zero, defaults to zero)
Note: The range does not define the resulting size of the list, but only the size within which strings are allowed to be empty. Its value should not be greater than necessary, for best performance.
Syntax
{{list|numeric=yes|separator=string |string one |string two |string three |... |string ten-whatnot }}
Examples
When specifying only three strings:
{{list |Ape |Bear |Cow }}
- Ape
- Bear
- Cow
If numeric is specified with any (empty) value other than "false":
{{list|numeric= |string one |string two }} {{list|numeric=sure |another string one |another string two }}
- string one
- string two
- another string one
- another string two
If the first string is empty or not specified, the list is terminated immediately and no list bullets will be displayed:
{{list||second string is ignored}} {{list|2=second string is ignored}}
Similarly, any other empty string will terminate the list as well, ignoring any further strings:
{{list|one|two|three||||seven}} {{list|one|two|three|7=seven}}
- one
- two
- three
- one
- two
- three
But if range is specified and greater than zero, that many strings won't terminate the list even if they are empty:
{{list|range=6|one|two|three||||seven||nine}}
- one
- two
- three
- seven
Avoid using line-breaks within any of the strings, because they will totally mess up the list:
{{list|numeric=yes |one string that has a multi-line value |another}}
- one string that has a
- multi-line value
- another
Instead of listing the strings as individual list items, using separator will glue them together with the specified string (substitute spaces with the html-entity):
{{list|separator=, |one|two|three}}
- one, two, three
To glue all strings together without a separator, specify an empty span element as separator:
{{list|separator=<span></span>|one|two|three}}
- onetwothree
The value of the separator can be the result of a condition, because it will be ignored if it is empty:
{{list|separator=|one|two|three}}
- one
- two
- three
If only one string is specified, it will still be bulleted or numbered:
{{list|only one string this time}} {{list|only one string this time|numeric=yes}}
- only one string this time
- only one string this time
This can be prevented if a single item is expected in advance, by specifying any separator:
{{list|separator=whatever|a single string doesn't get a separator}}
- a single string doesn't get a separator