require('Modulo:No globals')localinfoboxStyle=mw.loadData('Modulo:Estilo ti infobox WPMILHIST')localtemplatestyles='Modulo:Infobox suppiat ti militar/styles.css'localIMC={}IMC.__index=IMCfunctionIMC:renderPerCombatant(builder,headerText,prefix,suffix)prefix=prefixor''suffix=suffixor''localcolspans={}-- This may result in colspans[1] getting set twice, but-- this is no big deal. The second set will be correct.locallastCombatant=1fori=1,self.combatantsdoifself.args[prefix..i..suffix]thencolspans[lastCombatant]=i-lastCombatantlastCombatant=iendendlocaljointText=self.args[prefix..(self.combatants+1)..suffix]ifheaderTextand(colspans[1]orjointText)thenbuilder:tag('tr'):tag('th'):attr('colspan',self.combatants):cssText(infoboxStyle.header_raw):wikitext(headerText)end-- The only time colspans[1] wouldn't be set is if no-- combatant has a field with the given prefix and suffix.ifcolspans[1]then-- Since each found argument set the colspan for the previous-- one, the final one wasn't set above, so set it now.colspans[lastCombatant]=self.combatants-lastCombatant+1builder=builder:tag('tr')fori=1,self.combatantsdo-- At this point, colspans[i] will be set for i=1 unconditionally, and for-- any other value of i where self.args[prefix .. i .. suffix] is set.ifcolspans[i]thenbuilder:tag('td')-- don't bother emitting colspan="1":attr('colspan',colspans[i]~=1andcolspans[i]ornil):css('width',math.floor(100/self.combatants*colspans[i]+0.5)..'%')-- no border on the right of the rightmost column:css('border-right',i~=lastCombatantandinfoboxStyle.internal_borderornil)-- no padding on the left of the leftmost column:css('padding-left',i~=1and'0.25em'ornil)-- don't show the border if we're directly under a header:css('border-top',notheaderTextandinfoboxStyle.internal_borderornil):newline():wikitext(self.args[prefix..i..suffix])endendendifjointTextthenbuilder:tag('tr'):tag('td'):attr('colspan',self.combatants):css('text-align','center')-- don't show the border if we're directly under a header:css('border-top',(notheaderTextorcolspans[1])andinfoboxStyle.internal_borderornil):newline():wikitext(jointText)endendfunctionIMC:renderHeaderTable(builder)builder=builder:tag('table'):css('width','100%'):css('margin',0):css('padding',0):css('border',0)ifself.args.datethenbuilder:tag('tr'):tag('th'):css('padding-right','1em'):wikitext('Date'):done():tag('td'):wikitext(self.args.date)endbuilder=builder:tag('tr'):tag('th'):css('padding-right','1em'):wikitext('Lokasion'):done():tag('td'):tag('div'):addClass('location'):wikitext(self.args.placeor'{&#123;{place}&#125;}')-- hack so that people who don't know Lua know that this parameter is required:done()ifself.args.coordinatesthenbuilder:wikitext('<br />'..self.args.coordinates)endbuilder=builder:done():done()-- only for "Putsch"ifself.args.actionthenbuilder:tag('tr'):tag('th'):css('padding-right','1em'):wikitext(self.args.actionand'Aksion'):done():tag('td'):wikitext(self.args.action)endifself.args.statusorself.args.resultthenbuilder:tag('tr'):tag('th'):css('padding-right','1em'):wikitext(self.args.statusand'Kasasaad'or'Resulta'):done():tag('td'):newline():wikitext(self.args.statusorself.args.result)endifself.args.territorythenbuilder:tag('tr'):tag('th'):css('padding-right','1em'):wikitext('Panagbalbaliw<br />ti teritorio'):done():tag('td'):newline():wikitext(self.args.territory)endendfunctionIMC:render()localbuilder=mw.html.create()ifself.args.campaignboxthen-- this should be the same as using {{stack|clear=right|...}}builder=builder:tag('div'):addClass('mw-stack desktop-float-right'):tag('div'):css('overflow','hidden'):css('margin','1px')endbuilder=builder:tag('table'):addClass('infobox vevent'):cssText(infoboxStyle.main_box_raw):css('width',self.args.widthornil)builder:tag('tr'):tag('th'):addClass('summary'):attr('colspan',self.combatants):cssText(infoboxStyle.header_raw):wikitext(self.args.conflictormw.title.getCurrentTitle().text)ifself.args.partofthenbuilder:tag('tr'):tag('td'):attr('colspan',self.combatants):cssText(infoboxStyle.sub_header_raw):wikitext('Paset iti '..self.args.partof)endifself.args.imagethenbuilder:tag('tr'):tag('td'):attr('colspan',self.combatants):cssText(infoboxStyle.image_box_raw):wikitext(string.format('%s%s%s',require('Modulo:InfoboxImage').InfoboxImage{args={image=self.args.image,size=self.args.image_size,sizedefault='frameless',upright=1,alt=self.args.alt}},self.args.captionand'<br />'or'',self.args.captionor''))endself:renderHeaderTable(builder:tag('tr'):tag('td'):attr('colspan',self.combatants))self:renderPerCombatant(builder,self.args.combatants_headeror'Dagiti makigubgubat','combatant')-- can be un-hardcoded once gerrit:165108 is mergedfor_,vinipairs{'a','b','c','d'}doself:renderPerCombatant(builder,nil,'combatant',v)endself:renderPerCombatant(builder,'Dagiti agbilbilin ken daulo','commander')self:renderPerCombatant(builder,'Dagiti yunit a nairaman','units')self:renderPerCombatant(builder,'Kapigsa','strength')self:renderPerCombatant(builder,'Suporta a politika','polstrength')self:renderPerCombatant(builder,'Suporta a militar','milstrength')self:renderPerCombatant(builder,'Dagiti nadangran ken natnatay','casualties')ifself.args.notesthenbuilder:tag('tr'):tag('td'):attr('colspan',self.combatants):css('border-top',infoboxStyle.section_border):newline():wikitext(self.args.notes)endifself.args.map_typethenbuilder:tag('tr'):tag('td'):attr('colspan',self.combatants):css('border-top',infoboxStyle.internal_border):node(require('Modulo:Mapa ti lokasion').main(self.frame,{self.args.map_type,relief=self.args.map_relief,coordinates=self.args.coordinates,width=self.args.map_sizeor220,float='center',border='none',mark=self.args.map_mark,marksize=self.args.map_marksizeor8,label=self.args.map_label,alt=self.args.map_alt,caption=self.args.map_captionor('Lokasion iti kaunegan ti '..(require('Modulo:Mapa ti lokasion').data(self.frame,{self.args.map_type,'name'})))}))endbuilder=builder:done()ifself.args.campaignboxthenbuilder=builder:done():tag('div'):css('overflow','hidden'):css('margin','1px'):wikitext(self.args.campaignbox):done():done()endreturnbuilderendfunctionIMC.new(frame,args)ifnotargsthenargs=require('Modulo:Dagiti argumento').getArgs(frame,{wrappers='Plantilia:Infobox suppiat ti militar'})endlocalobj={frame=frame,args=args}-- until gerrit:165108 is merged, there's still a cap on combatants, but as soon as it merges, we can update this little bit of code to uncap it-- also, don't try to make this more efficient, or references could be in the wrong orderobj.combatants=2for_,vinipairs{'','a','b','c','d'}dofori=1,5doifargs['combatant'..i..v]thenobj.combatants=math.max(obj.combatants,i)endendendreturnsetmetatable(obj,IMC)endlocalp={}functionp.main(frame)returnframe:extensionTag{name='templatestyles',args={src=templatestyles}}..tostring(IMC.new(frame):render())endreturnp