Module:Random portal component/sandbox
Appearance
From Wikipedia, the free encyclopedia
This module is rated as beta. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected.
This module depends on the following other modules:
This module implements {{random portal component }}. Please see the template page for documentation.
See also
[edit ]The above documentation is transcluded from Module:Random portal component/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
-- This module implements [[Template:Random portal component]] localp={} localmRandom=require('Module:Random') localcurrentTitle=mw.title.getCurrentTitle() -- tracking function added by BHG 29/04/2019 -- called as subPageTrackingCategories(pages, args.max) localfunctionsubPageTrackingCategories(pages,max,header) localretval=""; localthispagetitle=mw.title.getCurrentTitle().text -- don't track DYK etc, only selected/featured articles, biogs etc if((string.find(header,"/[sS]elected")==-1)and(string.find(header,"/[fF]eatured")==-1))then returnretval end -- no tracking unless we are in Portal namespace if(mw.title.getCurrentTitle().nsText~="Portal")then return"" end -- no tracking if this is a subpage if((mw.ustring.match(thispagetitle,"/")~=nil)and(thispagetitle~="AC/DC"))then returnretval end localmaxNum=tonumber(max) localavailableSubPageCount=maxNum -- Check for missing subpages at end of alleged number range whileavailableSubPageCount>0andnotmw.title.new(pages.subpage..'/'..tostring(availableSubPageCount)).existsdo availableSubPageCount=availableSubPageCount-1 end ifavailableSubPageCount<maxNumthen retval=retval.."[[Category:Random portal component with fewer available subpages than specified max]]" else -- Check for spurious subpages beyond end of alleged number range whilemw.title.new(pages.subpage..'/'..tostring(availableSubPageCount+1)).existsdo availableSubPageCount=availableSubPageCount+1 end ifavailableSubPageCount>maxNumthen retval=retval.."[[Category:Random portal component with more available subpages than specified max]]" end end -- before categorising, check what type of subpage we are categorising, and if detected, categorise images separately localsubpageType="subpages"-- generic type localsubpageName=pages.subpage subpageName=mw.ustring.gsub(subpageName,"^[^/]*/","") subpageName=mw.ustring.lower(subpageName) if((mw.ustring.find(subpageName,"picture",1,true)~=nil)or (mw.ustring.find(subpageName,"image",1,true)~=nil)or (mw.ustring.find(subpageName,"panorama",1,true)~=nil))then subpageType="image subpages" end if(availableSubPageCount<2)then retval=retval.."[[Category:Random portal component with less than 2 available "..subpageType.."]]" elseif(availableSubPageCount<=5)then retval=retval.."[[Category:Random portal component with 2–5 available "..subpageType.."]]" elseif(availableSubPageCount<=10)then retval=retval.."[[Category:Random portal component with 6–10 available "..subpageType.."]]" elseif(availableSubPageCount<=15)then retval=retval.."[[Category:Random portal component with 11–15 available "..subpageType.."]]" elseif(availableSubPageCount<=20)then retval=retval.."[[Category:Random portal component with 16–20 available "..subpageType.."]]" elseif(availableSubPageCount<=25)then retval=retval.."[[Category:Random portal component with 21–25 available "..subpageType.."]]" elseif(availableSubPageCount<=30)then retval=retval.."[[Category:Random portal component with 26–30 available "..subpageType.."]]" elseif(availableSubPageCount<=40)then retval=retval.."[[Category:Random portal component with 31–40 available "..subpageType.."]]" elseif(availableSubPageCount<=50)then retval=retval.."[[Category:Random portal component with 41–50 available "..subpageType.."]]" else retval=retval.."[[Category:Random portal component with over 50 available "..subpageType.."]]" end returnretval; end localfunctiongetRandomNumber(max) -- gets a random integer between 1 and max; max defaults to 1 returnmRandom.number{maxor1} end localfunctionexpandArg(args,key) -- Emulate how unspecified template parameters appear in wikitext. If the -- specified argument exists, its value is returned, and if not the argument -- name is returned inside triple curly braces. localval=args[key] ifvalthen returnval else returnstring.format('{{{%s}}}',key) end end localfunctiongetPages(args) localpages={} pages.root=args.rootpageorcurrentTitle.prefixedText pages.subpage=pages.root..'/'..expandArg(args,'subpage') localtries=10 repeat pages.random=pages.subpage..'/'..getRandomNumber(args.max) tries=tries-1 untiltries<1ormw.title.new(pages.random).exists pages.footer='Template:Box-footer' returnpages end localfunctiontryExpandTemplate(frame,title,args) localsuccess,result=pcall(frame.expandTemplate,frame,{title=title,args=args}) ifsuccessthen returnresult else localmsg=string.format( '<strong class="error">The page "[[%s]]" does not exist.</strong>', title ) ifmw.title.getCurrentTitle().namespace==100then-- is in the portal namespace msg=msg..'[[Category:Portals needing attention]]' end returnmsg end end localfunctiongetHeader(frame,pages,header,template) returntryExpandTemplate( frame, templateorpages.root..'/box-header', {header,pages.random} ) end localfunctiongetRandomSubpageContent(frame,pages) returntryExpandTemplate( frame, pages.random ) end localfunctiongetFooter(frame,pages,link) returntryExpandTemplate( frame, pages.footer, {link} ) end functionp._main(args,frame) frame=frameormw.getCurrentFrame() localpages=getPages(args) localret={} ret[#ret+1]=getHeader(frame,pages,args.headeror'subpage',args.headertemplate) ret[#ret+1]=getRandomSubpageContent(frame,pages) ifnotargs.footerornotargs.footer:find('%S')then ret[#ret+1]='<div style="clear:both;"></div></div>' else ret[#ret+1]=getFooter(frame,pages,string.format( '[[%s|%s]]', pages.subpage, expandArg(args,'footer') )) end returntable.concat(ret,'\n')..subPageTrackingCategories(pages,args.max,args.header) end functionp._nominate(args,frame) frame=frameormw.getCurrentFrame() localpages=getPages(args) localret={} ret[#ret+1]=getHeader(frame,pages,expandArg(args,'header'),args.headertemplate) ret[#ret+1]=getRandomSubpageContent(frame,pages) ret[#ret+1]=getFooter(frame,pages,string.format( '[[/Nominate/%s|Suggest]] • [[%s|%s]] ', expandArg(args,'subpage'), pages.subpage, args.footeror'Archive' )) returntable.concat(ret,'\n')..subPageTrackingCategories(pages,args.max,args.header) end localfunctionmakeInvokeFunction(func) returnfunction(frame) localargs=require('Module:Arguments').getArgs(frame,{ trim=false, removeBlanks=false, wrappers={ 'Template:Random portal component', 'Template:Random portal component/BHG-test', 'Template:Random portal component with nominate' } }) returnfunc(args,frame) end end p.main=makeInvokeFunction(p._main) p.nominate=makeInvokeFunction(p._nominate) returnp