Jump to content

Module talk:Template wrapper

Page contents not supported in other languages.
From Wikipedia, the free encyclopedia

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:

{{ERIC/sandbox|ED046562|EJ671671|url-access=free}}
ERIC ED046562, EJ671671

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 |via= (help); Unknown parameter |editors= ignored (|editor= suggested) (help)CS1 maint: location missing publisher (link)

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)[reply]

Unless I'm misunderstanding something, the below looks like it will add all the positional pframe_args regardless of |_exclude= or unset.
	if pass_all then
		for i, v in ipairs (pframe_args) do
			add_parameter (i, v, args, list);
		end
	end
I think the below would do what you intend.
local 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
It might make more sense to use |_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)[reply]
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 didn't consider the possibility of a positional parameter having the unset value. I'll fix that.
Using ipairs() as I did ensures that empty positional parameters are passed along to the working template. In the pairs() version, the if v and ('' ~= v) then prevents empty positional parameters from being added to the args table.
I overlooked adding |_pass-all= to frame_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)[reply]
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)[reply]
Yeah, we edit conflicted over that. I've updated the live module.
Trappist the monk (talk) 22:36, 19 August 2018 (UTC)[reply]
@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)[reply]
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)[reply]
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)[reply]
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)[reply]

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)[reply]

_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)[reply]

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)[reply]
@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)[reply]
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)[reply]

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)[reply]

Positional parameters in the invoke are ignored. In this particular example, there are two {{{1}}} positional parameters:
  1. {{IPA double slash/sandbox|r}}r is {{{1}}}
  2. {{#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)[reply]
So 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}}? I thought that was the whole point of _reuse. Nardog (talk) 22:18, 29 December 2024 (UTC)[reply]
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)[reply]
Forget {{IPA double slash}} exists for a moment. My question stands. Nardog (talk) 23:33, 29 December 2024 (UTC)[reply]
Did you try creating a named alias for {{IPA}} parameter {{{1}}}? Sommat like:
  1. {{IPA double slash/sandbox|text=r}}
  2. {{#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 switched wrap to list. 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)[reply]
A little refinement:
  1. {{IPA double slash/sandbox|text=r|lang=es}}
  2. {{IPA double slash/sandbox|r|lang=es}}
  3. {{#invoke:Template wrapper|list|_template=IPA|_reuse=text|text={{{text|{{{1|}}}}}}}}
the above gave me:
  1. {{IPA|lang=es|text=⫽r⫽}}
  2. {{IPA|lang=es|text=⫽r⫽}}
Trappist the monk (talk) 01:28, 30 December 2024 (UTC)[reply]
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)[reply]
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)[reply]
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)[reply]
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)[reply]
Is it simply not implemented into the module or due to a limitation in Scribunto? Nardog (talk) 07:16, 31 December 2024 (UTC)[reply]