Here naverokê

Modul:Agahîdank pevçûnên leşkerî

Ji Wîkîpediya, ensîklopediya azad.

Bicihanîna {{Agahîdank pevçûnên leşkerî}}

require('strict')

local infoboxStyle = mw.loadData('Modul:WPMILHIST Infobox style')
local templatestyles = 'Modul:Agahîdank pevçûnên leşkerî/styles.css'
local imf = require('Modul:Infobox mapframe')

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-right', i ~= lastCombatant and infoboxStyle.internal_border or nil)
     -- no padding on the left of the leftmost column
     :css('padding-left', 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['dîrok'] then
  builder:tag('tr')
   :tag('th')
    :css('padding-right', '1em')
    :wikitext('Dîrok')
   :done()
   :tag('td')
    :wikitext(self.args['dîrok'])
 end

 builder = builder:tag('tr')
  :tag('th')
   :css('padding-right', '1em')
   :wikitext('Herêm')
  :done()
  :tag('td')
   :tag('div')
    :addClass('location')
    :wikitext(self.args['herêm'] or '{{{herêm}}}') -- hack so that people who don't know Lua know that this parameter is required
   :done()
 if self.args['koordînat'] then
  builder:wikitext(self.args['koordînat'])
 end
 builder = builder:done():done()

 -- only for "Putsch"
    if self.args['çalakî'] then
  builder:tag('tr')
   :tag('th')
    :css('padding-right', '1em')
    :wikitext(self.args['çalakî'] and 'Çalakî')
   :done()
   :tag('td')
    :wikitext(self.args['çalakî'])
 end

if self.args['sedem'] then
 builder:tag('tr')
  :tag('th')
   :css('padding-right', '1em')
   :wikitext('Sedem')
  :done()
  :tag('td')
   :newline()
   :wikitext(self.args['sedem'])
 end

 if self.args['rewş'] or self.args.encam then
  builder:tag('tr')
   :tag('th')
    :css('padding-right', '1em')
    :wikitext(self.args['rewş'] and 'Rewş' or 'Encam')
   :done()
   :tag('td')
    :addClass('status')
    :newline()
    :wikitext(self.args['rewş'] or self.args.encam)
 end

 if self.args.ax then
  builder:tag('tr')
   :tag('th')
    :css('padding-right', '1em')
    :wikitext('Guhertinên<br />axê')
   :done()
   :tag('td')
    :newline()
    :wikitext(self.args.ax)
 end
end

function IMC:render()
 local builder = mw.html.create()
 if self.args['qutiyakampanyayê'] then
  -- this should be the same as using {{stack|clear=right|...}}
  builder:wikitext(self.frame:expandTemplate{ title = 'Destpêka nijinê', args = { clear='true'} })
 end
 builder = builder:tag('table')
  :addClass('infobox vevent')
  :cssText(infoboxStyle.main_box_raw)
  :css('width', self.args['firehî'] or nil)

 builder:tag('tr')
  :tag('th')
   :addClass('summary')
   :attr('colspan', self.combatants)
   :cssText(infoboxStyle.header_raw)
   :wikitext(self.args['pevçûn'] or mw.title.getCurrentTitle().text)
 if self.args['perçeyekî'] then
  builder:tag('tr')
   :tag('td')
    :attr('colspan', self.combatants)
    :cssText(infoboxStyle.sub_header_raw)
    :wikitext('Perçeyekî ' .. self.args['perçeyekî'])
 end
 if self.args['wêne'] 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['wêne'],
            size = self.args['mezinahiya_wêne'],
      sizedefault = 'frameless',
      upright = self.args['wêne_upright'] or 1.2,
      alt = self.args.alt
     }},
     self.args['binnivîs'] and '<br />' or '',
     self.args['binnivîs'] or ''
    ))
 end
 self:renderHeaderTable(builder:tag('tr'):tag('td'):attr('colspan', self.combatants))
 self:renderPerCombatant(builder, self.args['sernavê_aliyan'] or 'Aliyên şer', 'şervan')
 -- can be un-hardcoded once gerrit:165108 is merged
 for _,v in ipairs{'a','b','c','d','e'} do
  self:renderPerCombatant(builder, nil, 'şervan', v)
 end
	
 self:renderPerCombatant(builder, self.args['sernavê_fermandaran'] or 'Fermandar û rêber', 'fermandar')
 for _,v in ipairs{'a','b','c','d'} do
  self:renderPerCombatant(builder, nil, 'fermandar', v)
 end
	
 self:renderPerCombatant(builder, self.args['sernavê_yekîneyan'] or 'Yekîneyên beşdar', 'yekîne')
 self:renderPerCombatant(builder, self.args['sernavê_hêzan'] or 'Hêz', 'hêz')
 self:renderPerCombatant(builder, self.args['sernavê_piştgiriya_siyasî'] or 'Piştgiriya siyasî', 'piştgiriya_siyasî')
 self:renderPerCombatant(builder, self.args['sernavê_piştgiriya_leşkerî'] or 'Piştgiriya leşkerî', 'piştgiriya_leşkerî')
 self:renderPerCombatant(builder, self.args['sernavê_windahiyan'] or 'Windahî û zirar', 'windahî')

 if self.args['nîşe'] then
  builder:tag('tr')
   :tag('td')
    :attr('colspan', self.combatants)
    :css('border-top', infoboxStyle.section_border)
    :newline()
    :wikitext(self.args['nîşe'])
 end

 if self.args['cureyê_nexşe'] and self.args['koordînat'] then
 local ok, result = pcall(function()
  return require('Module:Location map').main(self.frame, {
   self.args['cureyê_nexşe'],
   relief = self.args['nexşeya_fîzîkî'],
   coordinates = self.args['koordînat'],
   width = self.args['mezinahiya_nexşe'] or 220,
   float = 'center',
   border = 'none',
   mark = self.args['nîşana_nexşe'],
   marksize = self.args['mezinahiya_nîşanê'] or 8,
   label = self.args['etîket_nexşe'],
   alt = self.args['alt_nexşe'],
   caption = self.args['binnivîsa_nexşe'] or ('Cih di nav '
    .. (require('Module:Location map').data(self.frame, {self.args['cureyê_nexşe'], 'name'})))
  })
 end)
 if ok then
  builder:tag('tr')
   :tag('td')
    :attr('colspan', self.combatants)
    :css('border-top', infoboxStyle.internal_border)
    :node(result)
 end
end
 if self.args['koordînat'] then
  -- FIXME: this update of the default zoom level does not work
  self.frame.args.zoom = "7"
  builder:tag('tr')
   :tag('td')
    :attr('colspan', self.combatants)
    :css('border-top', infoboxStyle.internal_border)
    :css('text-align', 'center')
    :node(imf.autoWithCaption(self.frame))
 end

 builder = builder:done()
 if self.args['qutiyakampanyayê'] then
  builder = builder:done()
  builder:wikitext(self.args['qutiyakampanyayê'] .. self.frame:expandTemplate{ title = 'Dawiya nijinê'})
 end
 return builder
end

function IMC.new(frame, args)
 if not args then
  args = require('Module:Arguments').getArgs(frame, {wrappers = 'Şablon:Agahîdank pevçûnên leşkerî'})
 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['şervan' .. 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