Difference between revisions of "Module:Redirect"
Jump to navigation
Jump to search
m (1 revision) |
(No difference)
|
Revision as of 20:06, 7 February 2014
-- 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: -- redirect-page-name and redirect-page-name
local p = {}
function p.main(frame)
-- If called via #invoke, use the args passed into the invoking -- template, or the args passed to #invoke if any exist. Otherwise -- assume args are being passed directly in from the debug console -- or from another Lua module. local origArgs if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args for k, v in pairs( frame.args ) do origArgs = frame.args break end else origArgs = frame end -- Trim whitespace and remove blank arguments. local args = {} for k, v in pairs( origArgs ) do v = mw.text.trim( v ) if v ~= then args[k] = v end end local rname, bracket = args[1], args.bracket if type(rname) ~= "string" or not mw.ustring.match(rname, "%S") then return end bracket = bracket and "%s" or "%s" rname = mw.ustring.match(rname, "%[%[(.+)%]%]") or rname -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local noError, rpage = pcall(mw.title.new, rname) if not noError or noError and not rpage or not rpage.isRedirect then -- mw.title.new failed, or the page is not a redirect, so use the passed page name. return mw.ustring.format(bracket, rname) end
local redirect = mw.ustring.match(rpage:getContent() or "", "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]]-)%]%]" )
if redirect then
-- Decode html entities and percent encodings.
redirect = mw.text.decode(redirect, true)
redirect = mw.uri.decode(redirect, 'WIKI')
return mw.ustring.format(bracket, redirect)
else
return mw.ustring.format('Module:redirect error: could not parse redirect - %s', rname)
end
end
return p