![]() | This is the module sandbox page for Module:Resolve category redirect (diff). |
![]() | This Lua module is used in MediaWiki:Babel-category-override, and on approximately 903,000 pages, or roughly 1% 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 /sandbox 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. |
![]() | This module depends on the following other modules: |
Related pages |
---|
Resolves a soft category redirect.
It takes one parameter, which is the name of a category. It returns that category name, unless the category exists and is a {{category redirect}} ... when it returns the name of the redirect target.
Usage
edit{{Resolve category redirect|categoryname}}
Examples
editCategory exists and is not redirected: Category:1970s
edit{{Resolve category redirect|1970s}}
→ 1970s{{Resolve category redirect|Category:1970s}}
→ 1970s
Category exists and is a soft redirect: Category:Mosques completed in the 19th century
edit{{Resolve category redirect|Mosques completed in the 19th century}}
→ 19th-century mosques{{Resolve category redirect|Category:Mosques completed in the 19th century}}
→ 19th-century mosques
Category exists and is a soft redirect: Category:Organisations
edit{{Resolve category redirect|Organisations}}
→ Organizations{{Resolve category redirect|Category:Organisations}}
→ Organizations
Non-existent category: Category:Colourless green things
edit{{Resolve category redirect|Colourless green things}}
→ Colourless green things{{Resolve category redirect|Category:Colourless green things}}
→ Colourless green things
{{Title year}} in category: Category:1781 in Mexico
edit{{Resolve category redirect|1781 in Mexico}}
→ 1781 in New Spain{{Resolve category redirect|Category:1781 in Mexico}}
→ 1781 in New Spain
Templates
edit{{Title year}} and other templates without parameters are now allowed in the {{Category redirect}} target name, and are evaluated accordingly. Multiple templates are not evaluated, but such functionality can be requested with an appropriate working example.
The character !
is also now allowed (see testcases).
Avoiding deletion of the redirected page
editIt is helpful to also add {{R from category navigation}} or {{R from template-generated category}} (as appropriate) to indicate that the redirect is required for navigation between category pages. See those template page for full syntax. This also hides a speedy deletion button that is otherwise displayed to administrators.
Tracking categories
editSee also
editlocal p = {}
local function cleanup( rtarget )
rtarget = mw.text.trim( rtarget )
rtarget = mw.ustring.gsub( rtarget, '^1%s*=%s*', '' )
rtarget = string.gsub( rtarget, '^[Cc]ategory:', '' )
return rtarget
end
--Returns the target of {{Category redirect}}, if it exists, else returns the original cat.
function p.rtarget( cat, frame )
cat = string.gsub( cat, '^[Cc]ategory:', '' ) --"!" in cat not recognized by mw.title.makeTitle() otherwise
if string.match( cat, '[|]' ) then
return cat
end
local catcontent = mw.title.makeTitle( 'Category', cat or '' ):getContent() --makeTitle() allows ':' in cat names
if string.match( catcontent or '', '{{ *[Cc]at' ) then --regex common to all possible calls
local getRegex = require('Module:Template redirect regex').main
local tregex = getRegex('Category redirect')
for _, v in pairs (tregex) do
local found = mw.ustring.match( catcontent, v..'%s*|' )
if found then --refine
local rtarget = mw.ustring.match( catcontent, v..'%s*|%s*([^{|}]+)}}' ) or --{{Category redirect|...}} (most common)
mw.ustring.match( catcontent, v..'%s*|%s*([^{|}]+)|' ) --{{Category redirect|...|...}} (2nd most common)
if rtarget then --normal, plain text target
return cleanup(rtarget)
else
local ty_regex = '%s*|%s*([^{|}]*{{([^{|}]+)}}[^{|}]*)' --$1 nests $2
local rtarget_orig, ty = mw.ustring.match( catcontent, v..ty_regex )
if rtarget_orig then --{{Category redirect|...{{Title year}}... (least common)
local ty_eval = frame:expandTemplate{ title = ty, args = { page = cat } } --frame:newChild doesn't work, use 'page' param instead
local rtarget_eval = mw.ustring.gsub( rtarget_orig, '{{%s*'..ty..'%s*}}', ty_eval )
return cleanup(rtarget_eval)
else --potential TODO: 1) +loop for multiple templates, 2) allow sub-parameters
return cat
end end end end end
return cat
end
function p.main( frame )
local args = frame:getParent().args
local cat = mw.text.trim( args[1] or '' )
if (cat == '') or (cat == nil) then
return ''
end
return p.rtarget( cat, frame )
end
return p