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.
-------------------------------------------------------------------------------- -- Labelled list -- -- -- -- This module does the core work of creating a hatnote composed of a list -- -- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", -- -- for {{see also}} and similar templates. -- -------------------------------------------------------------------------------- localmHatnote=require('Module:Hatnote') localmHatlist=require('Module:Hatnote list') localmArguments--initialize lazily localyesno--initialize lazily localp={} -- Defaults global to this module localdefaults={ label='Lihat pula',--Final fallback for label argument labelForm='%s: %s', prefixes={'label','label ','l'}, template='Modul:Labelled list hatnote' } -- Localizable message strings localmsg={ errorSuffix='#Galat', noInputWarning='tidak ada nama halaman yang ditentukan', noOutputWarning= "'''[[%s]] — tidak ada keluaran: halaman target tidak ditemukan.'''" } -- Helper function that pre-combines display parameters into page arguments. -- Also compresses sparse arrays, as a desirable side-effect. functionp.preprocessDisplays(args,prefixes) -- Prefixes specify which parameters, in order, to check for display options -- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1' prefixes=prefixesordefaults.prefixes localindices={} localsparsePages={} fork,vinpairs(args)do iftype(k)=='number'then indices[#indices+1]=k localdisplay fori=1,#prefixesdo display=args[prefixes[i]..k] ifdisplaythenbreakend end sparsePages[k]=displayand string.format('%s|%s',string.gsub(v,'|.*$',''),display)orv end end table.sort(indices) localpages={} fork,vinipairs(indices)dopages[#pages+1]=sparsePages[v]end returnpages end --Helper function to get a page target from a processed page string --e.g. "Page|Label" → "Page" or "Target" → "Target" localfunctiongetTarget(pagename) localpipe=string.find(pagename,'|') returnstring.sub(pagename,0,pipeandpipe-1ornil) end -- Produces a labelled pages-list hatnote. -- The main frame (template definition) takes 1 or 2 arguments, for a singular -- and (optionally) plural label respectively: -- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}} -- The resulting template takes pagename & label parameters normally. functionp.labelledList(frame) mArguments=require('Module:Arguments') yesno=require('Module:Yesno') locallabels={frame.args[1]ordefaults.label} labels[2]=frame.args[2]orlabels[1] labels[3]=frame.args[3]--no defaulting labels[4]=frame.args[4]--no defaulting localtemplate=frame:getParent():getTitle() localargs=mArguments.getArgs(frame,{parentOnly=true}) localpages=p.preprocessDisplays(args) localoptions={ category=yesno(args.category), extraclasses=frame.args.extraclasses, ifexists=yesno(frame.args.ifexists), namespace=frame.args.namespaceorargs.namespace, selfref=yesno(frame.args.selfreforargs.selfref), template=template } returnp._labelledList(pages,labels,options) end localfunctionexists(title) localsuccess,result=pcall(function()returntitle.existsend) ifsuccessthen returnresult else returntrue end end functionp._labelledList(pages,labels,options) localremovednonexist=false ifoptions.ifexiststhen fork=#pages,1,-1do--iterate backwards to allow smooth removals localv=pages[k] ifmw.ustring.sub(mw.text.trim(v),1,1)~="#"then localtitle=mw.title.new(getTarget(v),namespace) if(v=='')or(title==nil)ornotexists(title)then table.remove(pages,k) removednonexist=true end end end end labels=labelsor{} label=(#pages==1andlabels[1]orlabels[2])ordefaults.label fork,vinpairs(pages)do ifmHatnote.findNamespaceId(v)~=0then label= ( #pages==1and (labels[3]orlabels[1]ordefaults.label)or (labels[4]orlabels[2]ordefaults.label) )ordefaults.label end end if#pages==0then ifremovednonexistthen mw.addWarning( string.format( msg.noOutputWarning,options.templateordefaults.template ) ) return'' else returnmHatnote.makeWikitextError( msg.noInputWarning, (options.templateordefaults.template)..msg.errorSuffix, options.category ) end end localtext=string.format( options.labelFormordefaults.labelForm, label, mHatlist.andList(pages,true) ) localhnOptions={ extraclasses=options.extraclasses, selfref=options.selfref } returnmHatnote._hatnote(text,hnOptions) end returnp