Mô đun:Resolve category redirect
| Mô đun Lua này được sử dụng in MediaWiki:Babel-category-override, và ở khoảng 94.000 trang. Thay đổi đến nó có thể dẫn đến thay đổi ngay lập tức giao diện người dùng Wikipedia. Để tránh gây lỗi trên quy mô lớn, tất cả thay đổi cần được thử nghiệm ở trang con /sandbox, /testcases của mô đun, hoặc ở chỗ thử mô đun. Các thay đổi đã được thử nghiệm có thể thêm vào mô đun bằng một sửa đổi duy nhất. Xin hãy thảo luận các thay đổi tại trang thảo luận trước khi áp dụng sửa đổi. |
| Mô đun này phụ thuộc vào các mô đun sau: |
| Trang liên quan |
|---|
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
- Thể loại:Thập niên 1970
{{Resolve category redirect|Thập niên 1970}}→ Thập niên 1970{{Resolve category redirect|Thể loại:Thập niên 1970}}→ Thập niên 1970
- Category exists and is a soft redirect
- Thể loại:69 theo quốc gia
{{Resolve category redirect|69 theo quốc gia}}→ Năm 69 theo quốc gia{{Resolve category redirect|Thể loại:69 theo quốc gia}}→ Năm 69 theo quốc gia
- Category exists and is a soft redirect
- Thể loại:Hồng y người Việt
{{Resolve category redirect|Hồng y người Việt}}→ Hồng y Việt Nam{{Resolve category redirect|Thể loại:Hồng y người Việt}}→ Hồng y Việt Nam
- 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
Templates
Do not use templates in the target name.
{{Resolve category redirect}} cannot expand any templates in the target name, and the { character caused crashes (as did } and !). So it does not attempt to resolve any redirect where the target includes those characters.
- Example
- Category:1781 in Mexico contained
{{category redirect|{{title year}} in New Spain}}which cannot be resolved. To be safe,{{Resolve category redirect|1781 in Mexico}}simply returned1781 in Mexico.
The above example has since been changed to{{category redirect|1781 in New Spain}}, which can be resolved.
Avoiding deletion of the redirected page
If the parameter |keep=yes is included in the category redirect, this hides a speedy deletion button that is otherwise displayed to administrators.
It is helpful to also add {{R from category navigation}} to indicate that the redirect is required for navigation between category pages. See that template page for full syntax.
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, '^[Tt]hể loại:', '' )
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
cat = string.gsub( cat, '^[Tt]hể loại:', '' )
if string.match( cat, '[|]' ) then return cat end
local cattitle = mw.title.makeTitle( 'Category', cat or '' ) --makeTitle() allows ':' in cat names
if not cattitle then return cat end
local catcontent = cattitle:getContent()
if mw.ustring.match( catcontent or '', '{{ *[Cc]at' ) or
mw.ustring.match( catcontent or '', '{{ *[Cc]at' ) or
mw.ustring.match( catcontent or '', '{{ *[Đđ]ổi' ) or
mw.ustring.match( catcontent or '', '{{ *[Đđ]htl' ) or
mw.ustring.match( catcontent or '', '{{ *[Tt]hể' ) or
mw.ustring.match( catcontent or '', '{{ *[Cc]huyển' )
then
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_ty, ty = mw.ustring.match( catcontent, v..ty_regex )
if rtarget_ty then --{{Category redirect|...{{Title year}}... (less common)
local ty_eval = frame:expandTemplate{ title = ty, args = { page = cat } } --frame:newChild doesn't work, use 'page' param instead
local rtarget_ty_eval = mw.ustring.gsub( rtarget_ty, '{{%s*'..ty..'%s*}}', ty_eval )
return cleanup(rtarget_ty_eval)
else --resolve basic parser functions: e.g. {{#time:j F Y}} on Proposed deletion as of today (very uncommon)
local pf_regex = '%s*|%s*([^{|}]*{{%s*(#[^{|}#:]+):([^{|}#:]+)}}[^{|}]*)' --$1 nests $2 & $3
local rtarget_pf, pf, arg = mw.ustring.match( catcontent, v..pf_regex )
if rtarget_pf then
local pf_eval = frame:callParserFunction{ name = pf, args = { arg } }
local rtarget_pf_eval = mw.ustring.gsub( rtarget_pf, '{{%s*'..pf..'%s*:%s*'..arg..'%s*}}', pf_eval )
return cleanup(rtarget_pf_eval)
else --potential TODO: 1) +loop for multiple templates, 2) allow sub-parameters
return cat
end
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