Jump to content

Module:Redirect/sandbox

From Wikipedia, the free encyclopedia

-- This module provides functions for getting the target of a redirect page.localp={}-- Gets a mw.title object, using pcall to avoid generating script errors if we-- are over the expensive function count limit (among other possible causes).localfunctiongetTitle(...)localsuccess,titleObj=pcall(mw.title.new,...)ifsuccessthenreturntitleObjelsereturnnilendend-- Gets the name of a page that a redirect leads to, or nil if it isn't a-- redirect.functionp.getTargetFromText(text)localtarget=string.match(text,"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]")orstring.match(text,"^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]")returntargetandmw.uri.decode(target,'PATH')end-- Gets the target of a redirect. If the page specified is not a redirect,-- returns nil.functionp.getTarget(page,fulltext)-- Get the title object. Both page names and title objects are allowed-- as input.localtitleObjiftype(page)=='string'ortype(page)=='number'thentitleObj=getTitle(page)elseiftype(page)=='table'andtype(page.getContent)=='function'thentitleObj=pageelseerror(string.format("bad argument #1 to 'getTarget'".." (string, number, or title object expected, got %s)",type(page)),2)endifnottitleObjthenreturnnilendlocaltargetTitle=titleObj.redirectTargetiftargetTitletheniffulltextthenreturntargetTitle.fullTextelsereturntargetTitle.prefixedTextendelsereturnnilendend--[[-- 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.--]]functionp.luaMain(rname,bracket,fulltext)iftype(rname)~="string"ornotrname:find("%S")thenreturnnilendbracket=bracketand"[[%s]]"or"%s"rname=rname:match("%[%[(.+)%]%]")orrnamelocaltarget=p.getTarget(rname,fulltext)localret=targetorrnameret=getTitle(ret)ifrettheniffulltextthenret=ret.fullTextelseret=ret.prefixedTextendreturnbracket:format(ret)elsereturnnilendend-- Provides access to the luaMain function from wikitext.functionp.main(frame)localargs=require('Module:Arguments').getArgs(frame,{frameOnly=true})returnp.luaMain(args[1],args.bracket,args.fulltext)or''end-- Returns true if the specified page is a redirect, and false otherwise.functionp.luaIsRedirect(page)localtitleObj=getTitle(page)ifnottitleObjthenreturnfalseendreturntitleObj.isRedirectend-- Provides access to the luaIsRedirect function from wikitext, returning 'yes'-- if the specified page is a redirect, and the blank string otherwise.functionp.isRedirect(frame)localargs=require('Module:Arguments').getArgs(frame,{frameOnly=true})ifp.luaIsRedirect(args[1])thenreturn'yes'elsereturn''endendreturnp
close