Jump to content
Wikipedia The Free Encyclopedia

Module:Random portal component/sandbox

From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
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 ]
Portal templates
Layout and formatting
Content transclusion
Content slideshows
Content randomisation
General
Linking templates
Talk pages / Maintenance
Images
Modules
Usage
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.
 -- 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

AltStyle によって変換されたページ (->オリジナル) /