Editing Module:Redirect
From Test Wiki
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 12: | Line 12: | ||
return nil | return nil | ||
end | end | ||
end | end | ||
Line 31: | Line 17: | ||
-- redirect. | -- redirect. | ||
function p.getTargetFromText(text) | function p.getTargetFromText(text) | ||
local | local target = string.match( | ||
text, | text, | ||
"^%s*# | "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]" | ||
) or string.match( | ) or string.match( | ||
text, | text, | ||
"^%s*# | "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]" | ||
) | ) | ||
return | return target and mw.uri.decode(target, 'PATH') | ||
end | end | ||
-- Gets the target of a redirect. If the page specified is not a redirect, | -- Gets the target of a redirect. If the page specified is not a redirect, | ||
-- returns nil. | -- returns nil. | ||
function p.getTarget(page) | function p.getTarget(page, fulltext) | ||
-- Get the title object. Both page names and title objects are allowed | -- Get the title object. Both page names and title objects are allowed | ||
-- as input. | -- as input. | ||
Line 66: | Line 44: | ||
), 2) | ), 2) | ||
end | end | ||
if not titleObj | if not titleObj then | ||
return nil | return nil | ||
end | end | ||
local targetTitle = titleObj.redirectTarget | |||
if targetTitle then | |||
local | if fulltext then | ||
if | return targetTitle.fullText | ||
else | |||
return targetTitle.prefixedText | return targetTitle.prefixedText | ||
end | end | ||
else | else | ||
return nil | |||
end | end | ||
end | end | ||
Line 93: | Line 63: | ||
-- target page name, or the passed page name when not a redirect. The passed | -- 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. | -- 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 | -- 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 | -- page link. Returns an error message when page does not exist or the redirect | ||
-- target cannot be determined for some reason. | -- target cannot be determined for some reason. | ||
--]] | --]] | ||
function p.luaMain(rname, bracket) | function p.luaMain(rname, bracket, fulltext) | ||
if type(rname) ~= "string" or not rname:find("%S") then | if type(rname) ~= "string" or not rname:find("%S") then | ||
return nil | return nil | ||
Line 104: | Line 74: | ||
bracket = bracket and "[[%s]]" or "%s" | bracket = bracket and "[[%s]]" or "%s" | ||
rname = rname:match("%[%[(.+)%]%]") or rname | rname = rname:match("%[%[(.+)%]%]") or rname | ||
local target = p.getTarget(rname) | local target = p.getTarget(rname, fulltext) | ||
local ret = target or rname | local ret = target or rname | ||
ret = getTitle(ret) | ret = getTitle(ret) | ||
if ret then | if ret then | ||
ret = ret.prefixedText | if fulltext then | ||
ret = ret.fullText | |||
else | |||
ret = ret.prefixedText | |||
end | |||
return bracket:format(ret) | return bracket:format(ret) | ||
else | else | ||
Line 118: | Line 92: | ||
function p.main(frame) | function p.main(frame) | ||
local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) | local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) | ||
return p.luaMain(args[1], args.bracket) or '' | return p.luaMain(args[1], args.bracket, args.fulltext) or '' | ||
end | end | ||