<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://maruneko.autumns.page/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_military_conflict</id>
	<title>Module:Infobox military conflict - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://maruneko.autumns.page/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_military_conflict"/>
	<link rel="alternate" type="text/html" href="https://maruneko.autumns.page/mediawiki/index.php?title=Module:Infobox_military_conflict&amp;action=history"/>
	<updated>2026-04-24T15:31:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://maruneko.autumns.page/mediawiki/index.php?title=Module:Infobox_military_conflict&amp;diff=410&amp;oldid=prev</id>
		<title>imported&gt;Autumn: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://maruneko.autumns.page/mediawiki/index.php?title=Module:Infobox_military_conflict&amp;diff=410&amp;oldid=prev"/>
		<updated>2021-03-09T22:23:34Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:23, 9 March 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;Autumn</name></author>
	</entry>
	<entry>
		<id>https://maruneko.autumns.page/mediawiki/index.php?title=Module:Infobox_military_conflict&amp;diff=409&amp;oldid=prev</id>
		<title>Wikipedia&gt;Frietjes: expand stack templates instead of using expanded versions to avoid missing updates to stack templates</title>
		<link rel="alternate" type="text/html" href="https://maruneko.autumns.page/mediawiki/index.php?title=Module:Infobox_military_conflict&amp;diff=409&amp;oldid=prev"/>
		<updated>2020-12-04T17:00:11Z</updated>

		<summary type="html">&lt;p&gt;expand stack templates instead of using expanded versions to avoid missing updates to stack templates&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require('Module:No globals')&lt;br /&gt;
&lt;br /&gt;
local infoboxStyle = mw.loadData('Module:WPMILHIST Infobox style')&lt;br /&gt;
local templatestyles = 'Module:Infobox military conflict/styles.css'&lt;br /&gt;
&lt;br /&gt;
local IMC = {}&lt;br /&gt;
IMC.__index = IMC&lt;br /&gt;
&lt;br /&gt;
function IMC:renderPerCombatant(builder, headerText, prefix, suffix)&lt;br /&gt;
	prefix = prefix or ''&lt;br /&gt;
	suffix = suffix or ''&lt;br /&gt;
	local colspans = {}&lt;br /&gt;
	&lt;br /&gt;
	-- This may result in colspans[1] getting set twice, but&lt;br /&gt;
	-- this is no big deal. The second set will be correct.&lt;br /&gt;
	local lastCombatant = 1&lt;br /&gt;
	&lt;br /&gt;
	for i = 1,self.combatants do&lt;br /&gt;
		if self.args[prefix .. i .. suffix] then&lt;br /&gt;
			colspans[lastCombatant] = i - lastCombatant&lt;br /&gt;
			lastCombatant = i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local jointText = self.args[prefix .. (self.combatants + 1) .. suffix]&lt;br /&gt;
	&lt;br /&gt;
	if headerText and (colspans[1] or jointText) then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:attr('colspan', self.combatants)&lt;br /&gt;
				:cssText(infoboxStyle.header_raw)&lt;br /&gt;
				:wikitext(headerText)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- The only time colspans[1] wouldn't be set is if no&lt;br /&gt;
	-- combatant has a field with the given prefix and suffix.&lt;br /&gt;
	if colspans[1] then&lt;br /&gt;
		-- Since each found argument set the colspan for the previous&lt;br /&gt;
		-- one, the final one wasn't set above, so set it now.&lt;br /&gt;
		colspans[lastCombatant] = self.combatants - lastCombatant + 1&lt;br /&gt;
		builder = builder:tag('tr')&lt;br /&gt;
		for i = 1,self.combatants do&lt;br /&gt;
			-- At this point, colspans[i] will be set for i=1 unconditionally, and for&lt;br /&gt;
			-- any other value of i where self.args[prefix .. i .. suffix] is set.&lt;br /&gt;
			if colspans[i] then&lt;br /&gt;
				builder:tag('td')&lt;br /&gt;
					-- don't bother emitting colspan=&amp;quot;1&amp;quot;&lt;br /&gt;
					:attr('colspan', colspans[i] ~= 1 and colspans[i] or nil)&lt;br /&gt;
					:css('width', math.floor(100 / self.combatants * colspans[i] + 0.5) .. '%')&lt;br /&gt;
					-- no border on the right of the rightmost column&lt;br /&gt;
					:css('border-right', i ~= lastCombatant and infoboxStyle.internal_border or nil)&lt;br /&gt;
					-- no padding on the left of the leftmost column&lt;br /&gt;
					:css('padding-left', i ~= 1 and '0.25em' or nil)&lt;br /&gt;
					-- don't show the border if we're directly under a header&lt;br /&gt;
					:css('border-top', not headerText and infoboxStyle.internal_border or nil)&lt;br /&gt;
					:newline()&lt;br /&gt;
					:wikitext(self.args[prefix .. i .. suffix])&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if jointText then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', self.combatants)&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				-- don't show the border if we're directly under a header&lt;br /&gt;
				:css('border-top', (not headerText or colspans[1]) and infoboxStyle.internal_border or nil)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(jointText)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IMC:renderHeaderTable(builder)&lt;br /&gt;
	builder = builder:tag('table')&lt;br /&gt;
		:css('width', '100%')&lt;br /&gt;
		:css('margin', 0)&lt;br /&gt;
		:css('padding', 0)&lt;br /&gt;
		:css('border', 0)&lt;br /&gt;
&lt;br /&gt;
	if self.args.date then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:css('padding-right', '1em')&lt;br /&gt;
				:wikitext('Date')&lt;br /&gt;
			:done()&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:wikitext(self.args.date)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	builder = builder:tag('tr')&lt;br /&gt;
		:tag('th')&lt;br /&gt;
			:css('padding-right', '1em')&lt;br /&gt;
			:wikitext('Location')&lt;br /&gt;
		:done()&lt;br /&gt;
		:tag('td')&lt;br /&gt;
			:tag('div')&lt;br /&gt;
				:addClass('location')&lt;br /&gt;
				:wikitext(self.args.place or '{&amp;amp;#123;{place}&amp;amp;#125;}') -- hack so that people who don't know Lua know that this parameter is required&lt;br /&gt;
			:done()&lt;br /&gt;
	if self.args.coordinates then&lt;br /&gt;
		builder:wikitext(self.args.coordinates)&lt;br /&gt;
	end&lt;br /&gt;
	builder = builder:done():done()&lt;br /&gt;
&lt;br /&gt;
	-- only for &amp;quot;Putsch&amp;quot;&lt;br /&gt;
    if self.args.action then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:css('padding-right', '1em')&lt;br /&gt;
				:wikitext(self.args.action and 'Action')&lt;br /&gt;
			:done()&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:wikitext(self.args.action)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if self.args.status or self.args.result then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:css('padding-right', '1em')&lt;br /&gt;
				:wikitext(self.args.status and 'Status' or 'Result')&lt;br /&gt;
			:done()&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:addClass('status')&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(self.args.status or self.args.result)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if self.args.territory then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('th')&lt;br /&gt;
				:css('padding-right', '1em')&lt;br /&gt;
				:wikitext('Territorial&amp;lt;br /&amp;gt;changes')&lt;br /&gt;
			:done()&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(self.args.territory)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IMC:render()&lt;br /&gt;
	local builder = mw.html.create()&lt;br /&gt;
	if self.args.campaignbox then&lt;br /&gt;
		-- this should be the same as using {{stack|clear=right|...}}&lt;br /&gt;
		builder:wikitext(self.frame:expandTemplate{ title = 'stack begin', args = { clear='true'} })&lt;br /&gt;
	end&lt;br /&gt;
	builder = builder:tag('table')&lt;br /&gt;
		:addClass('infobox vevent')&lt;br /&gt;
		:cssText(infoboxStyle.main_box_raw)&lt;br /&gt;
		:css('width', self.args.width or nil)&lt;br /&gt;
&lt;br /&gt;
	builder:tag('tr')&lt;br /&gt;
		:tag('th')&lt;br /&gt;
			:addClass('summary')&lt;br /&gt;
			:attr('colspan', self.combatants)&lt;br /&gt;
			:cssText(infoboxStyle.header_raw)&lt;br /&gt;
			:wikitext(self.args.conflict or mw.title.getCurrentTitle().text)&lt;br /&gt;
	if self.args.partof then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', self.combatants)&lt;br /&gt;
				:cssText(infoboxStyle.sub_header_raw)&lt;br /&gt;
				:wikitext('Part of ' .. self.args.partof)&lt;br /&gt;
	end&lt;br /&gt;
	if self.args.image then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', self.combatants)&lt;br /&gt;
				:cssText(infoboxStyle.image_box_raw)&lt;br /&gt;
				:wikitext(string.format('%s%s%s',&lt;br /&gt;
					require('Module:InfoboxImage').InfoboxImage{args = {&lt;br /&gt;
						image = self.args.image,&lt;br /&gt;
						size = self.args.image_size,&lt;br /&gt;
						sizedefault = 'frameless',&lt;br /&gt;
						upright = 1,&lt;br /&gt;
						alt = self.args.alt&lt;br /&gt;
					}},&lt;br /&gt;
					self.args.caption and '&amp;lt;br /&amp;gt;' or '',&lt;br /&gt;
					self.args.caption or ''&lt;br /&gt;
				))&lt;br /&gt;
	end&lt;br /&gt;
	self:renderHeaderTable(builder:tag('tr'):tag('td'):attr('colspan', self.combatants))&lt;br /&gt;
	self:renderPerCombatant(builder, self.args.combatants_header or 'Belligerents', 'combatant')&lt;br /&gt;
	-- can be un-hardcoded once gerrit:165108 is merged&lt;br /&gt;
	for _,v in ipairs{'a','b','c','d'} do&lt;br /&gt;
		self:renderPerCombatant(builder, nil, 'combatant', v)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	self:renderPerCombatant(builder, 'Commanders and leaders', 'commander')&lt;br /&gt;
	for _,v in ipairs{'a','b','c','d'} do&lt;br /&gt;
		self:renderPerCombatant(builder, nil, 'commander', v)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	self:renderPerCombatant(builder, 'Units involved', 'units')&lt;br /&gt;
	self:renderPerCombatant(builder, 'Strength', 'strength')&lt;br /&gt;
	self:renderPerCombatant(builder, 'Political support', 'polstrength')&lt;br /&gt;
	self:renderPerCombatant(builder, 'Military support', 'milstrength')&lt;br /&gt;
	self:renderPerCombatant(builder, 'Casualties and losses', 'casualties')&lt;br /&gt;
&lt;br /&gt;
	if self.args.notes then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', self.combatants)&lt;br /&gt;
				:css('border-top', infoboxStyle.section_border)&lt;br /&gt;
				:newline()&lt;br /&gt;
				:wikitext(self.args.notes)&lt;br /&gt;
	end&lt;br /&gt;
	if self.args.map_type then&lt;br /&gt;
		builder:tag('tr')&lt;br /&gt;
			:tag('td')&lt;br /&gt;
				:attr('colspan', self.combatants)&lt;br /&gt;
				:css('border-top', infoboxStyle.internal_border)&lt;br /&gt;
				:node(require('Module:Location map').main(self.frame, {&lt;br /&gt;
					self.args.map_type,&lt;br /&gt;
					relief = self.args.map_relief,&lt;br /&gt;
					coordinates = self.args.coordinates,&lt;br /&gt;
					width = self.args.map_size or 220,&lt;br /&gt;
					float = 'center',&lt;br /&gt;
					border = 'none',&lt;br /&gt;
					mark = self.args.map_mark,&lt;br /&gt;
					marksize = self.args.map_marksize or 8,&lt;br /&gt;
					label = self.args.map_label,&lt;br /&gt;
					alt = self.args.map_alt,&lt;br /&gt;
					caption = self.args.map_caption or ('Location within ' &lt;br /&gt;
						.. (require('Module:Location map').data(self.frame, {self.args.map_type, 'name'})))&lt;br /&gt;
				}))&lt;br /&gt;
	end&lt;br /&gt;
	builder = builder:done()&lt;br /&gt;
	if self.args.campaignbox then&lt;br /&gt;
		builder = builder:done()&lt;br /&gt;
		builder:wikitext(self.args.campaignbox .. self.frame:expandTemplate{ title = 'stack end'})&lt;br /&gt;
	end&lt;br /&gt;
	return builder&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function IMC.new(frame, args)&lt;br /&gt;
	if not args then&lt;br /&gt;
		args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Infobox military conflict'})&lt;br /&gt;
	end&lt;br /&gt;
	local obj = {&lt;br /&gt;
		frame = frame,&lt;br /&gt;
		args = args&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	-- 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&lt;br /&gt;
	-- also, don't try to make this more efficient, or references could be in the wrong order&lt;br /&gt;
	obj.combatants = 2&lt;br /&gt;
	for _,v in ipairs{'', 'a', 'b', 'c', 'd'} do&lt;br /&gt;
		for i = 1,5 do&lt;br /&gt;
			if args['combatant' .. i .. v] then&lt;br /&gt;
				obj.combatants = math.max(obj.combatants, i)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return setmetatable(obj, IMC)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(IMC.new(frame):render())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Wikipedia&gt;Frietjes</name></author>
	</entry>
</feed>