VOOZH about

URL: https://en.wikipedia.org/wiki/Module:Redirect/sandbox

⇱ Module:Redirect/sandbox - Wikipedia


Jump to content
From Wikipedia, the free encyclopedia
👁 Image
This is the module sandbox page for Module:Redirect (diff).
See also the companion subpage for test cases (run).
👁 Image
Module documentation
[view] [edit] [history] [purge]
👁 Warning
This Lua module is used in system messages, and on approximately 5,140,000 pages, or roughly 8% 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 or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on the talk page before implementing them.
👁 Image
Due to a server limit of 500 "expensive parser function" calls (e.g. #ifexist:, PAGESIZE:, and PAGESINCATEGORY:), this module will only work properly if the page using it has not already exceeded the limit. When the limit is exceeded, the page using this template or module is categorised in Category:Pages with too many expensive parser function calls. (further information)
👁 Image
This module is rated as beta. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected.
👁 Image
This module depends on the following other modules:

This module contains functions to find the target of a redirect page.

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}}. If page-name does not exist or is not a redirect then page-name is returned. If page-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 parameter bracket is 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|Red link example}} → Red link example

Note: WP:AFC and WP:AFD are both redirects, but Wikipedia:Articles for deletion is not, and Red link example does not exist. In addition, as a demonstration of redlinks on Wikipedia:Red link, the final page is permanently protected from non-administrator creation.

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)

rname is the name of the redirect page, and if bracket is 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)

page can be either the name of the redirect page as a string, or a mw.title object.

See also

[edit]
-- 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