Module:Redirect: Difference between revisions
From Roses, Tulips, & Liberty
Content added Content deleted
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: | Line 7: | ||
-- [[{{#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={} |
local p = {} |
||
function p.main(frame) |
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 |
|||
⚫ | |||
for k, v in pairs( frame.args ) do |
|||
origArgs = frame.args |
|||
⚫ | |||
⚫ | |||
⚫ | |||
origArgs = frame |
|||
⚫ | |||
-- Trim whitespace and remove blank arguments. |
|||
local args = {} |
|||
for k, v in pairs( origArgs ) do |
|||
v = mw.text.trim( v ) |
|||
⚫ | |||
args[k] = v |
|||
⚫ | |||
end |
|||
local rname, bracket = args[1], args.bracket |
|||
if |
if type(rname) ~= "string" or not mw.ustring.match(rname, "%S") then return end |
||
bracket = bracket and "[[%s]]" or "%s" |
bracket = bracket and "[[%s]]" or "%s" |
||
rname = mw.ustring.match(rname,"%[%[(.+)%]%]") or rname |
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. |
|||
⚫ | |||
⚫ | |||
-- avoid expensive operation when nothing to do |
|||
if not rpage then |
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. |
|||
⚫ | |||
elseif rpage.id == 0 then |
|||
end |
|||
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) |
|||
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 |
else |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
err = "failed to understand" |
|||
end |
end |
||
⚫ | |||
⚫ | |||
end |
end |
||