Module talk:Template wrapper
using positional parameters
[edit]This module was initially written so that positional parameters in the wrapper template are not passed on to the working template. That's fine for templates like the cs1|2 templates because they do not use positional parameters but is problematic for templates like {{ERIC}}
which wraps {{Catalog_lookup_link}}
.
So I've invented a new parameter for Module:template wrapper: |_pass-all=
which when set to yes
in the module {{#invoke:}}
causes the module to pass all wrapper-template parameters except those listed in |_exclude=
to the working template. Here is {{ERIC/sandbox}}
which uses Module:template wrapper/sandbox with |_pass-all=yes
to wrap {{Catalog_lookup_link/sandbox}}
which invokes Module:Catalog_lookup_link/sandbox:
Here is {{EFloras/sandbox2}}
which uses Module:template wrapper/sandbox without |_pass-all=
to wrap {{cite web}}
which invokes Module:Citation/CS1. Positional parameters are used by {{EFloras}}
and not passed to {{cite web}}
:
{{EFloras/sandbox2|1|233501007|Quercus alba |volume=3 |first=Kevin C. |last=Nixon | access-date = 18 August 2018 }}
- Nixon, Kevin C. (1997). "Quercus alba". Flora of North America North of Mexico (FNA). Vol. 3. New York and Oxford. Retrieved 18 August 2018 – via eFloras.org, Missouri Botanical Garden, St. Louis, MO & Harvard University Herbaria, Cambridge, MA.
{{citation}}
: External link in
(help); Unknown parameter|via=
|editors=
ignored (|editor=
suggested) (help)CS1 maint: location missing publisher (link)
- Nixon, Kevin C. (1997). "Quercus alba". Flora of North America North of Mexico (FNA). Vol. 3. New York and Oxford. Retrieved 18 August 2018 – via eFloras.org, Missouri Botanical Garden, St. Louis, MO & Harvard University Herbaria, Cambridge, MA.
Compare the live {{Efloras}}
:
{{EFloras|1|233501007|Quercus alba |volume=3 |first=Kevin C. |last=Nixon | access-date = 18 August 2018 }}
- Nixon, Kevin C. (1997). "Quercus alba". In Flora of North America Editorial Committee (ed.). Flora of North America North of Mexico (FNA). Vol. 3. New York and Oxford: Oxford University Press. Retrieved 18 August 2018 – via eFloras.org, Missouri Botanical Garden, St. Louis, MO & Harvard University Herbaria, Cambridge, MA.
What have I missed?
—Trappist the monk (talk) 11:29, 19 August 2018 (UTC)
- Unless I'm misunderstanding something, the below looks like it will add all the positional
pframe_args
regardless of|_exclude=
orunset
.I think the below would do what you intend.if pass_all then for i, v in ipairs (pframe_args) do add_parameter (i, v, args, list); end end
It might make more sense to uselocal function pframe_args_get (pframe_args, args, exclude, pass_all, list) for k, v in pairs (pframe_args) do if (pass_all or type (k) ~= 'number') and not is_in_table (exclude, k) then -- do not pass along excluded parameters if v and ('' ~= v) then -- pass along only those parameters that have assigned values if 'unset' == v:lower() then -- special keyword to unset 'default' parameters set in the wrapper template v = ''; -- unset the value in the args table end add_parameter (k, v, args, list) -- add all other parameters to args in the style dictated by list end end end end
|_pass_positional=
instead of|_pass-all=
since|_exclude=
still applies.frame_args_get
should also be adjusted so that the new parameter isn't passed. — JJMC89 (T·C) 18:11, 19 August 2018 (UTC)- I did not intend that positional parameters should be excludable. Perhaps they could be but how is that properly handled? If we pass
{{{1}}}
and exclude{{{2}}}
what do we do with{{{3}}}
et seq.? Does{{{3}}}
become the new{{{2}}}
? I just didn't want to venture along that cow track until there is a demonstrated need to go there.
- I did not intend that positional parameters should be excludable. Perhaps they could be but how is that properly handled? If we pass
-
- I didn't consider the possibility of a positional parameter having the
unset
value. I'll fix that.
- I didn't consider the possibility of a positional parameter having the
-
- Using
ipairs()
as I did ensures that empty positional parameters are passed along to the working template. In thepairs()
version, theif v and ('' ~= v) then
prevents empty positional parameters from being added to theargs
table.
- Using
-
- I overlooked adding
|_pass-all=
toframe_args_get()
; I'll do that. As you can see I was not very successful in finding a good parameter name.|_pass-all=
is the shortest I could come up with and was, I felt, marginally better than|_pass-positional=
which I felt implied 'only' but was shorter than|_include-positional=
which was the best in terms of describing what it does at the expense of length; I was hoping for a single word but was unable to find one that is suitable. I'll change to|_include-positional=
. - —Trappist the monk (talk) 21:29, 19 August 2018 (UTC)
- I misunderstood your comment in the module then. Let's not let positional parameters be excluded with
|_include-positional=
; I agree it would be difficult to properly handle. I made this edit. I think the sandbox looks good now. — JJMC89 (T·C) 21:53, 19 August 2018 (UTC)- Yeah, we edit conflicted over that. I've updated the live module.
- —Trappist the monk (talk) 22:36, 19 August 2018 (UTC)
- @Trappist the monk: Potentially a dumb question, but is there a way to pass all but one positional parameter? I tried a bunch of ways to exclude positional parameter "1" in Template:Multiref2/sandbox before reading this discussion. If there's not a clean solution, I'll leave it as is. Rjjiii (talk) 02:39, 12 July 2023 (UTC)
- I don't think so. But why would you want to? Positional parameters have meaning so suppressing
{{{1}}}
in the call to the working template 'bumps' the subsequent positional parameters: wrapper template{{{2}}}
becomes working template{{{1}}}
and so on. For{{multiref2}}
that doesn't much matter but for other templates it can make a hash of things. - I think that you will need to make a very strong case for a modification to this module.
- —Trappist the monk (talk) 13:07, 12 July 2023 (UTC)
- Gotcha, I'm not asking for a modification, just making sure that I understand how the module works. Rjjiii (talk) 19:20, 12 July 2023 (UTC)
- An additional follow-up: On second thought, it made more sense to style the first positional reference rather than filter it out. Disregard my confusion above. Rjjiii (talk) 06:48, 16 July 2023 (UTC)
- I don't think so. But why would you want to? Positional parameters have meaning so suppressing
- @Trappist the monk: Potentially a dumb question, but is there a way to pass all but one positional parameter? I tried a bunch of ways to exclude positional parameter "1" in Template:Multiref2/sandbox before reading this discussion. If there's not a clean solution, I'll leave it as is. Rjjiii (talk) 02:39, 12 July 2023 (UTC)
- I misunderstood your comment in the module then. Let's not let positional parameters be excluded with
- I overlooked adding
support for aliasing and parameter name reuse;
[edit]I have added code so that the wrapper templates can support parameter aliasing and same-name reuse. Also updated the documentation. Existing applications should not notice the change. But, famous last words, those, report anomalies here.
—Trappist the monk (talk) 13:46, 17 November 2018 (UTC)
_substall
[edit]@Pppery: If you are going to make changes to this module, please document those changes both in the code and in the doc page.
Please explain this:
if mw.isSubsting() and frame.args._substall == "no" then return require("Module:Template invocation").invocation(template, args) else return frame:expandTemplate {title=template, args=args}; -- render the working template end
How is the one different from the other?
—Trappist the monk (talk) 19:09, 19 February 2019 (UTC)
- One of those actually transcludes the template, whereas the other one returns a wikitext version of the template. The purpose of that edit was, as I explained in the edit summary, to make this module easier to use for substituted templates. To demonstrate this, support you have a template {{X1}}, which contains the code
{{#invoke:Template wrapper|wrap|_template=X2|xxx=yyy|_substall={{{_substall}}}|_exclude=_substall}}
. If|_substall=no
is specified, then substing Template:X1 will produce a transclusion of Template:X2, as opposed to a substitution of Template:X2 which is produced without the _substall param. {{3x|p}}ery (talk) 19:14, 19 February 2019 (UTC)- @Pppery: If you are going to make changes to this module, please document those changes both in the code and in the doc page.
- —Trappist the monk (talk) 15:59, 22 February 2019 (UTC)
- A substitute option would indeed be really useful. I see your edit summary when you reverted. Are these problems surmountable? — Martin (MSGJ · talk) 12:32, 8 February 2024 (UTC)
Reusing positional parameters
[edit]Why doesn't this work?
Code:
{{#invoke:Template wrapper|wrap|_template=IPA|_reuse=1|_include-positional=yes|1=⫽{{{1}}}⫽}}
Markup | Renders as |
---|---|
{{IPA double slash/sandbox|r}} |
r |
Nardog (talk) 18:00, 29 December 2024 (UTC)
- Positional parameters in the invoke are ignored. In this particular example, there are two
{{{1}}}
positional parameters:{{IPA double slash/sandbox|r}}
–r
is{{{1}}}
{{#invoke:Template wrapper|wrap|_template=IPA|_reuse=1|_include-positional=yes|1=⫽{{{1}}}⫽}}
–|1=
is also{{{1}}}
- Attempting to figure out what an editor wanted when supplying two positional parameters using the same index is not possible with a simple script.
- —Trappist the monk (talk) 19:50, 29 December 2024 (UTC)
- So what can I do to make the template output essentially the same thing as except all other arguments are passed on to {{IPA}}? I thought that was the whole point of
{{IPA|⫽{{{1}}}⫽}}
_reuse
. Nardog (talk) 22:18, 29 December 2024 (UTC)- I confess that I don't understand what is wrong with the current implementation of
{{IPA double slash}}
. Does it not do what you want it to do? - Because
{{IPA double slash}}
invokes Module:IPA via{{IPA}}
, have you considered adding an exported function to that module that would do what you want and therefore skip the IPA template altogether? - —Trappist the monk (talk) 23:30, 29 December 2024 (UTC)
- Forget {{IPA double slash}} exists for a moment. My question stands. Nardog (talk) 23:33, 29 December 2024 (UTC)
- Did you try creating a named alias for
{{IPA}}
parameter{{{1}}}
? Sommat like:{{IPA double slash/sandbox|text=r}}
{{#invoke:Template wrapper|wrap|_template=IPA|_reuse=text|text=⫽{{{text}}}⫽}}
- Insert at line 269 sommat like this:
args[1] = args[1] or args.text;
- In my sandbox I wrote #1 above and then tweaked
{{IPA double slash/sandbox}}
as described in #2 above except that I switchedwrap
tolist
. When I previewed my sandbox with the tweaked template sandbox, Module:Template wrapper gave me:{{IPA|text=⫽r⫽}}
- —Trappist the monk (talk) 00:40, 30 December 2024 (UTC)
- A little refinement:
{{IPA double slash/sandbox|text=r|lang=es}}
{{IPA double slash/sandbox|r|lang=es}}
{{#invoke:Template wrapper|list|_template=IPA|_reuse=text|text=⫽{{{text|{{{1|}}}}}}⫽}}
- the above gave me:
{{IPA|lang=es|text=⫽r⫽}}
{{IPA|lang=es|text=⫽r⫽}}
- —Trappist the monk (talk) 01:28, 30 December 2024 (UTC)
- Again, you're not answering my question. Pretend {{IPA}} was interface-protected and no interface admin was around. Now what do I do? Nardog (talk) 01:03, 30 December 2024 (UTC)
- I'm not going to play your game; heaping constraint upon constraint feels too much like hostility that I neither need nor want in my life. You asked:
what can I do to make the template output essentially the same thing as
{{IPA|⫽{{{1}}}⫽}}
except all other arguments are passed on to {{IPA}}?
- my previous two posts answered that question.
- —Trappist the monk (talk) 01:28, 30 December 2024 (UTC)
- That was just an example. My inquiry has been a general one about this module and
|_reuse=
. Of course anything is possible if you just modify the template being transcluded; that's clearly not what I'm asking, or I wouldn't post it here. So does the module not support what is described in the doc but for a positional parameter? Shouldn't it? Nardog (talk) 01:52, 30 December 2024 (UTC)- I suck at documentation; it is known. Documentation updated to note that
|_reuse=
is not supported for positional parameters. - —Trappist the monk (talk) 15:35, 30 December 2024 (UTC)
- Is it simply not implemented into the module or due to a limitation in Scribunto? Nardog (talk) 07:16, 31 December 2024 (UTC)
- I suck at documentation; it is known. Documentation updated to note that
- That was just an example. My inquiry has been a general one about this module and
- I'm not going to play your game; heaping constraint upon constraint feels too much like hostility that I neither need nor want in my life. You asked:
- Again, you're not answering my question. Pretend {{IPA}} was interface-protected and no interface admin was around. Now what do I do? Nardog (talk) 01:03, 30 December 2024 (UTC)
- Did you try creating a named alias for
- Forget {{IPA double slash}} exists for a moment. My question stands. Nardog (talk) 23:33, 29 December 2024 (UTC)
- I confess that I don't understand what is wrong with the current implementation of
- So what can I do to make the template output essentially the same thing as