Module:Redirect: Difference between revisions

Suppress errors on non-existent pages - was causing an error to appear on MediaWiki:Protectedpagetext in some cases. Also use pcall for mw.title.new, and a few other tweaks.
m (Protected Module:Redirect: used in MediaWiki:Protectedpagetext ([Edit=Block all non-admin users] (indefinite) [Move=Block all non-admin users] (indefinite)))
(Suppress errors on non-existent pages - was causing an error to appear on MediaWiki:Protectedpagetext in some cases. Also use pcall for mw.title.new, and a few other tweaks.)
Line 7:
-- [[{{#invoke:redirect|main|redirect-page-name}}]] and {{#invoke:redirect|main|redirect-page-name|bracket=yes}}
 
local p = {}
 
function p.main(frame)
-- If called via #invoke, use the args passed into the invoking
local args, pargs = frame.args, (frame:getParent() or {}).args or {}
local-- rnametemplate, bracketor =the args[1] orpassed pargs[1],to args.bracket#invoke orif pargsany exist.bracket Otherwise
-- assume args are being passed directly in from the debug console
-- or from another Lua module.
local origArgs
if frame == mw.getCurrentFrame() then
local args, pargs origArgs = frame.args, (frame:getParent() or {}).args or {}
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 redirectv ~= '' then
args[k] = v
end
end
local rname, bracket = args[1], args.bracket
if not 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
local rpage, err = mw.title.new(rname)
-- in case we are over the expensive function count limit.
local rpagenoError, errrpage = pcall(mw.title.new(, rname)
-- avoid expensive operation when nothing to do
if not noError or noError and not rpage or not rpage.isRedirect then
err-- = "File not found (mw.title.new failed)", or the page is not a redirect, so use the passed page name.
return mw.ustring.format(bracket, redirectrname)
elseif rpage.id == 0 then
end
err = "File not found (id=0):"
 
elseif not rpage.isRedirect then
local redirect = mw.ustring.match( rpage:getContent() or "", "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*%[%[(.[^%[%]]-)%]%]" )
return mw.ustring.format(bracket, rname) -- not a redirect so use passed page name (for some general-purpose template use)
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('<span styleclass="text-color:red;error">[[Module:redirect]] error: 'could ..not errparse .. 'redirect - [[' .. rname .. '%s]]</span>', rname)
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