Module:Redirect: Difference between revisions

From Roses, Tulips, & Liberty
Content added Content deleted
(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
-- error message when page does not exist or the redirect target cannot be determined for some reason.
returned page name is as plain text, or when the bracket parameter is given, as a page link. An error message
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