Module:Redirect: Difference between revisions

    From Nonbinary Wiki
    (update comment)
    m (multiline comment syntax is ignored by syntaxhighlight extension)
    Line 1: Line 1:
    --[=[
    -- Given a single page name determines what page it redirects to and returns the target page name, or the
    Given a single page name determines what page, if any, 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.
    passed page name if not a redirect. The passed page name can be given as plain text or as a page link. The
    -- Returns page name as plain text, or when the bracket parameter is given, as a page link. Returns an
    returned page name is as plain text, or when the bracket parameter is given, as a page link. An error message
    -- error message when page does not exist or the redirect target cannot be determined for some reason.
    is returned if page does not exist or the redirect target cannot be determined for some reason.


    Thus these are roughly the same:
    -- Thus these are roughly the same:
      [[{{#invoke:redirect|main|redirect-page-name}}]] and {{#invoke:redirect|main|redirect-page-name|bracket=yes}}
    -- [[{{#invoke:redirect|main|redirect-page-name}}]] and {{#invoke:redirect|main|redirect-page-name|bracket=yes}}
    --]=]


    p={}
    p={}

    Revision as of 21:57, 17 April 2013

    Documentation for this module may be created at Module:Redirect/doc

    -- 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.
    
    -- Thus these are roughly the same:
    -- [[{{#invoke:redirect|main|redirect-page-name}}]] and {{#invoke:redirect|main|redirect-page-name|bracket=yes}}
    
    p={}
    
    function p.main(frame)
        local args, pargs = frame.args, (frame:getParent() or {}).args or {}
        local rname, bracket = args[1] or pargs[1], args.bracket or pargs.bracket
        
        if not rname or not mw.ustring.match(rname, "%S") then return "" end
        bracket = bracket and "[[%s]]" or "%s"
        rname = mw.ustring.match(rname,"%[%[(.+)%]%]") or rname
        
        local rpage, err = mw.title.new(rname)
        
        -- avoid expensive operation when nothing to do
        if not rpage then
            err = "File not found (mw.title.new failed)"
        elseif rpage.id == 0 then
            err = "File not found (id=0):"
        elseif not rpage.isRedirect then
            return mw.ustring.format(bracket, rname) -- not a redirect so use passed page name (for some general-purpose template use)
        else
            local redirect = mw.ustring.match( rpage:getContent() or "", "^#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*%[%[(.-)%]%]" )
            
            if redirect then
                return mw.ustring.format(bracket, redirect)
            end
            
            err = "failed to understand"
        end
        
        return '<span style="text-color:red;">[[Module:redirect]] error: ' .. err .. ' - [[' .. rname .. ']]</span>'
    end
    
    return p