Jump to content

Module:Redirect: Difference between revisions

From escforumwiki
en>Darklama
rm extra space
en>Darklama
consistent parsing of passed page name, output when passed bracket, and interpretation of redirect
Line 9: Line 9:


function p.main(frame)
function p.main(frame)
  args=frame.args
    local args, pargs = frame.args, (frame:getParent() or {}).args or {}
  parent=frame.getParent(frame)
    local rname, bracket = args[1] or pargs[1], args.bracket or pargs.bracket
  if parent then pargs = parent.args else pargs={} end
   
  local rname=args[1] or pargs[1] or ""
    if not rname or not mw.ustring.match(rname, "%S") then return "" end
  local bracket=args.bracket or pargs.bracket
    bracket = bracket and "[[%s]]" or "%s"
  local bb = "";local be= "" -- store brackets if restoring to an output if bracket option is set
    rname = mw.ustring.match(rname,"%[%[(.+)%]%]") or rname
  if rname then
   
      if mw.ustring.gsub(rname,"%s","") == "" then return "" end
    local rpage, err = mw.title.new(rname)
      if bracket then
   
          local strip=mw.ustring.match(rname,"%[%[(.+)%]%]")
    -- avoid expensive operation when nothing to do
          if strip then rname=strip;bb="[[";be="]]" end
    if not rpage then
      end
        err = "File not found (mw.title.new failed)"
      else return ""
    elseif rpage.id == 0 then
  end
        err = "File not found (id=0):"
  local rpage=mw.title.new(rname)
    elseif not rpage.isRedirect then
  local err=""
        return mw.ustring.format(bracket, rname) -- not a redirect so use passed page name (for some general-purpose template use)
  if rpage then -- avoid possibly expensive FileExists if we don't have anything
    else
      if rpage.id ~= 0 then
        local redirect = mw.ustring.match( rpage:getContent() or "", "^#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*%[%[(.-)%]%]" )
      --  if rpage.fileExists then
       
            if rpage.isRedirect then
        if redirect then
              return (bb.. tostring(mw.ustring.match(tostring(rpage.getContent(rpage)),"[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt].-%[%[(.-)%]%]")..be) or [=[<span style="text-color:red;">[[Module:redirect]] error: failed to understand - [[]=] .. rname .. [=[]]</span]=])
             return mw.ustring.format(bracket, redirect)
             else return rname -- not a redirect so leave the original text (for some general-purpose template use)
        end
            end
       
      --  else err="File does not exist: "
        err = "failed to understand"
      --  end
    end
      else err="File not found (id=0):"
   
      end
    return '<span style="text-color:red;">[[Module:redirect]] error: ' .. err .. ' - [[' .. rname .. ']]</span>'
  else err="File not found (mw.title.new failed)"
  end
  return [=[<span style="text-color:red;">[[Module:redirect]] error: ]=] .. err .. [=[ - [[]=] .. rname .. [=[]]</span>]=]
end
end


return p
return p

Revision as of 22:00, 31 March 2013

This module contains functions to find the target of a redirect page.

Main

The main function accepts the name of a single page. It determines if the page is a redirect; if so it looks up the page, extracts the target, and returns the target name as text. Its usage is {{#invoke:redirect|main|redirect-page-name}}.

The template normally neither takes nor gives square brackets, so to show the result as a link use [[{{#invoke:redirect|main|redirect-page-name}}]]. An error is produced if the redirect does not exist, but for versatility no error is given if the file is not a redirect (returns the original text) or if the file name is blank (returns blank).

However, if the parameter bracket is given a nonblank value, brackets will be passed on if present.

Examples

Note: WP:AFC and WP:AFD are both redirects, but Wikipedia:Articles for deletion is not.

LuaMain

If you want to use the main function from another Lua module, you may want to use the luaMain function. This provides the same functionality as the main function, but doesn't require that a frame object be available.

To use this, first load the module.

local mRedirect = require('Module:Redirect')

Then use the function with the following syntax:

mRedirect.luaMain(rname, bracket)

rname is the name of the redirect page, and if bracket is anything but false or nil, the module will produce a link rather than just a page name.

IsRedirect

The isRedirect function is used from wiki pages to find out if a given page is a redirect or not. If the page is a redirect, the function returns "yes", and if not the output is blank. Its usage is {{#invoke:redirect|isRedirect|redirect-page-name}}.

Examples

  • {{#invoke:redirect|isRedirect|WP:AFC}}Script error: The function "isRedirect" does not exist.
  • {{#invoke:redirect|isRedirect|Wikipedia:Articles for deletion}}Script error: The function "isRedirect" does not exist.

LuaIsRedirect

The isRedirect can be accessed from other Lua modules in the same way as the main function:

local mRedirect = require('Module:Redirect')
mRedirect.luaIsRedirect(rname)

GetTarget

The getTarget function fetches the target page name of a redirect page, and is only usable from Lua. If the page specified is a redirect, then the target is returned; otherwise the function returns nil.

To use it, first load the module.

local mRedirect = require('Module:Redirect')

Then use the function with the following syntax:

mRedirect.getTarget(page)

page can be either the name of the redirect page as a string, or a mw.title object.

See also


 ---- This module accepts the name of a single page.  It determines if the page is a redirect; if so it looks up the page,
 ---- extracts the target, and returns the target name as text. Its usage is {{#invoke:redirect|main|redirect-page-name}}.
 ---- The template neither takes nor gives square brackets, so to show the result as a link use
 ---- [[{{#invoke:redirect|main|redirect-page-name}}]].  An error is produced if the redirect does not exist,
 ---- but for versatility no error is given if the file is not a redirect (returns the original text)
 ---- or if the file name is blank (returns blank).

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
MediaWiki spam blocked by CleanTalk.