Anda dapat membuat halaman dokumentasi untuk buat pada modul Scribunto ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
-- 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,"/[tT]erpilih")==-1)and(string.find(header,"/[pP]ilihan")==-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.."[[Kategori:Komponen portal acak dengan subhalaman yang tersedia lebih sedikit dari maks yang ditentukan]]" 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.."[[Kategori:Komponen portal acak dengan lebih banyak subhalaman yang tersedia daripada jumlah maksimal]]" end end -- before categorising, check what type of subpage we are categorising, and if detected, categorise images separately localsubpageType="subhalaman"-- generic type localsubpageName=pages.subpage subpageName=mw.ustring.gsub(subpageName,"^[^/]*/","") subpageName=mw.ustring.lower(subpageName) if((mw.ustring.find(subpageName,"foto",1,true)~=nil)or (mw.ustring.find(subpageName,"gambar",1,true)~=nil)or (mw.ustring.find(subpageName,"panorama",1,true)~=nil))then subpageType="subhalaman gambar" end if(availableSubPageCount<2)then retval=retval.."[[Kategori:Komponen portal acak dengan kurang dari 2 "..subpageType.." tersedia]]" elseif(availableSubPageCount<=5)then retval=retval.."[[Kategori:Komponen portal acak dengan 2–5 "..subpageType.." tersedia]]" elseif(availableSubPageCount<=10)then retval=retval.."[[Kategori:Komponen portal acak dengan 6–10 "..subpageType.." tersedia]]" elseif(availableSubPageCount<=15)then retval=retval.."[[Kategori:Komponen portal acak dengan 11–15 "..subpageType.." tersedia]]" elseif(availableSubPageCount<=20)then retval=retval.."[[Kategori:Komponen portal acak dengan 16-20 "..subpageType.." tersedia]]" elseif(availableSubPageCount<=25)then retval=retval.."[[Kategori:Komponen portal acak dengan 21-25 "..subpageType.." tersedia]]" elseif(availableSubPageCount<=30)then retval=retval.."[[Kategori:Komponen portal acak dengan 26–30 "..subpageType.." tersedia]]" elseif(availableSubPageCount<=40)then retval=retval.."[[Kategori:Komponen portal acak dengan 31–40 "..subpageType.." tersedia]]" elseif(availableSubPageCount<=50)then retval=retval.."[[Kategori:Komponen portal acak dengan 41–50 "..subpageType.." tersedia]]" else retval=retval.."[[Kategori:Komponen portal acak dengan lebih dari 50 "..subpageType.." tersedia]]" 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..'[[Kategori:Portal yang membutuhkan perhatian]]' 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( '[[/Nominasikan/%s|Usulkan]] • [[%s|%s]] ', expandArg(args,'subpage'), pages.subpage, args.footeror'Arsip' )) 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