Module:Resolve category redirect
This template is used in MediaWiki:Babel-category-override. Changes to it can cause immediate changes to the Wikipedia user interface. To avoid large-scale disruption, any changes should first be tested in this template's /sandbox or /testcases subpage, or in your own user space. The tested changes can then be added in one single edit to this template. Please discuss any changes at the talk page before implementing them. |
මෙම මොඩියුලය මතු දැක්වෙන මොඩියුල මත යැපෙයි: |
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
[සංස්කරණය]{{Resolve category redirect|categoryname}}
Examples
[සංස්කරණය]Category exists and is not redirected: Category:1970s
[සංස්කරණය]{{Resolve category redirect|1970s}}
→ 1970 දශකය{{Resolve category redirect|Category:1970s}}
→ 1970 දශකය
Category exists and is a soft redirect: Category:Mosques completed in the 19th century
[සංස්කරණය]{{Resolve category redirect|Mosques completed in the 19th century}}
→ Mosques completed in the 19th century{{Resolve category redirect|Category:Mosques completed in the 19th century}}
→ Mosques completed in the 19th century
Category exists and is a soft redirect: Category:Organisations
[සංස්කරණය]{{Resolve category redirect|Organisations}}
→ Organisations{{Resolve category redirect|Category:Organisations}}
→ Organisations
Non-existent category: Category:Colourless green things
[සංස්කරණය]{{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
[සංස්කරණය]{{Resolve category redirect|1781 in Mexico}}
→ 1781 in Mexico{{Resolve category redirect|Category:1781 in Mexico}}
→ 1781 in Mexico
Templates
[සංස්කරණය]{{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
[සංස්කරණය]It 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
[සංස්කරණය]See also
[සංස්කරණය]
local 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
catcontent = mw.ustring.gsub( catcontent, '|%s*keep%s*=%s*[yY]?[eE]?[sS]?%s*', '' ) --remove other params
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