-- determine whether we're being called from a sandboxlocalisSandbox=mw.getCurrentFrame():getTitle():find('sandbox',1,true)localsandbox=isSandboxand'/sandbox'or''localgetArgs=require('Module:Arguments').getArgslocalyesno=require('Module:Yesno')localportalModule=require('Module:Portal'..sandbox)localgetImageName=portalModule._imagelocalcheckPortals=portalModule._checkPortalslocalprocessPortalArgs=portalModule._processPortalArgslocalp={}-- Function to format error message and tracking category-- Arguments:-- errMsg: string, or nil/false if no error-- trackingCat: string for tracking category (or empty string)localfunctionformatError(errMsg,trackingCat)localresult=trackingCator''iferrMsgthenlocalerrTag=mw.html.create('span')errTag:addClass("error")errTag:css("font-size",'100%')errTag:wikitext("Error: "..errMsg)result=tostring(errTag)..resultendreturnresultendlocalfunctionimage(portal,args)localsize=args.size=="small"and"21x19px"orargs.size=="tiny"and"17x15px"or"32x28px"returnstring.format('[[File:%s|class=noviewer|%s]]',getImageName(portal,true),size)endlocalfunctionlink(portal,args)localdisplayName=""ifnot(args.text==""orargs.text==nil)thendisplayName=args.textelseifargs.shortthendisplayName=portalelsedisplayName=portal.." portal"endreturnstring.format('[[Portal:%s|%s]]',portal,displayName)endfunctionp._main(portals,args)-- Normalize all argumentsifargs.redlinks=='include'thenargs.redlinks=trueendforkey,defaultinpairs({tracking=true,redlinks=false,short=false})doifargs[key]==nilthenargs[key]=defaultendargs[key]=yesno(args[key],default)endlocaltrackingCat=''localerrMsg=nil-- Check for existing categories, drop if not. -- Possible generate tracking category & error message if neededargs.minPortals=args.minPortalsor1args.maxPortals=args.maxPortalsor1portals,trackingCat,errMsg=checkPortals(portals,args)-- use more specific tracking cat for inline portaltrackingCat=mw.ustring.gsub(trackingCat,"Portal templates","Portal-inline template")-- either too many/few portals, or no portals left after filtering, then returniferrMsgor#portals==0thenreturnformatError(errMsg,trackingCat)endfstring='<span class="nowrap">%s </span>%s%s'ifyesno(args.nowrapor'')thenfstring='<span class="nowrap">%s %s%s</span>'endreturnmw.ustring.format(fstring,image(portals[1],args),link(portals[1],args),(trackingCator''))endfunctionp.main(frame)localorigArgs=getArgs(frame)localportals,args=processPortalArgs(origArgs)returnp._main(portals,args)endreturnp