Template:When on basepage/doc: Difference between revisions

From Zoophilia Wiki
Jump to navigationJump to search
meta>Davidgothberg
Starting out this documentation. Intermediate save.
 
Ookami (talk | contribs)
m 37 revisions imported
 
(36 intermediate revisions by 23 users not shown)
Line 1: Line 1:
{{documentation subpage}}
{{Documentation subpage}}
<!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE -->
<!--Categories where indicated at the bottom of this page, please; interwikis at Wikidata (see [[Wikipedia:Wikidata]])-->


This is the {{tl|basepage subpage}} meta-template.
This is the {{tl|When on basepage}} meta-template. It helps other templates detect if they are on a '''basepage''' (i.e. a page whose name matches the pattern "''x'':''x''") '''subpage''' ("''x'':''x''/''x''") or '''subsubpage''' ("''x'':''x''/''x''/''x''").


This template helps other templates detect if they are on a '''basepage''', a '''subpage''' or a '''subsubpage'''.
An alternative way to detect whether a page is a subpage is to combine the parser functions <code>#ifeq:</code> and <code>#titleparts</code>. See [[#Alternatives for simpler text|Alternatives for simpler text]] below.


=== Usage ===
== Usage ==


This template takes one or more parameters, like this:
: {{tlx|When on basepage&#32;|''result if on a basepage''&#32;(|''result if on a subpage'')&#32;(|''result if on a subsubpage'')&#32;(|page{{=}}''pagename'')}}
<pre>
 
{{basepage subpage
For example, {{tlf|When on basepage |Basepage |Subpage}} on the page "User:Example" would return: {{When on basepage|Basepage|Subpage|page=User:Example}}<br/>whilst on "User:Example/page" (or "User:Example/page/page", "User:Example/page/page/page", etc.) it would return: {{When on basepage|Basepage|Subpage|page=User:Example/page}}
| Basepage text
| Subpage text
}}
</pre>


If the template is on the page "User:Example", it will return this:
On a subsubpage such as "User:Example/page/page" (or "User:Example/page/page/page", etc.), {{nowrap|{{tlf|When on basepage |Basepage |Subpage |Subsubpage}}}} would return: {{When on basepage |Basepage |Subpage |Subsubpage |page=User:Example/page/page}}


:{{basepage subpage
Use an empty parameter to specify no action for a particular type of page. {{nowrap|{{tlf|When on basepage |Basepage | |Subsubpage}}}} on "User:Example/page", for example, would return nothing, but would return "Subsubpage" if on "User:Example/page/page", "User:Example/page/page/page", etc. (and "Basepage" if on "User:Example").
| Basepage text
| Subpage text
| demospace = basepage
}}


If the template is on "User:Example/test", or "User:Example/test/test", or any page lower than that, it will return this:
===Handling equals-signs ("=")===
Use numbered parameters if their values include equals-signs ("="), i.e.
: {{tlf|When on basepage&#32;|1{{=}}''basepage result'' (|2{{=}}''subpage result'') (|3{{=}}''subsubpage result'')}}


:{{basepage subpage
===''page'' parameter===
| Basepage text
The ''page'' parameter is included for testing/demonstration. For example:
| Subpage text
: {{tlf|When on basepage&#32;|(basepage result) |(subpage result) |page{{=}}User:Example/test}}
| demospace = subsubpage
Regardless of where the above is placed, it will return: {{When on basepage|(basepage result)|(subpage result)|page=User:Example/test}}<br/>(because "User:Example/test" is a subpage). The page doesn't have to exist.
}}


This template can also detect "subsubpages", like this:
If ''page'' is left empty ({{para|page}}) or undefined, the page where the template is transcluded (i.e. {{tld|PAGENAME}}) is used.


<pre>
''page'' also accepts variables, e.g. {{nowrap|{{tlf|When on basepage |(basepage result) |(subpage result) |page<nowiki>={{{page|}}}</nowiki>&nbsp;}}}}
{{basepage subpage
| Basepage text
| Subpage text
| Subsubpage text
}}
</pre>


If the template is on "User:Example/test/test" or any page lower than that, it will return this:
== Technical note ==


:{{basepage subpage
This template detects subpages in all namespaces, including those without the [[meta:Link#Subpage feature|MediaWiki subpage feature]] enabled.
| Basepage text
| Subpage text
| Subsubpage text
| demospace = subsubpage
}}


By using an empty parameter you can make it so the template doesn't render anything for some specific page type. Like this:
== Alternatives for simpler text ==


A subpage can be detected without using another template, by instead using the title-splitting parser function <code>#titleparts</code> with <code>#ifeq</code>:
<pre>
<pre>
{{basepage subpage
{{#ifeq:{{#titleparts:{{PAGENAME}}|1|1}}|{{PAGENAME}}
| Basepage text
| [...code if on a basepage...]
| Subpage text
| [...code if on a subpage...]
|  
}}
}}
</pre>
</pre>
For example, many templates can check if the page is a /sandbox version, by the similar markup with <code>#ifeq</code> and <code>#titleparts</code>:
: <nowiki>{{#ifeq: {{#titleparts:{{PAGENAME}}|1|1}} | {{PAGENAME}}</nowiki>
:: <nowiki> | {{documentation}}</nowiki>
:: <nowiki> | {{template sandbox notice}}</nowiki>
: <nowiki>}}</nowiki>
That simple logic works because [[Template:Template sandbox notice]] also checks the page name for "/sandbox" before displaying the sandbox notice; otherwise, any other subpage would show no extra text. By avoiding a template, and using a single <code>#ifeq</code>, then the processing uses only +2 expansion depth levels, rather than +7 levels, and avoids "[[wp:exceeded template limits]]" inside a complex /doc page.


:{{basepage subpage
== See also ==
| Basepage text
{{Namespace and pagename-detecting templates}}
| Subpage text
|
| demospace = subsubpage
}}


The code above will render nothing when on "User:Example/test/test" or lower, but will return this when on "User:Example/test":
<includeonly>{{Sandbox other||
 
<!--Categories below this line, please; interwikis at Wikidata-->
:{{basepage subpage
[[Category:Pagename manipulation templates]]
| Basepage text
| Subpage text
|  
| demospace = subpage
}}
 
 
 
=== See also ===
 
 
<includeonly>
<!-- CATEGORIES AND INTERWIKIS HERE, THANKS -->
[[Category:Wikipedia metatemplates]]
[[Category:Wikipedia metatemplates]]
 
}}</includeonly>
</includeonly>

Latest revision as of 14:11, 3 September 2020

This is the {{When on basepage}} meta-template. It helps other templates detect if they are on a basepage (i.e. a page whose name matches the pattern "x:x") subpage ("x:x/x") or subsubpage ("x:x/x/x").

An alternative way to detect whether a page is a subpage is to combine the parser functions #ifeq: and #titleparts. See Alternatives for simpler text below.

Usage

{{When on basepage |result if on a basepage (|result if on a subpage) (|result if on a subsubpage) (|page=pagename)}}

For example, {{When on basepage|Basepage|Subpage}} on the page "User:Example" would return: Basepage
whilst on "User:Example/page" (or "User:Example/page/page", "User:Example/page/page/page", etc.) it would return: Subpage

On a subsubpage such as "User:Example/page/page" (or "User:Example/page/page/page", etc.), {{When on basepage|Basepage|Subpage|Subsubpage}} would return: Subsubpage

Use an empty parameter to specify no action for a particular type of page. {{When on basepage|Basepage|Subsubpage}} on "User:Example/page", for example, would return nothing, but would return "Subsubpage" if on "User:Example/page/page", "User:Example/page/page/page", etc. (and "Basepage" if on "User:Example").

Handling equals-signs ("=")

Use numbered parameters if their values include equals-signs ("="), i.e.

{{When on basepage |1=basepage result (|2=subpage result) (|3=subsubpage result)}}

page parameter

The page parameter is included for testing/demonstration. For example:

{{When on basepage |(basepage result)|(subpage result)|page=User:Example/test}}

Regardless of where the above is placed, it will return: (subpage result)
(because "User:Example/test" is a subpage). The page doesn't have to exist.

If page is left empty (|page=) or undefined, the page where the template is transcluded (i.e. {{PAGENAME}}) is used.

page also accepts variables, e.g. {{When on basepage|(basepage result)|(subpage result)|page={{{page|}}} }}

Technical note

This template detects subpages in all namespaces, including those without the MediaWiki subpage feature enabled.

Alternatives for simpler text

A subpage can be detected without using another template, by instead using the title-splitting parser function #titleparts with #ifeq:

{{#ifeq:{{#titleparts:{{PAGENAME}}|1|1}}|{{PAGENAME}}
 | [...code if on a basepage...]
 | [...code if on a subpage...]
}}

For example, many templates can check if the page is a /sandbox version, by the similar markup with #ifeq and #titleparts:

{{#ifeq: {{#titleparts:{{PAGENAME}}|1|1}} | {{PAGENAME}}
| {{documentation}}
| {{template sandbox notice}}
}}

That simple logic works because Template:Template sandbox notice also checks the page name for "/sandbox" before displaying the sandbox notice; otherwise, any other subpage would show no extra text. By avoiding a template, and using a single #ifeq, then the processing uses only +2 expansion depth levels, rather than +7 levels, and avoids "wp:exceeded template limits" inside a complex /doc page.

See also