Module:Redirect/sandbox
![]() | This is themodule sandboxpage forModule:Redirect(diff). See also the companion subpage fortest cases(run). |
![]() | This Lua module is used in system messages,and onapproximately 4,480,000 pages, or roughly 7% of all pages. Changes to it can cause immediate changes to the Wikipedia user interface. To avoid major disruption and server load, any changes should be tested in the module's/sandboxor/testcasessubpages, or in your ownmodule sandbox.The tested changes can be added to this page in a single edit. Please discuss changes on thetalk pagebefore implementing them. |
![]() | This module is rated asbeta,and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
![]() | This module issubject to page protection.It is ahighly visible modulein use by a very large number of pages, or issubstitutedvery frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it isprotectedfrom editing. |
![]() | This module depends on the following other modules: |
This module contains functions to find the target of aredirectpage.
Main
[edit]The main function 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. Its usage is{{#invoke:redirect|main|page-name}}
.Ifpage-name
does not exist or is not a redirect thenpage-name
is returned. Ifpage-name
is blank then blank is returned.
The function normally neither takes nor gives square brackets, so to show the result as a link use[[{{#invoke:redirect|main|page-name}}]]
.
If the parameterbracketis given a nonblank value, brackets will be passed on if present.
Examples
[edit]{{#invoke:redirect|main|WP:AFC}}
→ Wikipedia:Articles for creation{{#invoke:redirect|main|[[WP:AFD]]|bracket=yes}}
→Wikipedia:Articles for deletion{{#invoke:redirect|main|Wikipedia:Articles for deletion}}
→ Wikipedia:Articles for deletion{{#invoke:redirect|main|Wikipedia:Articles for rumination}}
→ Wikipedia:Articles for rumination
Note:WP:AFCandWP:AFDare both redirects, butWikipedia:Articles for deletionis not, andWikipedia:Articles for ruminationdoes not exist.
LuaMain
[edit]If you want to use the main function from another Lua module, you may want to use the luaMain function. This provides the same functionality as the main function, but doesn't require that a frame object be available.
To use this, first load the module.
localmRedirect=require('Module:Redirect')
Then use the function with the following syntax:
mRedirect.luaMain(rname,bracket)
rnameis the name of the redirect page, and ifbracketis anything but false or nil, the module will produce a link rather than just a page name.
IsRedirect
[edit]The isRedirect function is used from wiki pages to find out if a given page is a redirect or not. If the page is a redirect, the function returns "yes", and if not the output is blank. Its usage is{{#invoke:redirect|isRedirect|page-name}}
.
Examples
[edit]{{#invoke:redirect|isRedirect|WP:AFC}}
→ yes{{#invoke:redirect|isRedirect|Wikipedia:Articles for deletion}}
→{{#invoke:redirect|isRedirect|Wikipedia:Articles for rumination}}
→
LuaIsRedirect
[edit]The isRedirect can be accessed from other Lua modules in the same way as the main function:
localmRedirect=require('Module:Redirect')
mRedirect.luaIsRedirect(rname)
GetTarget
[edit]The getTarget function fetches the target page name of a redirect page, and is only usable from Lua. If the page specified is a redirect, then the target is returned; otherwise the function returns nil.
To use it, first load the module.
localmRedirect=require('Module:Redirect')
Then use the function with the following syntax:
mRedirect.getTarget(page)
pagecan be either the name of the redirect page as a string, or amw.title object.
See also
[edit]- phab:T68974- Provide a standard way to get the target of a redirect page
- mw:Extension:Scribunto/Lua reference manual#Title objects,the Scribunto interface for determining a page's redirect status
- Template:Get QID,which uses this module
- Template:Submit an edit request,which uses this module
-- This module provides functions for getting the target of a redirect page.
localp={}
-- Gets a mw.title object, using pcall to avoid generating script errors if we
-- are over the expensive function count limit (among other possible causes).
localfunctiongetTitle(...)
localsuccess,titleObj=pcall(mw.title.new,...)
ifsuccessthen
returntitleObj
else
returnnil
end
end
-- Gets the name of a page that a redirect leads to, or nil if it isn't a
-- redirect.
functionp.getTargetFromText(text)
localtarget=string.match(
text,
"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]"
)orstring.match(
text,
"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
)
returntargetandmw.uri.decode(target,'PATH')
end
-- Gets the target of a redirect. If the page specified is not a redirect,
-- returns nil.
functionp.getTarget(page,fulltext)
-- Get the title object. Both page names and title objects are allowed
-- as input.
localtitleObj
iftype(page)=='string'ortype(page)=='number'then
titleObj=getTitle(page)
elseiftype(page)=='table'andtype(page.getContent)=='function'then
titleObj=page
else
error(string.format(
"bad argument #1 to 'getTarget'"
.."(string, number, or title object expected, got %s)",
type(page)
),2)
end
ifnottitleObjthen
returnnil
end
localtargetTitle=titleObj.redirectTarget
iftargetTitlethen
iffulltextthen
returntargetTitle.fullText
else
returntargetTitle.prefixedText
end
else
returnnil
end
end
--[[
-- Given a single page name determines what page it redirects to and returns the
-- target page name, or the passed page name when not a redirect. The passed
-- page name can be given as plain text or as a page link.
--
-- Returns page name as plain text, or when the bracket parameter is given, as a
-- page link. Returns an error message when page does not exist or the redirect
-- target cannot be determined for some reason.
--]]
functionp.luaMain(rname,bracket,fulltext)
iftype(rname)~="string"ornotrname:find("%S")then
returnnil
end
bracket=bracketand"[[%s]]"or"%s"
rname=rname:match("%[%[(.+)%]%]")orrname
localtarget=p.getTarget(rname,fulltext)
localret=targetorrname
ret=getTitle(ret)
ifretthen
iffulltextthen
ret=ret.fullText
else
ret=ret.prefixedText
end
returnbracket:format(ret)
else
returnnil
end
end
-- Provides access to the luaMain function from wikitext.
functionp.main(frame)
localargs=require('Module:Arguments').getArgs(frame,{frameOnly=true})
returnp.luaMain(args[1],args.bracket,args.fulltext)or''
end
-- Returns true if the specified page is a redirect, and false otherwise.
functionp.luaIsRedirect(page)
localtitleObj=getTitle(page)
ifnottitleObjthen
returnfalse
end
returntitleObj.isRedirect
end
-- Provides access to the luaIsRedirect function from wikitext, returning 'yes'
-- if the specified page is a redirect, and the blank string otherwise.
functionp.isRedirect(frame)
localargs=require('Module:Arguments').getArgs(frame,{frameOnly=true})
ifp.luaIsRedirect(args[1])then
return'yes'
else
return''
end
end
returnp