Module talk:Redirect

Latest comment: 1 year ago by Lemondoge in topic Protected edit request on 16 April 2023

Why am I confused?

edit

At WP:VPT §Is it possible to resolve a redirect in template? you wrote:

... [[{{#invoke:redirect|main|WP:AFC}}]] gets you Wikipedia:Articles for creation ...

So I visited Module:Redirect and found this:

---- This module accepts the name of a single page. It determines if the page is a redirect; if so it looks up the page, extracts the target, and returns the target name as text.


So, why, he asks, are there two parameters? In the example you gave both main and WP:AFC. I tried your module with the redirect page from the WT:VPT conversation:

[[{{#invoke:redirect|RNAS_Kirkwall|WP:AFC}}]] → [[Script error: The function "RNAS_Kirkwall" does not exist.]]
[[{{#invoke:redirect|main|RNAS_Kirkwall}}]]Kirkwall Airport

Why are two parameters necessary? And, surely there is a better error message than Script error.

Trappist the monk (talk) 17:12, 18 March 2013 (UTC)Reply

It occurred to me to also wonder if the first parameter could be empty:
[[{{#invoke:redirect||RNAS_Kirkwall}}]] → [[Script error: The function "" does not exist.]]
Apparently not. So what about meaningless text?
[[{{#invoke:redirect|sdjadrsgjlk|RNAS_Kirkwall}}]] → [[Script error: The function "sdjadrsgjlk" does not exist.]]
Again, apparently not. So what about the name of a real article?
[[{{#invoke:redirect|UP Aerospace|RNAS_Kirkwall}}]] → [[Script error: The function "UP Aerospace" does not exist.]]
Nope. Is "main" some sort of secret word?
Trappist the monk (talk) 17:34, 18 March 2013 (UTC)Reply
{{#invoke:}} takes two parameters: the first is the module name (redirect in this case), the second the function to use from that module (main in this case, as specified by the line "function p.main(frame)" in the module). So the third parameter given to #invoke is the first parameter given to the function. In that way modules can make more than one functions available.
To get more information on the script error, you have click it. MrBlueSky (talk) 14:40, 19 March 2013 (UTC)Reply
Thank you. I've learned a bit here.
Trappist the monk (talk) 15:16, 19 March 2013 (UTC)Reply
Thanks for answering that! I've gotten used to using these module talk pages for anything but talking, and this is the first I noticed the conversation... Wnt (talk) 20:44, 19 March 2013 (UTC)Reply

Redirect types and categories

edit

I am working on building a module to hold the matrix of the {{redr}} codes and associated categories, and also to have logic that automatically detects the correct codes for a redirect. See Wikipedia:Lua_requests#Redirect_categorisation and especially the especially User:John Vandenberg/AutoCategoriseRedirect where I am doing some initial prototyping. The easiest to automatically detect are WP:Shortcuts and Category:Cross-namespace redirects, and those are the ones I am most interested in automatically detecting. @Wnt:, if you think any of the functionality I am working on would benefit this module, and the current uses, some code sharing needs to be organised (the code could be put in this module, or in a separate module that this modules uses), as the automatic redirect type detection should use the 'Redirect' module to extract the redirect target. John Vandenberg (chat) 00:41, 22 January 2014 (UTC)Reply

Well, actually at the moment I can't edit the module on account of it being protected (Mr. Stradivarius did say I could get template editor status, but I procrastinated about picking out a more secure password). He actually rewrote a lot of the highest-level code in the module anyway, and should be good to ask. Also, I wonder about -- I don't really know -- how much time it takes to require a routine out of another module. I don't understand how you're going to get your module called from uncategorized redirects, but if you end up tagging a very large number of them, even a tiny delay for opening another module could add up. And, if someone ever goes in and edits the required Module:Redirect, it'll affect all those pages. There's also a little bit of optimization that can be done by combining the two modules: right now, you do an #invoke:Page|namespace and an invoke of this module, each of which make an expensive call to mw.title.new(), and both would have to be adapted if they're to share it. So I'm thinking you might want to just copy the code, as inelegant as that may be. Wnt (talk) 07:53, 22 January 2014 (UTC)Reply
I'll implement the new module slowly using this module, on only a few pages of each type, so that changes dont have a large impact. If there is a performance issue, I'll switch to calling the relevant functions directly. John Vandenberg (chat) 10:32, 26 January 2014 (UTC)Reply

Flag to resolve soft redirects and redirects at RfD

edit

When a redirect is listed at RfD, it looks like User:John Vandenberg/testcases/Redirect/1 (as documented poorly at mw:Help:Redirects), which the mediawiki software determines is not a 'redirect', and this module doesnt parse and extract the redirect target. It would be nice if {{RFDnote}} and other functions could ask for the redirect target using this module, knowing that it is currently not an active redirect. Likewise, it would be nice if this module could extract the target from {{soft redirect}}, {{wiktionary redirect}}, etc. I think one 'soft=yes' flag would be sufficient to support any 'semi'-redirect page. I'm happy to put up a code mod in the sandbox if others think this is appropriate. Otherwise I'll write a SoftRedirect Module ;-) John Vandenberg (chat) 09:51, 26 January 2014 (UTC)Reply

Protected edit request on 15 April 2014

edit

Please make these changes, so that {{#invoke:redirect|main|{{TALKPAGENAME}}}} works right when the page name contains apostrophes or other characters escaped by {{TALKPAGENAME}}. Jackmcbarn (talk) 21:13, 15 April 2014 (UTC)Reply

  DoneMr. Stradivarius ♪ talk ♪ 06:25, 16 April 2014 (UTC)Reply
@Mr. Stradivarius: This change will re-break this if it goes live. See the last test in Module talk:Redirect/sandbox testcases. (Unrelated: Why does this module have a /testcases and a /sandbox testcases?) Jackmcbarn (talk) 16:10, 17 May 2014 (UTC)Reply
@Jackmcbarn: I've moved the sandbox test cases to Module:Redirect/testcases. I've also switched to doing the canonicalisation purely with title objects. This makes things easier coding-wise, but it does mean that we have one more expensive function call for each call to the module. Is this likely to cause problems anywhere? — Mr. Stradivarius ♪ talk ♪ 04:55, 18 May 2014 (UTC)Reply
@Mr. Stradivarius: I don't think that will cause problems. Jackmcbarn (talk) 17:30, 18 May 2014 (UTC)Reply

Query

edit

@Wnt and Mr. Stradivarius: just wondering if there might be any possibility of a module which would detect a disambiguation page? There is some logic associated with Template:Disambig editintro which will make it display automatically on such a page; I don't know if it can be exploited here. Thanks — Martin (MSGJ · talk) 09:15, 13 January 2016 (UTC)Reply

@MSGJ: I had this idea back in 2014, but after talking about it on IRC it looks like it wouldn't be feasible. There's a Phabricator ticket about it at phab:T71441. — Mr. Stradivarius ♪ talk ♪ 09:40, 13 January 2016 (UTC)Reply
Oh well - pity! But paradoxes must be avoided at all costs ;) — Martin (MSGJ · talk) 09:51, 13 January 2016 (UTC)Reply
I think there's actually a way to do this. I've elaborated on the ticket. Kaldari (talk) 21:18, 31 October 2016 (UTC)Reply

Protected edit request on 30 March 2017

edit

Sandbox diffs

Edits allow for the fragment to be included when requesting the target of a redirect, but only when the |fulltext= parameter is set, meaning no changes are required to templates that already use the module as-is.

Example:

  • {{#invoke:Redirect|main|MOS:SEASON}}: Wikipedia:Manual of Style/Dates and numbers
  • {{#invoke:Redirect/sandbox|main|MOS:SEASON}}: Wikipedia:Manual of Style/Dates and numbers

  • {{#invoke:Redirect|main|MOS:SEASON|fulltext=}}: Wikipedia:Manual of Style/Dates and numbers
  • {{#invoke:Redirect/sandbox|main|MOS:SEASON|fulltext=}}: Wikipedia:Manual of Style/Dates and numbers

  • {{#invoke:Redirect|main|MOS:SEASON|fulltext=y}}: Wikipedia:Manual of Style/Dates and numbers#Seasons
  • {{#invoke:Redirect/sandbox|main|MOS:SEASON|fulltext=y}}: Wikipedia:Manual of Style/Dates and numbers#Seasons

-- AlexTW 10:03, 30 March 2017 (UTC)Reply

URL 1 is the "old" part of your sandbox diffs link, and URL 2 is the "new". Do I understand rightly that URL 1 is the current version of the module page, and that you're asking that we copy the content of URL 2 to the module? Nyttend (talk) 00:54, 3 April 2017 (UTC)Reply
PS, AlexTheWhovian, I meant to ping you in the first edit but forgot. Nyttend (talk) 00:55, 3 April 2017 (UTC)Reply
@Nyttend: My bad. What I'm looking to be implemented is what is in the sandbox as it stands now. -- AlexTW 00:57, 3 April 2017 (UTC)Reply
Done. They didn't make me an admin because I understand this kind of coding — as always, any admin should revert me without question if I made some sort of mistake. Nyttend (talk) 01:03, 3 April 2017 (UTC)Reply
Thank you! Now I can proceed with my related projects. I've tested the code thoroughly, and the edits only add onto the previous version of the code; any article using the code should remain exactly the same as it was. Cheers for that. -- AlexTW 01:04, 3 April 2017 (UTC)Reply

Protected edit request on 26 June 2017

edit

For Testing SoumyaSahu (talk) 10:43, 26 June 2017 (UTC)Reply

  Not done Unclear request. If you want to modify test to the module, you may do so at Module:Redirect/sandbox. -- AlexTW 10:50, 26 June 2017 (UTC)Reply

cross project calls

edit

Is there a way to show if a page in another project is a redirect and find the actual article? --Traveler100 (talk) 11:31, 17 February 2018 (UTC)Reply

Why parse the page content?

edit

Hi. Why does this module parse the page text to find the redirect target? Why not use Title.redirectTarget instead? I guess Title.redirectTarget wasn't available when this was implemented, but now that it's there, it should be used instead. Qwertyytrewqqwerty (talk) 14:28, 3 March 2018 (UTC)Reply

Or maybe there's some good reason for it to work like that. AlexTheWhovian, any thoughts on this?
I have a version that uses Title.redirectTarget here: es:Módulo:Redirect es:Módulo:Redirección (no testcases, though). Qwertyytrewqqwerty (talk) 10:04, 9 March 2018 (UTC).Reply
I've sandboxed it Galobtter (pingó mió) 11:41, 31 March 2018 (UTC)Reply
Somebody sumbit an edit request!. {{3x|p}}ery (talk) 00:34, 15 May 2018 (UTC)Reply

Expensive call?

edit

Could someone add to the documentation that this module call is expensive (or not expensive)? - 15:58, 21 March 2018 (UTC)

redirected files

edit

T193162 {{#invoke:redirect|isRedirect|File:IMAGE.jpg}} gives "" (blank), despite the fact that File:IMAGE.jpg is a redirect to File:IMAGE (Explorer 78).jpg. I created phabricator:T193162 about this issue, but wanted to alert you that this module is also affected. --Jarekt (talk) 13:15, 26 April 2018 (UTC)Reply

Jarekt, do you think this could be related to another strange behaviour (possibly related to isRedirect) causing spurious transclusions being reported in various places? See here: User talk:Paine Ellsworth#Interesting transclusion effect - any idea?
Thanks and greetings. --Matthiaspaul (talk) 07:27, 30 July 2018 (UTC)Reply

Template-protected edit request on 11 February 2019

edit

Kindly add me to the list. User: Shevonsilva Shevonsilva (talk) 22:48, 11 February 2019 (UTC)Reply

  Not done User:Shevonsilva, this is the module, not the Wikiproject page, the module do not contain any user name list. If you would like to add your name to the project, you need to go to Wikipedia:WikiProject_Redirect#Participants and add your name there. -- VulpesVulpes825 (Talk) 00:02, 12 February 2019 (UTC)Reply

Module redirection

edit

There is not a warning system in ¨Wikipedia or WikiMedia to say: this module exists with other name (ie. taken the information from Wikidata), as Wikimedia Commons does when you try to upload an existing image. So, what to do when creating a module, when one thinks it did not exist (and exist with other translated name)?. Can be used temporally an {{#invoke:}} to the other module?. --BoldLuis (talk) 20:01, 14 May 2020 (UTC)Reply

Protected edit request on 7 September 2021

edit

Please apply these changes, originally written by User:Galobtter. This will make it so the redirect target is just taken from the table returned by mw.title.new using the redirectTarget property instead of having to find it in the wikitext of the redirect, saving an expensive parser function call. These changes cause a test case to fail, but that can be disregarded because they make it (and a few more) obsolete anyway. – Rummskartoffel 11:58, 7 September 2021 (UTC)Reply

  Done. @Rummskartoffel: is it the testContentPercentInsideAmpersandCanonicalisation test you were referring to above? — Martin (MSGJ · talk) 05:34, 10 September 2021 (UTC)Reply
I restored function p.getTargetFromText because it is used by Module:RfD and the missing function was causing errors. In general, it is difficult to know if p.Anything is used elsewhere and it's safest to assume it is. Johnuniq (talk) 07:50, 10 September 2021 (UTC)Reply
@MSGJ: Yes, that's the one. Since getTargetFromText is still used I guess these tests aren't obsolete after all, but should be changed to test that function directly. I might take a shot at that later. – Rummskartoffel 11:28, 10 September 2021 (UTC)Reply

Section is stripped

edit

Not a redirect: WikiPedia#section → !!
Redirect: {{#invoke:Redirect|main|WikiPedia#section}} → Wikipedia
Pinging last editor @Johnuniq. ― Qwerfjkltalk 18:47, 21 February 2022 (UTC)Reply

I was here only to fix an error which I tracked to this module. I might have a look later but as I know nothing about this module I would need to be told exactly what should happen with the above examples which I infer are wrong. Are the examples in the documentation correct? Johnuniq (talk) 23:41, 21 February 2022 (UTC)Reply
I'm not wholly convinced that there is anything really wrong with the module. !! is not a redirect page and it doesn't have a section that the #section fragment can link to. WikiPedia is a redirect to Wikipedia. The redirect page does not have a section that the #section fragment can link to; because 'WikiPedia' is a redirect, the module correctly returns the target page Wikipedia. Yeah, the module documentation says: If page-name does not exist or is not a redirect then page-name is returned. If that is taken literally then perhaps it is broken. The fragments disappear at line 8.
Trappist the monk (talk) 00:28, 22 February 2022 (UTC)Reply
@Trappist the monk: I apologise if I was unclear with my example, I just typed #section because I was in a hurry. The example {{#invoke:Redirect|main|WikiPedia#History}} → Wikipedia better demonstrates how the section is stripped when the redirect is followed, and likewise, if the page isn't a redirect, the section is still stripped:
{{#invoke:Redirect|main|Wikiedia#History}} → Wikipedia
While the module isn't broken per se, it causes a problem at WP:AFCRC (from {{Request redirect}}), and it would be nice if the module was fixed improved. Thank you for taking the time to respond to my hastily-added examples. ― Qwerfjkltalk 20:44, 22 February 2022 (UTC)Reply
I looked in {{request redirect}} which you are apparently blaming for whatever issue it is that has arisen at WP:AFCRC. {{request redirect}} does not invoke Module:Redirect. Do you really mean {{request redirect/post}}? That template does invoke module:redirect. Without some sort of indication of what the problem really is and where it lies, and some sort of definitive test case that can illustrate problem and confirm the fix, I am not willing to make any changes to Module:redirect. Perhaps some other editor is.
Trappist the monk (talk) 00:08, 23 February 2022 (UTC)Reply
I do mean {{Request redirect/post}}, specifically: *Target of redirect: {{safesubst<noinclude/>:u2w|1={{safesubst<noinclude/>:#if: {{safesubst<noinclude/>:#invoke:redirect|isRedirect|{{{target|{{{2|}}}}}}}} | <!-- Is redirect, follow --> {{safesubst<noinclude/>:#invoke:redirect|main|{{safesubst<noinclude/>:trimbr|1={{{target|{{{2|}}}}}}}}}} | {{safesubst<noinclude/>:trimbr|1={{{target|{{{2|}}}}}}}} }} |error=no}}
The problem is that if the "target of redirect" requested has a section, it is stripped e.g. Wikipedia#History → Wikipedia, which isn't helpful. The template checks if the target is a redirect first, to minimise section stripping errors.  ― Qwerfjkltalk 07:16, 23 February 2022 (UTC)Reply
I have simplified the above mess to what I think are the essentials:
{{#if: {{#invoke:redirect|isRedirect|{{{target}}}}} | <!-- Is redirect, follow --> {{#invoke:redirect|main|{{{target}}}}} | {{{target}}} }}
replacing {{{target}}} with the 'target' you suggest above ('Wikipedia#History'):
{{#if: {{#invoke:redirect|isRedirect|Wikipedia#History}} | <!-- Is redirect, follow --> {{#invoke:redirect|main|Wikipedia#History}} | Wikipedia#History }}
Wikipedia#History
That result because Wikipedia is not a redirect.
Changing to 'WikiPedia#History':
{{#if: {{#invoke:redirect|isRedirect|WikiPedia#History}} | <!-- Is redirect, follow --> {{#invoke:redirect|main|WikiPedia#History}} | WikiPedia#History }}
Wikipedia
That result because WikiPedia is a redirect where the target is specified as 'Wikipedia'.
The purpose of Module:Redirect main() is to return <target> from the redirect's #REDIRECT [[<target>]]. If <target> does not contain a <#fragment> then module:redirect does not return a fragment. There are two ways for module:redirect to get a target from a redirect page:
p.getTargetFromText (text) where text is the unparsed content of a redirect page – for WikiPedia, that is the #REDIRECT [[Wikipedia]] and the {{Redirect category shell}} template. This function is standalone so is not called by main(). To see this in action, enter this in a Scribuntu debug console (contents of WikiPedia all run-together here for convenience):
=p.getTargetFromText ('#REDIRECT [[Wikipedia]] {{Redirect category shell|1={{R from incorrect capitalisation}}{{R from CamelCase}}}}')
For the other way, module:redirect creates a title object and then queries the object to fetch the target. This is how main() gets the redirect target. To see this in action enter this in the debug console:
=mw.title.new ('WikiPedia').redirectTarget
Just for completeness, try this:
=mw.title.new ('WikiPedia#History').redirectTarget
All of those return 'Wikipedia' because that is the target specified in 'WikiPedia'.
If {{Request redirect/post}} wants to apply a fragment, it is that template's responsibility to do so.
Trappist the monk (talk) 15:32, 23 February 2022 (UTC)Reply
I agree that retaining the section is not the primary function of the module, I was just curious if it was possible/desirable to do so. As you advise to handle this in {{Request redirect/post}}, I'll implement that.. ― Qwerfjkltalk 16:19, 23 February 2022 (UTC)Reply
Note that redirects can themselves point to specific sections of pages; in such a case I'd assume (but don't have any examples handy to actually test) that the module will return the target page, with the section intact. If the module preserves any section passed in when the title passed in is a redirect, it would have to correctly handle that case. (I'm not completely sure how MediaWiki handles a link-with-section to a redirect that points to a specific section of a page, but it makes the most sense to me that in that case, MediaWiki would ignore the section on the link and only use the section targeted by the redirect.) ディノ千?!☎ Dinoguy1000 02:14, 25 February 2022 (UTC)Reply
I have created a redirect of my sandbox that redirects to this discussion (User:Trappist the monk/sandbox has #REDIRECT [[Module_talk:Redirect#Section_is_stripped]]).
If you use the same form of invoke that is used in {{Request redirect/post}} you get:
{{#invoke:redirect|main|User:Trappist the monk/sandbox}} → User:Trappist the monk/sandbox
But, if you tell the invoke to return the full text of the redirect, you get:
{{#invoke:redirect|main|User:Trappist the monk/sandbox|fulltext=yes}} → User:Trappist the monk/sandbox
Trappist the monk (talk) 14:17, 25 February 2022 (UTC)Reply
Interesting... if I add a section to the link to your sandbox page, it overrides the section in the target of the redirect: User:Trappist the monk/sandbox#Foobar. This is opposite to what I expected would happen. ディノ千?!☎ Dinoguy1000 08:34, 26 February 2022 (UTC)Reply
I don't know why that is but I do know that it has nothing to do with Module:redirect because [[User:Trappist the monk/sandbox#Foobar]] is a generic, everyday, wikilink. Just as a test, I added a section §Foobar to my sandbox. That did not change anything; User:Trappist the monk/sandbox#Foobar redirects to the top of this page. Perhaps ask at WP:VPT?
Trappist the monk (talk) 18:50, 26 February 2022 (UTC)Reply
My point with it was that, if this module is changed to preserve sections on input, then it would have to handle the case where a section is passed in, but the input title is a redirect that includes a section itself. The obvious way to handle this case is to mirror what MediaWiki does. Beyond this, I have no particular opinion on the functionality in general. ディノ千?!☎ Dinoguy1000 12:08, 27 February 2022 (UTC)Reply

Exception for redirects that intentionally have Wikidata objects?

edit

I have utilzed this nice module in {{Get QID|<Wikipedia page title>}} to follow redirects. Then Get QID still works if a page is moved.

However, there are redirects that intentionally have their own Wikidata objects. See Category:Wikidata_redirects. In that case I want that template to give the QID of the source page, and not of the redirect destination page. Should I implement that in the template as an ugly work-around, or could this module take care of that problem?

For example, {{Q|{{get QID|388282 ʻAkepa}}}} gives list of minor planets: 388001–389000 (Q18678271) 388282 ʻAkepa (Q32037018). I want it to result in 388282 ʻAkepa (Q32037018).

Meaning: [[{{#invoke:redirect|main|388282 ʻAkepa}}]] now gives List of minor planets: 388001–389000, but my question is if it can make an exception because the page belongs to the above mentioned category, and respond with 388282 ʻAkepa ? Tomastvivlaren (talk) 10:40, 1 March 2022 (UTC)Reply

I solved the problem temporarily using ugly template code in {{Get QID}}.Tomastvivlaren (talk) 17:16, 1 March 2022 (UTC)Reply

Protected edit request on 16 April 2023

edit

This might be a little excessive for an edit to a fully protected module, but:

I would like to simplify the following (lines 103-107, in function p.luaIsRedirect):

if titleObj.isRedirect then
	return true
else
	return false
end

to:

return titleObj.isRedirect

because titleObj.isRedirect will only ever yield "true" or "false". (diff) {{Lemondoge|Talk|Contributions}} 21:43, 16 April 2023 (UTC)Reply

Has this been tested? Scibunto manual does not explicitly say that isRedirect will be true or false. — Martin (MSGJ · talk) 07:38, 17 April 2023 (UTC)Reply
@Lemondoge: I have noticed your edits to sandbox modules that I monitor. Thanks for the tweaks and thanks for finding the bug noted here. However, I am not sure there is any benefit from optimizing code unless done as part of a significant effort by someone deeply invested in the particular module. Take this edit request—you are probably correct but who knows and who cares? It can be very challenging to verify rearrangements to boolean expressions. The original here is bulletproof. More importantly, it is easily seen to be bulletproof. I would leave it as is. It's not particularly important, but the edit request would result in uncertainty about what return values can occur while the original code removes any doubt. Johnuniq (talk) 07:59, 17 April 2023 (UTC)Reply
Aye, fair enough.   Request withdrawn {{Lemondoge|Talk|Contributions}} 12:43, 17 April 2023 (UTC)Reply