Difference between revisions of "Template:Ifempty/doc"

From LIMSWiki
Jump to navigationJump to search
(Created as needed.)
 
(Updated.)
 
Line 1: Line 1:
{{Documentation subpage}}
{{Documentation subpage}}
{{Lua|Module:If empty}}
<!----PLEASE ADD CATEGORIES WHERE INDICATED AT THE BOTTOM OF THIS PAGE---->


<!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE -->
This is the {{tl|If empty}} template.


This is the {{tl|ifempty}} template.
This template is used inside other templates. It takes any number of parameters and returns the first found to be defined and non-empty. If none is found, nothing is returned. Typical usage is like this:
 
: <code><nowiki>{{If empty |{{{logo|}}} |{{{image|}}} |{{{picture|}}} |default.svg}}</nowiki></code>
This template is used inside other templates. It takes up to nine parameters (parameters 1-9), and returns the first one that is defined and non-empty, otherwise nothing. Typical usage is like this:
: <nowiki>("Return {{{logo|}}} if it has a value; else {{{image|}}} if it has a value; else {{{picture|}}} if it has a value; else return "default.svg".")</nowiki>
 
:<code><nowiki>{{ifempty| {{{logo|}}} | {{{image|}}} | default.svg }}</nowiki></code>
This returns the first of the parameters ''logo'' and ''image'' that is defined and non-empty, otherwise "default.svg".
This returns the first of the parameters ''logo'' and ''image'' that is defined and non-empty, otherwise "default.svg".


=== Background ===
===Rationale===
 
The MediaWiki parameter default function doesn't return the default value for empty parameters. That is, <code><nowiki>{{{logo|default.svg}}}</nowiki></code> does not return "default.svg" if the template was called like this: <code><nowiki>{{template|logo=}}</nowiki></code>.
The MediaWiki parameter default function doesn't return the default value for empty parameters. That is, <code><nowiki>{{{logo|default.svg}}}</nowiki></code> does not return "default.svg" if the template was called like this: <code><nowiki>{{template|logo=}}</nowiki></code>.


The usual workaround is to do like this:  
The usual workaround for a single parameter is:
:<code><nowiki>{{#if:{{{logo|}}}| {{{logo}}} | default.svg }}</nowiki></code>
: <code><nowiki>{{#if:{{{logo|}}} |{{{logo}}} |default.svg}}</nowiki></code>
 
: <nowiki>("If {{{logo}}} has a value, return it, else return "default.svg".")</nowiki>
But this becomes complex when you want to check several parameters:
 
:<code><nowiki>{{#if:{{{logo|}}}| {{{logo}}} | {{#if:{{{image|}}} | {{{image}}} | default.svg }}}}</nowiki></code>
 
Then it is easier to use this template instead:
 
:<code><nowiki>{{ifempty| {{{logo|}}} | {{{image|}}} | default.svg }}</nowiki></code>
 
'''Note!''' The parameters to {{tlf|ifempty}} must use the pipe "|", like this: <code><nowiki>{{{logo|}}}</nowiki></code>. Or else {{tlf|ifempty}} will be fed and return the string "<code><nowiki>{{{logo}}}</nowiki></code>" if ''logo'' was not defined.
 
=== Examples ===
 
<table class="wikitable">
<tr><th>Code<th>Result<th>Comment
<tr><td>{{tlc|ifempty}} <td>{{ifempty}} <td>Returns an empty string.
<tr><td>{{tlc|ifempty|one}} <td>{{ifempty|one}} <td>Returns the first parameter that is defined and not empty.
<tr><td>{{tlc|ifempty|one|two}} <td>{{ifempty|one|two}} <td>
<tr><td>{{tlc|ifempty|one|two|three|four}} <td>{{ifempty|one|two|three|four}} <td>
<tr><td>{{tlc|ifempty||two}} <td>{{ifempty||two}} <td>The first parameter was empty or undefined, so uses the next parameter.
<tr><td>{{tlc|ifempty||two|three|four}} <td>{{ifempty||two|three|four}} <td>
<tr><td>{{tlc|ifempty||two||four}} <td>{{ifempty||two||four}} <td>
<tr><td><code><nowiki>{{ifempty|||||||||nine}}</nowiki></code> <td>{{ifempty|||||||||nine}} <td>
<tr><td><code><nowiki>{{ifempty||||||||||ten}}</nowiki></code> <td>{{ifempty||||||||||ten}} <td>Only handles up to nine parameters, so returns an empty string.
<tr><td>{{tlc|ifempty|}} <td>{{ifempty|}} <td>The only parameter is empty or undefined, so returns an empty string.
<tr><td>{{tlc|ifempty||||}} <td>{{ifempty||||}} <td>Returns an empty string.


<tr><td><code><nowiki>{{ifempty|{{{1|}}}|{{{2|}}}|three}}</nowiki></code> <td>{{ifempty|{{{1|}}}|{{{2|}}}|three}} <td>
But this becomes complex when several parameters are to be checked:
<tr><td><code><nowiki>{{ifempty|{{{1}}}|{{{2}}}|three}}</nowiki></code> <td>{{ifempty|{{{1}}}|{{{2}}}|three}} <td>Returns the text "{{{1}}}", because it is a non-empty string. Note the lack of "|" in the first two parameters.
: <code><nowiki>{{#if:{{{logo|}}} |{{{logo}}} |{{#if:{{{image|}}} |{{{image}}} |{{#if:{{{picture|}}} |{{{picture}}} |default.svg}} }} }}</nowiki></code>
: <nowiki>("If {{{logo}}} has a value, return it; else if {{{image}}} has a value, return that; else if {{{picture}}} has a value, return that; else return "default.svg".)</nowiki>
In these cases, {{tlf|if empty}} produces the simpler syntax (as above):
: <code><nowiki>{{if empty |{{{logo|}}} |{{{image|}}} |{{{picture|}}} |default.svg}}</nowiki></code>


<tr><td><code><nowiki>{{ifempty|{{{logo|}}}|two}}</nowiki></code> <td>{{ifempty|{{{logo|}}}|two}} <td>
====Piping====
<tr><td><code><nowiki>{{ifempty|{{{logo}}}|two}}</nowiki></code> <td>{{ifempty|{{{logo}}}|two}} <td>Returns the text "{{{logo}}}", because it is a non-empty string. Note the lack of "|" in the first parameter.
Parameters used with {{tlf|if empty}} must be [[Pipe (Unix)|pipe]]d&nbsp;– i.e. include the [[Vertical bar|vertical bar (pipe) symbol]] {{nowrap|("{{thinsp}}&#124;{{thinsp}}")}} as a trailing character&nbsp;– so that empty or undefined parameters aren't treated as text and returned incorrectly. Hence, for example, <code><nowiki>{{{logo|}}}</nowiki></code>, <code><nowiki>{{{image|}}}</nowiki></code> and <code><nowiki>{{{picture|}}}</nowiki></code> rather than {{param|logo}}, {{param|image}} and {{param|picture}} in the above examples.
<tr><td><code><nowiki>{{ifempty|2=x}}</nowiki></code> <td>{{ifempty|2=x}} <td>Whether parameter 1 is undefined or empty does not matter.
<tr><td><code><nowiki>{{ifempty|p=q}}</nowiki></code> <td>{{ifempty|p=q}} <td>The template checks its parameters 1-9, not other ones.  
</table>


=== See also ===
===Examples===
{{Aligned table |class=wikitable
|cols=3 |col1style=padding-right:1.0em; |col2style=padding-left:0.5em;padding-right:1.0em; |col3style=padding-left:0.5em;
|row1style=background:whitesmoke;padding-left:0.5em;font-weight:bold;
| Code | Result |
| {{tc|if empty}} | {{if empty}} | Returns an empty string.
| {{tc|if empty|one}} | {{if empty|one}} | Returns the first parameter that is defined and not empty.
| {{tc|if empty|one|two}} | {{if empty|one|two}} |
| {{tc|if empty|one|two|three|four}} | {{if empty|one|two|three|four}} |
| {{tc|if empty||two}} | {{if empty||two}} | The first parameter is empty/undefined, so is passed over.
| {{tc|if empty||two|three|four}} | {{if empty||two|three|four}} |
| {{tc|if empty||two||four}} | {{if empty||two||four}} |
| <code><nowiki>{{if empty||||||||||ten}}</nowiki></code> | {{if empty||||||||||ten}} | Unlike in previous versions, this template is no longer limited by 9 parameters.
| {{tc|if empty|}} | {{if empty|}} | The only parameter is empty or undefined, so returns an empty string.
| {{tc|if empty||||}} | {{if empty||||}} | Returns an empty string.
| <code><nowiki>{{if empty|{{{1|}}}|{{{2|}}}|three}}</nowiki></code> | {{if empty|{{{1|}}}|{{{2|}}}|three}} |
| <code><nowiki>{{if empty|{{{1}}}|{{{2}}}|three}}</nowiki></code> | {{if empty|{{{1}}}|{{{2}}}|three}} | No pipe-characters following the names of the first two parameters ("1" and "2"), so the first of these returned as text ("{{{1}}}").
| <code><nowiki>{{if empty|{{{logo|}}}|two}}</nowiki></code> | {{if empty|{{{logo|}}}|two}} |
| <code><nowiki>{{if empty|{{{logo}}}|two}}</nowiki></code> | {{if empty|{{{logo}}}|two}} | No pipe-character following the parameter name "logo", so the text "{{{logo}}}" returned.
| <code><nowiki>{{if empty|p=q}}</nowiki></code> | {{if empty|p=q}} | The template identifies the parameters it receives as parameters 1 to 9, not using names such as "p", etc.
}}


* {{tl|px}} – Helps handling image width parameters in templates.
===See also===
* {{tl|if all}}
* {{tl|if either}}
* [[Help:Parameter default]]


<includeonly>
<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox |
<!-- ADD CATEGORIES AND INTERWIKIS BELOW THIS LINE -->
| <!-- ADD CATEGORIES BELOW THIS LINE, PLEASE: -->
[[Category:If-then-else templates|{{PAGENAME}}]]
[[Category:If-then-else templates]]
</includeonly>
}}</includeonly>

Latest revision as of 23:57, 2 March 2015

This is the {{If empty}} template.

This template is used inside other templates. It takes any number of parameters and returns the first found to be defined and non-empty. If none is found, nothing is returned. Typical usage is like this:

{{If empty |{{{logo|}}} |{{{image|}}} |{{{picture|}}} |default.svg}}
("Return {{{logo|}}} if it has a value; else {{{image|}}} if it has a value; else {{{picture|}}} if it has a value; else return "default.svg".")

This returns the first of the parameters logo and image that is defined and non-empty, otherwise "default.svg".

Rationale

The MediaWiki parameter default function doesn't return the default value for empty parameters. That is, {{{logo|default.svg}}} does not return "default.svg" if the template was called like this: {{template|logo=}}.

The usual workaround for a single parameter is:

{{#if:{{{logo|}}} |{{{logo}}} |default.svg}}
("If {{{logo}}} has a value, return it, else return "default.svg".")

But this becomes complex when several parameters are to be checked:

{{#if:{{{logo|}}} |{{{logo}}} |{{#if:{{{image|}}} |{{{image}}} |{{#if:{{{picture|}}} |{{{picture}}} |default.svg}} }} }}
("If {{{logo}}} has a value, return it; else if {{{image}}} has a value, return that; else if {{{picture}}} has a value, return that; else return "default.svg".)

In these cases, {{if empty}} produces the simpler syntax (as above):

{{if empty |{{{logo|}}} |{{{image|}}} |{{{picture|}}} |default.svg}}

Piping

Parameters used with {{if empty}} must be piped – i.e. include the vertical bar (pipe) symbol ("|") as a trailing character – so that empty or undefined parameters aren't treated as text and returned incorrectly. Hence, for example, {{{logo|}}}, {{{image|}}} and {{{picture|}}} rather than {{{logo}}}, {{{image}}} and {{{picture}}} in the above examples.

Examples

Code Result
in Returns an empty string.
in one Returns the first parameter that is defined and not empty.
in one
in one
in two The first parameter is empty/undefined, so is passed over.
in two
in two
{{if empty||||||||||ten}} ten Unlike in previous versions, this template is no longer limited by 9 parameters.
in The only parameter is empty or undefined, so returns an empty string.
in Returns an empty string.
{{if empty|{{{1|}}}|{{{2|}}}|three}} three
{{if empty|{{{1}}}|{{{2}}}|three}} {{{1}}} No pipe-characters following the names of the first two parameters ("1" and "2"), so the first of these returned as text ("{{{1}}}").
{{if empty|{{{logo|}}}|two}} two
{{if empty|{{{logo}}}|two}} {{{logo}}} No pipe-character following the parameter name "logo", so the text "{{{logo}}}" returned.
{{if empty|p=q}} The template identifies the parameters it receives as parameters 1 to 9, not using names such as "p", etc.

See also