跳转到内容
打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
登录后可编辑和发表评论。

Module:分类重定向

来自Vocawiki
local module = {}
 
local getArgs = require('Module:Arguments').getArgs

function _error(text)
    local frame = mw.getCurrentFrame()
    return frame:expandTemplate{
        title = "notice",
        args = {
            type = "warning",
            text = text
        }
    }
end

function _main(args)
    local frame = mw.getCurrentFrame()
    -- 检查是否是模板空间
    local page = mw.title.getCurrentTitle()
    if page.namespace ~= 14 then
        return "[[Category:错误的已重定向分类|-非属分类]]" .. _error("分类重定向错误:本页面不属于分类页面。请不要使用{{[[Template:分类重定向|分类重定向]]}}模板。")
    end
    local args1Target = mw.title.new(args[1], 'Category')
    -- 检查是否使用原生重定向
    local redirectTarget = page.redirectTarget
    if not redirectTarget then
        return "[[Category:错误的已重定向分类|R重定向错误]]" .. _error("分类重定向错误:本页面未使用MediaWiki原生的重定向。请在源代码最开始加入:<pre>#重定向 &#91;&#91;:Category:" .. args[1] .. "&#93;&#93;</pre>")
    end
    if redirectTarget.fullText ~= args1Target.fullText then
        return "[[Category:错误的已重定向分类|D重定向目标不一致]]" .. _error("分类重定向错误:MediaWiki原生的重定向与模板的重定向指向不同页面。请检查源代码。")
    end
    -- 检查是否与自身相同
    if page.text == args[1] then
        return "[[Category:错误的已重定向分类|*同名称]]" .. _error("分类重定向错误:本页面重定向到了自己。请检查源代码。")
    end
    -- 检查是否存在
    if not args1Target.exists then
        return "[[Category:错误的已重定向分类|!不存在]]" .. _error("分类重定向错误:重定向目标不存在。请检查源代码。")
    else
        local output = "[[Category:已重定向的分类|" .. (args[2] or page.text) .. "]]" .. frame:expandTemplate{
            title = "notice",
            args = {
                type = "caution",
                title = "本分类不应包含任何页面",
                l1 = "所有页面都应被重新分类至[[:Category:" .. args[1] .. "|Category:" .. args[1] .. "]]。",
                l2 = "欢迎协助将页面重新分类,但请不要因本分类暂时为空而删除,以避免同名分类被重复创建。",
                detail = "[[Help:重定向页面#分类重定向|有关分类重定向的说明 >]]"
            }
        }
        -- 检查是否清空
        if mw.site.stats.pagesInCategory(page.text, "all") > 0 then
            output = output .. "[[Category:尚未清空的已重定向分类]]" .. _error("本分类尚未清空。请检查本分类下的页面并修改为正确的分类。")
        end
        return output
    end
end

function module.main(frame)
    local args = getArgs(frame)
    return _main(args)
end

function module.add(frame)
    local page = mw.title.getCurrentTitle()
    if page.namespace == 14 and page.redirectTarget then
        return "{{cr|" .. page.redirectTarget.text .. "}}"
    end
end

return module