| مسابقه دانشدخت | |
| اسلامیکال از تاریخ ۱۵ دی تا ۲۰ بهمن، میزبان یک همایه با موضوع زنان است. شما میتوانید در مسابقه مقالهنویسی دانشدخت، شرکت کنید و با نگارش مقاله، از جوایز آن بهرهمند باشید. اگر به موضوعات مربوط با زنان علاقهمندید، این فرصت را از دست ندهید. فهرستی از مقالات پیشنهادی جهت ایجاد یا ویرایش در اینجا وجود دارد. |
پودمان:Infobox military conflict
توضیحات این پودمان میتواند در پودمان:Infobox military conflict/توضیحات قرار گیرد.
require('Module:No globals')
local infoboxStyle = mw.loadData('Module:WPMILHIST Infobox style')
local templatestyles = 'Module:Infobox military conflict/styles.css'
local IMC = {}
IMC.__index = IMC
function IMC:renderPerCombatant(builder, headerText, prefix, suffix)
prefix = prefix or ''
suffix = suffix or ''
local colspans = {}
-- This may result in colspans[1] getting set twice, but
-- this is no big deal. The second set will be correct.
local lastCombatant = 1
for i = 1,self.combatants do
if self.args[prefix .. i .. suffix] then
colspans[lastCombatant] = i - lastCombatant
lastCombatant = i
end
end
local jointText = self.args[prefix .. (self.combatants + 1) .. suffix]
if headerText and (colspans[1] or jointText) then
builder: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.
if colspans[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 + 1
builder = builder:tag('tr')
for i = 1,self.combatants do
-- 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.
if colspans[i] then
builder:tag('td')
-- don't bother emitting colspan="1"
:attr('colspan', colspans[i] ~= 1 and colspans[i] or nil)
:css('width', math.floor(100 / self.combatants * colspans[i] + 0.5) .. '%')
-- no border on the right of the rightmost column
:css('border-left', i ~= lastCombatant and infoboxStyle.internal_border or nil)
-- no padding on the left of the leftmost column
:css('padding-right', i ~= 1 and '0.25em' or nil)
-- don't show the border if we're directly under a header
:css('border-top', not headerText and infoboxStyle.internal_border or nil)
:newline()
:wikitext(self.args[prefix .. i .. suffix])
end
end
end
if jointText then
builder: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', (not headerText or colspans[1]) and infoboxStyle.internal_border or nil)
:newline()
:wikitext(jointText)
end
end
function IMC:renderHeaderTable(builder)
builder = builder:tag('table')
:css('width', '100%')
:css('margin', 0)
:css('padding', 0)
:css('border', 0)
:css('display', 'inline-table')
if self.args.date then
builder:tag('tr')
:tag('th')
:css('padding-left', '1em')
:wikitext('تاریخ')
:done()
:tag('td')
:wikitext(self.args.date)
end
builder = builder:tag('tr')
:tag('th')
:css('padding-left', '1em')
:wikitext('موقعیت')
:done()
:tag('td')
:tag('div')
:addClass('location')
:wikitext(self.args.place or '{{{place}}}') -- hack so that people who don't know Lua know that this parameter is required
:done()
if self.args.coordinates then
builder:wikitext(self.args.coordinates)
end
builder = builder:done():done()
-- only for "Putsch"
if self.args.action then
builder:tag('tr')
:tag('th')
:css('padding-left', '1em')
:wikitext(self.args.action and 'عمل')
:done()
:tag('td')
:wikitext(self.args.action)
end
if self.args.status or self.args.result then
builder:tag('tr')
:tag('th')
:css('padding-left', '1em')
:wikitext(self.args.status and 'وضعیت' or 'نتایج')
:done()
:tag('td')
:addClass('status')
:newline()
:wikitext(self.args.status or self.args.result)
end
if self.args.territory then
builder:tag('tr')
:tag('th')
:css('padding-left', '1em')
:wikitext('تغییرات<br />قلمرو')
:done()
:tag('td')
:newline()
:wikitext(self.args.territory)
end
end
function IMC:render()
local builder = mw.html.create()
if self.args.campaignbox then
-- this should be the same as using {{stack|clear=right|...}}
builder:wikitext(self.frame:expandTemplate{ title = 'stack begin', args = { clear='true'} })
end
builder = builder:tag('table')
:addClass('infobox vevent')
:cssText(infoboxStyle.main_box_raw)
:css('width', self.args.width or nil)
builder:tag('tr')
:tag('th')
:addClass('summary')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.header_raw)
:wikitext(self.args.conflict or mw.title.getCurrentTitle().text)
if self.args.partof then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.sub_header_raw)
:wikitext('بخشی از ' .. self.args.partof)
end
if self.args.image then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:cssText(infoboxStyle.image_box_raw)
:wikitext(string.format('%s%s%s',
require('Module:InfoboxImage').InfoboxImage{args = {
image = self.args.image,
size = self.args.image_size,
sizedefault = 'frameless',
upright = 1,
alt = self.args.alt
}},
self.args.caption and '<br />' or '',
self.args.caption or ''
))
end
self:renderHeaderTable(builder:tag('tr'):tag('td'):attr('colspan', self.combatants))
self:renderPerCombatant(builder, self.args.combatants_header or 'طرفهای درگیر', 'combatant')
-- can be un-hardcoded once gerrit:165108 is merged
for _,v in ipairs{'a','b','c','d'} do
self:renderPerCombatant(builder, nil, 'combatant', v)
end
self:renderPerCombatant(builder, self.args.commanders_header or 'فرماندهان و رهبران', 'commander')
for _,v in ipairs{'a','b','c','d'} do
self:renderPerCombatant(builder, nil, 'commander', v)
end
self:renderPerCombatant(builder, self.args.units_header or 'واحدهای درگیر', 'units')
self:renderPerCombatant(builder, self.args.strengths_header or 'قوا', 'strength')
self:renderPerCombatant(builder, self.args.polstrengths_header or 'پشتیبانی سیاسی', 'polstrength')
self:renderPerCombatant(builder, self.args.milstrengths_header or 'پشتیبانی نظامی', 'milstrength')
self:renderPerCombatant(builder, self.args.casualties_header or 'تلفات و ضایعات', 'casualties')
if self.args.notes then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:css('border-top', infoboxStyle.section_border)
:newline()
:wikitext(self.args.notes)
end
if self.args.map_type then
builder:tag('tr')
:tag('td')
:attr('colspan', self.combatants)
:css('border-top', infoboxStyle.internal_border)
:node(require('Module:Location map').main(self.frame, {
self.args.map_type,
relief = self.args.map_relief,
coordinates = self.args.coordinates,
width = self.args.map_size or 220,
float = 'center',
border = 'none',
mark = self.args.map_mark,
marksize = self.args.map_marksize or 8,
label = self.args.map_label,
alt = self.args.map_alt,
caption = self.args.map_caption or ('موقعیت در '
.. (require('Module:Location map').data(self.frame, {self.args.map_type, 'name'})))
}))
end
builder = builder:done()
if self.args.campaignbox then
builder = builder:done()
builder:wikitext(self.args.campaignbox .. self.frame:expandTemplate{ title = 'stack end'})
end
return builder
end
function IMC.new(frame, args)
if not args then
args = require('Module:Arguments').getArgs(frame, {wrappers = { 'الگو:Infobox military conflict', 'الگو:جعبه اطلاعات درگیری نظامی' } })
if args['اندازه تصویر'] then args.image_size = args['اندازه تصویر'] end
if args['اندازه نشانگر نقشه'] then args.map_marksize = args['اندازه نشانگر نقشه'] end
if args['اندازه نقشه'] then args.map_size = args['اندازه نقشه'] end
if args['بخشی از'] then args.partof = args['بخشی از'] end
if args['برچسب نقشه'] then args.map_label = args['برچسب نقشه'] end
if args['پانویس'] then args.notes = args['پانویس'] end
if args['تاریخ'] then args.date = args['تاریخ'] end
if args['تصویر'] then args.image = args['تصویر'] end
if args['توضیح تصویر'] then args.caption = args['توضیح تصویر'] end
if args['توضیح نقشه'] then args.map_caption = args['توضیح نقشه'] end
if args['جایگزین'] then args.alt = args['جایگزین'] end
if args['جعبه لشکرکشی'] then args.campaignbox = args['جعبه لشکرکشی'] end
if args['درگیری'] then args.conflict = args['درگیری'] end
if args['سرآیند طرفین درگیر'] then args.combatants_header = args['سرآیند طرفین درگیر'] end
if args['عرض'] then args.width = args['عرض'] end
if args['عمل'] then args.action = args['عمل'] end
if args['قلمرو'] then args.territory = args['قلمرو'] end
if args['مختصات'] then args.coordinates = args['مختصات'] end
if args['مکان'] then args.place = args['مکان'] end
if args['نتیجه'] then args.result = args['نتیجه'] end
if args['نشانگر نقشه'] then args.map_mark = args['نشانگر نقشه'] end
if args['نقشه'] then args.map_type = args['نقشه'] end
if args['نقشه برجسته'] then args.map_relief = args['نقشه برجسته'] end
if args['وضعیت'] then args.status = args['وضعیت'] end
-- "combatant[i][v] Persian parameters; this can be shortened by modifying the loop at L-274
if args['درگیر۱'] then args.combatant1 = args['درگیر۱'] end
if args['درگیر۲'] then args.combatant2 = args['درگیر۲'] end
if args['درگیر۳'] then args.combatant3 = args['درگیر۳'] end
if args['درگیر۱الف'] then args.combatant1a = args['درگیر۱الف'] end
if args['درگیر۲الف'] then args.combatant2a = args['درگیر۲الف'] end
if args['درگیر۳الف'] then args.combatant3a = args['درگیر۳الف'] end
if args['درگیر۱ب'] then args.combatant1b = args['درگیر۱ب'] end
if args['درگیر۲ب'] then args.combatant2b = args['درگیر۲ب'] end
if args['درگیر۳ب'] then args.combatant3b = args['درگیر۳ب'] end
if args['درگیر۱ج'] then args.combatant1c = args['درگیر۱ج'] end
if args['درگیر۲ج'] then args.combatant2c = args['درگیر۲ج'] end
if args['درگیر۳ج'] then args.combatant3c = args['درگیر۳ج'] end
if args['درگیر۱د'] then args.combatant1d = args['درگیر۱د'] end
if args['درگیر۲د'] then args.combatant2d = args['درگیر۲د'] end
if args['درگیر۳د'] then args.combatant3d = args['درگیر۳د'] end
if args['فرمانده۱'] then args.commander1 = args['فرمانده۱'] end
if args['فرمانده۲'] then args.commander2 = args['فرمانده۲'] end
if args['فرمانده۳'] then args.commander3 = args['فرمانده۳'] end
if args['واحدها۱'] then args.units1 = args['واحدها۱'] end
if args['واحدها۲'] then args.units2 = args['واحدها۲'] end
if args['واحدها۳'] then args.units3 = args['واحدها۳'] end
if args['قوا۱'] then args.strength1 = args['قوا۱'] end
if args['قوا۲'] then args.strength2 = args['قوا۲'] end
if args['قوا۳'] then args.strength3 = args['قوا۳'] end
if args['تلفات۱'] then args.casualties1 = args['تلفات۱'] end
if args['تلفات۲'] then args.casualties2 = args['تلفات۲'] end
if args['تلفات۳'] then args.casualties3 = args['تلفات۳'] end
end
local obj = {
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 order
obj.combatants = 2
for _,v in ipairs{'', 'a', 'b', 'c', 'd'} do
for i = 1,5 do
if args['combatant' .. i .. v] then
obj.combatants = math.max(obj.combatants, i)
end
end
end
return setmetatable(obj, IMC)
end
local p = {}
function p.main(frame)
return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles} } .. tostring(IMC.new(frame):render())
end
return p