Модуль:Песочница/Seryo93/Карточка государства
Перейти к навигации
Перейти к поиску
Документация
require('Module:No globals')
local IBC = {} -- IBC == InfoBox Country
IBC.__index = IBC
local contestedstate = {'непризнанное','частично признанное','виртуальное'}
function table.count(tab)
local Count
Count = 0
for Index, Value in pairs( tab ) do
Count = Count + 1
end
return Count
end
local function upperfirst(str)
str=tostring(str)
if mw.ustring.len(str)<=1 then return mw.ustring.upper(str) else
return mw.ustring.upper(mw.ustring.sub(str,1,1))..mw.ustring.sub(str,2,-1)
end
end
local function lowerfirst(str)
str=tostring(str)
if mw.ustring.len(str)<=1 then return mw.ustring.lower(str) else
return mw.ustring.lower(mw.ustring.sub(str,1,1))..mw.ustring.sub(str,2,-1)
end
end
--function IBC:getUniversalArgNums(prefix)
function IBC:getArgNums(prefix,minarg)
local nums = {}
local numsuc = {}
for k,v in pairs (self.args) do
local numu = tostring(k):match('^'..upperfirst(prefix)..'([1-9]%d*)$')
local numl = tostring(k):match('^'..lowerfirst(prefix)..'([1-9]%d*)$')
if numu then
if self.args[upperfirst(prefix)..numu]~=nil then
table.insert(numsuc, tonumber(numu))
end
end
if numl then
if self.args[lowerfirst(prefix)..numl]~=nil then
table.insert(nums, tonumber(numl))
end
end
end
table.sort(numsuc)
for k,v in pairs(numsuc) do
if not table.contains(nums,v) then
table.insert(nums, tonumber(v))
end
end
if (minarg) and type(minarg)=='number' then
for k,v in pairs(nums) do
if v<minarg then
table.remove(nums,k)
end
end
end
table.sort(nums, function(a, b) return a < b end)
numsuc = nil
return nums
end
function IBC:getMultiprefixArgs(prefixes,minarg)
if type(prefixes)~='table' then return self:getArgNums(prefixes,minarg)
else
if table.count(prefixes)==0 then return {} end
if table.count(prefixes)==1 then return self:getArgNums(prefixes[1],minarg) end
local prefixesarrays = {}
local mainarray=self:getArgNums(prefixes[1],minarg) or {}
for i=2,table.count(prefixes) do
prefixesarrays['temp'..i]=self:getArgNums(prefixes[i],minarg)
end
for k,v in pairs(prefixesarrays) do
for _,num in pairs(prefixesarrays[k]) do
if not table.contains(mainarray,num) then
table.insert(mainarray,num)
end
end
end
table.sort(mainarray, function(a, b) return a < b end)
prefixesarrays = nil
return mainarray
end
end
function table.contains(table, element)
for _, value in pairs(table) do
if value == element then
return true
end
end
return false
end
function IBC:universalarg(argname)
return self.args[upperfirst(argname)] or self.args[lowerfirst(argname)]
end
function IBC:universalargs(argsname)
if type(argsname)~='table' then return self:universalarg(argsname)
else
if table.count(argsname)==0 then return nil end
if table.count(argsname)==1 then return self:universalarg(argsname[1]) end
for k,v in pairs(argsname) do
if self:universalarg(v)~=nil then return self:universalarg(v)
end
end
end
return nil
end
function IBC:statename(builder)
builder=builder:tag('tr')
:tag('td')
:attr('colspan',2)
:cssText('text-align:center; background:inherit; font-weight:bold; font-size:larger; width: 300px;')
:wikitext(self.frame:expandTemplate{title='Карточка/название',args={self:universalargs({'русское название','название'})}})
if self:universalargs({'оригинальное название','самоназвание'}) then
builder=builder:tag('tr')
:tag('td')
:attr('colspan',2)
:cssText('text-align:center; background:inherit; font-size:larger')
:wikitext(self:universalargs({'оригинальное название','самоназвание'}))
end
end
function IBC:IsContestedOrVirtual()
if self:universalargs('спорный статус') then
if self:universalargs('статус') and table.contains(contestedstate,lowerfirst(self:universalargs('статус'))) then
return true
end
end
return false
end
function IBC:renderMotto(builder)
local motto=self:universalargs('девиз')
builder=builder:tag('tr')
:tag('th')
:attr('align','center')
:attr('colspan',2)
:attr('width','100%')
:wikitext('[[Девиз]]')
:done()
:done()
:tag('tr')
:tag('td')
:attr('align','center')
:attr('colspan',2)
:attr('width','100%')
:wikitext(motto)
end
function IBC:renderstatusrow(builder,former)
local statustoreturn
if former==true then
statustoreturn=self:universalargs('статус')
else
if mw.ustring.lower(self:universalargs('статус'))=='виртуальное' then
statustoreturn=self.frame:preprocess('[[{{ucfirst:'..self:universalargs('статус')..' государство}}]]')
else
statustoreturn=self.frame:preprocess('[[Непризнанные и частично признанные государства|{{ucfirst:'..self:universalargs('статус')..' государство}}]]')
end
end
builder=builder:tag('tr')
:tag('td')
:attr('colspan',2)
:css('width','300px')
:attr('align','center')
:css('background','inherit')
:css('font-size','smaller')
:wikitext(statustoreturn)
end
function IBC:wikidata(args)
return self.frame:expandTemplate{title='wikidata',args=args}
end
function IBC:notnillarg(arg,wd)
local ret
if wd then
ret = self:wikidata({wd, self:universalargs(arg), plain='true'})
else
ret= self:universalargs(arg)
end
return ret or ''
end
function IBC:hassymbols(former)
if self:notnillarg('без флага и герба')~='' then
return false
end
if (self:notnillarg('флаг','p41')=='novalue') and (self:notnillarg('герб','p41')=='novalue') then
return false
end
if (self:notnillarg('флаг','p41')=='') and (self:notnillarg('герб','p41')=='') then
if (former==false) and (self:notnillarg('флаг')~='-') and (self:notnillarg('герб')~='-') then
return true
end
return false
end
return true
end
function IBC:getflaglink(former)
local flaglink
flaglink = ''
if former==true then
flaglink = self:wikidata({'p163', self:universalargs({'описание флага','описание_флага'}), [4]='Флаг', text='Флаг'})
else
local leftofpipe = (self:universalarg('ссылка на флаг')) or ('Флаг'..' '..(self:universalarg('родительный падеж') or ''))
flaglink=self.frame:preprocess('[['..leftofpipe..'|Флаг]]')
end
return flaglink
end
function IBC:getarmslink(former)
local armslink
armslink = ''
if former==true then
armslink = self:wikidata({'p237', self:universalargs({'описание герба','описание_герба'}), [4]='Герб', text='Герб'})
else
local leftofpipea = (self:universalarg('вместо герба') or 'Герб')..(self:universalarg('родительный падеж') or '')
armslink=self:universalarg('отображаемая подпись герба') or self.frame:preprocess('[['..leftofpipea..'|'..(self:universalarg('вместо герба') or 'Герб')..']]')
end
return armslink
end
function IBC:rendersimplerow(builder,heading,value,nottop,nottdhead)
builder=builder:tag('tr')
:css('border-top', nottop~=true and 'solid 1px #aaa' or nil)
:tag(nottdhead~=true and 'th' or 'td')
:attr('width','50%')
:css('padding-left','.5em')
:wikitext(heading)
:done()
:tag('td')
:wikitext(value)
end
function IBC:renderflagandarms(builder,former)
local colspan = (((self:notnillarg('флаг','p41')~='') and (self:notnillarg('герб','p41')~='')) and ((self:notnillarg('флаг','p41')~='novalue') and (self:notnillarg('герб','p41')~='novalue'))) and nil or 2
local flaglink = self:getflaglink(former)
local armslink = self:getarmslink(former)
local flagimagesuppressor
local armsimagesuppressor
flagimagesuppressor = nil
armsimagesuppressor = nil
if former==false then
if ((self:notnillarg('флаг','p41')=='') or (self:notnillarg('флаг','p41')=='novalue')) and (self:universalarg('флаг')~='-') then
flagimagesuppressor=self.frame:expandTemplate{title='Флаг', args={self.frame:preprocess('{{FULLPAGENAME}}'),['размер']='130px'}}
end
if (self:notnillarg('герб','p94')=='') or (self:notnillarg('герб','p94')=='novalue') and (self:universalarg('герб')~='-') then
armsimagesuppressor=self.frame:preprocess('[[Файл:Sin escudo.svg|'..(self:universalarg('размер герба') or '90px')..'|'..(self:universalarg('вместо герба') or 'Герб')..' '..(self:universalarg('родительный падеж') or '')..']]')
end
end
if (flagimagesuppressor~=nil) and (armsimagesuppressor~=nil) then
colspan = 2
end
local flagwikitext
if flagimagesuppressor~=nil then
flagwikitext=flagimagesuppressor
else
if (self:notnillarg('флаг','p41')~='') and (self:notnillarg('флаг','p41')~='novalue') then
flagwikitext=self:wikidata({'p41[1]',self:notnillarg('флаг'),border=(tostring(self:notnillarg('без рамки флага')=='' and true or false)),size=(self:universalarg('размер флага') or '130px')})
end
end
local armswikitext
if armsimagesuppressor~=nil then
armswikitext = armsimagesuppressor
else
if (self:notnillarg('герб','p94')~='') and (self:notnillarg('герб','p94')~='novalue') then
armswikitext = self:wikidata({'p94[1]',self:notnillarg('герб'),size=(self:universalarg('размер герба') or '90px')})
end
end
--local colspan=2
builder=builder:tag('table')
:tag('tr')
if flagwikitext~=nil then
builder=builder:tag('td')
:attr('colspan', colspan)
:cssText('text-align:center; vertical-align:middle; width:150px')
:wikitext(flagwikitext)
end
if armswikitext~=nil then
builder=builder:tag('td')
:attr('colspan', colspan)
:cssText('text-align:center; vertical-align:middle; width:150px')
:wikitext(armswikitext)
end
builder=builder:tag('tr')
if flagwikitext~=nil then
builder=builder:tag('td')
:attr('align','center')
:attr('colspan',colspan)
:wikitext(flaglink~='' and flaglink or 'Флаг')
end
if armswikitext~=nil then
builder=builder:tag('td')
:attr('align','center')
:attr('colspan',colspan)
:wikitext(armslink~='' and armslink or 'Герб')
end
builder=builder:done():done()
end
function IBC:hasanthem(former)
if former==false then
if self:universalarg('без гимна') then
return false
else
return true
end
else
if self:notnillarg('гимн','p85')~='' then return true
else
return false
end
end
end
function IBC:lifespan(builder)
self.predecessornums = self:getArgNums('p')
self.successornums = self:getArgNums('s')
local foundednums = self:getArgNums('образовано')
local eliminatednums = self:getArgNums('ликвидировано')
local predecessorstext, successorstext, lifespantext
predecessorstext, successorstext, lifespantext = '', '', ''
if self:universalarg('период существования') then
lifespantext=self:universalarg('период существования')
else
if self:notnillarg('образовано','p571')~='' then
lifespantext = lifespantext..self:wikidata({'p571',self:universalarg('образовано')})
end
if self:notnillarg('ликвидировано','p576')~='' then
lifespantext = lifespantext..' — '..self:wikidata({'p576',self:universalarg('ликвидировано')})
end
if math.max(table.count(foundednums),table.count(eliminatednums))~=0 then
if lifespantext~='' then lifespantext = lifespantext..'<br>'
for i=1,math.max(table.count(foundednums),table.count(eliminatednums)) do
if i~=1 then lifespantext = lifespantext..'<br>' end
if self:universalarg('образовано'..foundednums[i]) then
lifespantext = lifespantext..self:universalarg('образовано'..foundednums[i])
--if self:universalarg('ликвидировано'..foundednums[i]) then
--lifespantext = lifespantext..' — '..self:universalarg('ликвидировано'..foundednums[i])
--end
end
if self:universalarg('ликвидировано'..eliminatednums[i]) then
lifespantext = lifespantext..' — '..self:universalarg('ликвидировано'..eliminatednums[i])
end
end
end
end
end
if (table.count(self.predecessornums)>0) and (table.count(self.predecessornums)<8) then
for i=1,math.min(table.count(self.predecessornums),8) do
if self:universalarg('p'..self.predecessornums[i]) then
local predecessorflag
if self:universalarg('flag_p'..self.predecessornums[i]) then
predecessorflag = self.frame:preprocess('[[Файл:'..self:universalarg('flag_p'..self.predecessornums[i])..'|border|30px|link='..self:universalarg('p'..self.predecessornums[i])..']]')
elseif self:universalarg('image_p'..self.predecessornums[i]) then
predecessorflag = self:universalarg('image_p'..self.predecessornums[i]) else
predecessorflag = '[[Файл:Flag of None.svg|30px|border]]'
end
predecessorstext = predecessorstext..self.frame:preprocess('[['..self:universalarg('p'..self.predecessornums[i])..'|<span style="font-size:400%">←</span>]]')..predecessorflag..'<br>'
end
end
end
if (table.count(self.successornums)>0) and (table.count(self.successornums)<8) then
for i=1,math.min(table.count(self.successornums),8) do
if self:universalarg('s'..self.successornums[i]) then
local successorflag
if self:universalarg('flag_s'..self.successornums[i]) then
successorflag = self.frame:preprocess('[[Файл:'..self:universalarg('flag_s'..self.successornums[i])..'|border|30px|link='..self:universalarg('p'..self.successornums[i])..']]')
elseif self:universalarg('image_s'..self.successornums[i]) then
successorflag = self:universalarg('image_s'..self.successornums[i]) else
successorflag = '[[Файл:Flag of None.svg|30px|border]]'
end
successorstext = successorstext..successorflag..self.frame:preprocess('[['..self:universalarg('s'..self.successornums[i])..'|<span style="font-size:400%">→</span>]]')..'<br>'
end
end
end
builder = builder:tag('table')
:attr('width','100%')
:css('text-align','center')
:css('margin','0 auto')
:css('background','none')
:tag('tr')
:tag('td')
:attr('width','50px')
:cssText('border:0; vertical-align:middle; font-size:30%; line-height:105%')
:wikitext(predecessorstext)
:done()
:tag('td')
:cssText('vertical-align:middle; text-align:center; font-size:115%; border:0')
:wikitext(lifespantext)
:done()
:tag('td')
:attr('width','50px')
:cssText('border:0; vertical-align:middle; font-size:30%; line-height:105%')
:wikitext(successorstext)
end
function IBC:renderanthem(builder,former)
local anthemtext
if former==true then
anthemtext = (self:universalarg('подавить название графы гимна')==nil and 'Гимн<br>' or '')..self:wikidata({'p85',self:universalarg('гимн'),text='Гимн'})
else
anthemtext = self:universalarg('название гимна')~=nil and self.frame:preprocess("[[Государственный гимн|Гимн]]: ".."''[[Гимн "..(self:universalarg("родительный падеж") or "").."|"..self:universalarg("название гимна").."]]''") or self.frame:preprocess('[[Гимн '..(self:universalarg("родительный падеж") or '')..'|Государственный гимн '..(self:universalarg("родительный падеж") or '')..']]')
if self:universalarg('аудио') then
anthemtext = anthemtext..'<br>[[Файл:'..self:universalarg('аудио')..'|100px|center|noicon]]'
end
end
builder = builder:tag('tr')
:tag('td')
:attr('align','center')
:attr('colspan',2)
:cssText('line-height:1.2em; padding:.4em .6em; border-top:0; vertical-align:middle; text-align:center; font-size:95%; background-color:#f9f9f9')
:wikitext(anthemtext)
end
function IBC:renderfoundations(builder)
local foundingdate = self:universalargs({'основано','основана','дата образования','образовано'})
if foundingdate~=nil then
builder=builder:tag('tr')
:css('border-top','solid 1px #aaa')
:tag('th')
:css('padding-left','.5em;')
:attr('width','50%')
:wikitext('[[Основание государства|Дата образования]]')
:done()
:tag('td')
:wikitext(foundingdate)
end
local independencedate = self:universalargs({'даты независимости','провозглашение независимости','дата независимости'})
local independencefrom = self:universalarg('независимость от')
if independencedate~=nil then
builder=builder:tag('tr')
:css('border-top',foundingdate==nil and 'solid 1px #aaa' or nil)
:tag('th')
:css('padding-left','.5em;')
:attr('width','50%')
:wikitext(self:universalarg('спорный статус')==nil and (self:universalarg('отображаемый тип независимости') or '[[Суверенитет|'..(self:universalarg('даты независимости') and 'Дата' or 'Даты')..' независимости]]') or 'Провозглашение независимости')
:done()
:tag('td')
:wikitext(independencedate..(independencefrom~=nil and ('<br> (от '..self:universalarg('независимость от')..')') or ''))
end
if (self:universalarg('спорный статус')~=nil) and self:universalarg('дипломатическое признание') then
builder=builder:tag('tr')
:css('border-top',((foundingdate==nil) and (independencedate==nil)) and 'solid 1px #aaa' or nil)
:tag('th')
:attr('width','50%')
:css('padding-left','.5em;')
:wikitext('[[Международно-правовое признание|Дипломатическое признание]]')
:done()
:tag('td')
:wikitext(self:universalarg('дипломатическое признание'))
end
end
function IBC:renderstages(builder,former)
local stagesnum=self:getArgNums('этап') or {}
local stagescount=table.count(stagesnum)
local histrow = (self:universalargs({'sovereignty_type','тип истории'}) or (former==true)) and true or false
if stagescount>0 then
if histrow==true then
builder=builder:tag('tr')
:addClass('mergedtoprow')
:css('border-top', 'solid 1px #aaa')
:tag('th')
:attr('colspan',2)
:css('padding-left','.5em')
:wikitext(self:universalargs({'sovereignty_type','тип истории'}) or 'История')
end
for i=1,stagescount do
local stageevent
local stagedate
if self:universalarg('этап'..stagesnum[i]) then
stageevent=(former~=false and '' or ' • ')..self:universalarg('этап'..stagesnum[i])
stagedate=(former~=false and ' - ' or '')..(self:universalarg('дата'..stagesnum[i]) or '')..(self:universalarg('год'..stagesnum[i]) or '')
builder=builder:tag('tr')
:addClass('merged'..(i==1 and (histrow~=true and 'top' or '') or (i==stagescount and 'bottom' or ''))..'row')
:css('border-top', histrow==false and (i==1 and 'solid 1px #aaa' or nil) or nil)
:tag('td')
:wikitext(former~=true and stageevent or stagedate)
:done()
:tag('td')
:wikitext(former~=true and stagedate or stageevent)
end
end
end
end
function IBC:rendermaps(builder,maps)
local maptext
local firstmap
maptext, firstmap = '',''
if tostring(self:wikidata({'p242',(self:universalargs({'на карте','карта'})),plain='true'}))~='' then
firstmap=self:wikidata({'p242[1]',(self:universalargs({'на карте','карта'})),size=(self:universalarg('размер карты') or '300x300px')})
if self:universalargs({'описание карты','подпись к карте'}) then
firstmap=firstmap..self.frame:preprocess('<div style="top:0.3em;"><small>'..(self:universalargs({'описание карты','подпись к карте'}))..'</small></div>')
end
end
if firstmap~='' then
maptext = firstmap
if table.count(maps)>0 then
maptext=maptext..'<br>'
end
end
if table.count(maps)>0 then
for i=1,table.count(maps) do
local temparg
temparg = i>1 and '<br>' or ''
if self:universalargs({'на карте'..maps[i],'карта'..maps[i]}) then
maptext=maptext..temparg..'[[Файл:'..(self:universalargs({'на карте'..maps[i],'карта'..maps[i]}))..'|'..(self:universalargs('размер карты'..maps[i]) or '300x300px')..']]'
if self:universalargs('описание карты'..maps[i]) or self:universalargs('подпись к карте'..maps[i]) then
maptext=maptext..self.frame:preprocess('<div style="top:0.3em;"><small>'..(self:universalargs('описание карты'..maps[i]) or self:universalargs('подпись к карте')..maps[i])..'</small></div>')
end
end
end
end
builder=builder:tag('tr')
:tag('td')
:attr('align','center')
:attr('colspan',2)
:cssText('border: solid darkgray; border-width:1px 0')
:wikitext(maptext)
end
function IBC:renderleaderarray(builder,former)
local leadleaderarray = former~=true and (self:universalargs({'руководители','правители'})) or nil
if leadleaderarray~=nil then
self:rendersimplerow(builder,(self:universalargs({'должности руководителей','титулы правителей','титулы_правителей','титул_правителей','титул правителей'})),(self:universalargs({'руководители','правители'})))
end
local addleadercount
addleadercount=table.count(self.leadernums) or 0
if addleadercount>0 then
if former==false then
for i=1,addleadercount do
self:rendersimplerow(builder,(self:universalargs('должность руководителя'..self.leadernums[i]) or self:universalargs('титул правителя'..self.leadernums[i]) or self:universalargs('титул_правителя'..self.leadernums[i])),(self:universalargs('руководитель'..self.leadernums[i]) or self:universalargs('правитель'..self.leadernums[i])))
end
else
for i=1,addleadercount do
if (self:universalargs({'титул_правителя'..self.leadernums[i],'титул правителя'..self.leadernums[i],'должность руководителя'..self.leadernums[i],'титул_правителей'..self.leadernums[i],'титул правителей'..self.leadernums[i]}) or (i==1 and (self:universalargs('должность руководителей') or self:universalargs('титул правителей') or self:universalargs('титул_правителей')) or nil))~=nil then
builder=builder:tag('tr')
:tag('th')
:attr('colspan',2)
:css('padding-left','.5em')
:css('border-top', i==1 and 'solid 1px #aaa' or nil)
:wikitext(self:universalargs({'титул_правителя'..self.leadernums[i],'титул правителя'..self.leadernums[i],'должность руководителя'..self.leadernums[i],'титул_правителей'..self.leadernums[i],'титул правителей'..self.leadernums[i]}) or (i==1 and (self:universalargs('должность руководителей') or self:universalargs('титул правителей') or self:universalargs('титул_правителей')) or nil))
end
self:rendersimplerow(builder,(self:universalargs('год руководителя'..self.leadernums[i]) or self:universalargs('год правителя'..self.leadernums[i]) or self:universalargs('год_правителя'..self.leadernums[i])),(self:universalargs('руководитель'..self.leadernums[i]) or self:universalargs('правитель'..self.leadernums[i])),true,true)
end
end
end
end
function IBC:renderterritory(builder,former)
local firstterritoryarg= tostring(self:wikidata({'p2046',self:universalargs({'территория','площадь'}),plain=true}))~='' and self:wikidata({'p2046',(self:universalargs({'территория','площадь'}))}) or nil
if firstterritoryarg==nil and (table.count(self.territoryargs)>0) then
firstterritoryarg = self:universalargs({'территория'..self.territoryargs[1],'площадь'..self.territoryargs[1]}) or nil
table.remove(self.territoryargs,1)
end
local terrcount
if self.territoryargs[1] and (self:universalargs({'территория'..self.territoryargs[1],'площадь'..self.territoryargs[1]})~=nil) and (self.territoryargs[1]~=nil) then
terrcount=table.count(self.territoryargs)+1
else
terrcount=table.count(self.territoryargs)
end
builder=builder:tag('tr')
:css('border-top','solid 1px #aaa')
:tag('th')
:css('padding-left','.5em')
:wikitext(former~=true and '[[Территория государства|Территория]]' or 'Площадь')
:done()
:tag('td')
:wikitext(former~=true and (self:universalarg('место по площади')~=nil and ('[[Список государств и зависимых территорий по площади|'..self:universalarg('место по площади')..'-я в мире]]') or '') or firstterritoryarg)
:done()
:done()
if former~=true then
builder=builder:tag('tr')
:tag('td')
:css('padding-left','.6em')
:attr('rowspan',terrcount>1 and terrcount or nil)
:wikitext(' • Всего')
:done()
:tag('td')
:wikitext(firstterritoryarg..' км²')
:done()
:done()
for k,v in pairs(self.territoryargs) do
if self:universalargs({'территория'..v,'площадь'..v}) then
builder=builder:tag('tr')
:tag('td')
:wikitext(self:universalargs({'территория'..v,'площадь'..v})..' км²')
end
end
end
if self:universalarg('процент воды') then
self:rendersimplerow(builder,'• % водной поверхн.',self:universalarg('процент воды'),true,true)
end
end
--function IBC:renderpopulation(builder,former)
-- local popfirst = self:wikidata({'p1082',self:universalargs({'население',''})})
--end
function IBC:renderpopulation(builder,former)
local firstpoparg= tostring(self:wikidata({'p1082',self:universalarg('население'),plain=true}))~='' and self:wikidata({'p1082',(self:universalarg('население'))}) or nil
if firstpoparg==nil and (table.count(self.territoryargs)>0) then
firstpoparg = self:universalarg('население'..self.popnums[1]) or nil
table.remove(self.popnums,1)
end
local popcount
if self.popnums[1] and (self:universalarg('население'..self.popnums[1])~=nil) and (self.popnums[1]~=nil) then
popcount=table.count(self.popnums)+1
else
popcount=table.count(self.popnums)
end
builder=builder:tag('tr')
:css('border-top','solid 1px #aaa')
:tag('th')
:css('padding-left','.5em')
:wikitext(former~=true and ('[['..self.frame:expandTemplate{title='Население государства',args={self.frame:preprocess('{{PAGENAME}}')}}..']]') or 'Население')
:done()
:tag('td')
:wikitext(former~=true and (self:universalarg('место по населению')~=nil and ('[[Список стран по населению|('..self:universalarg('место по населению')..'-е)]]') or '') or firstpoparg)
:done()
:done()
if former~=true then
builder=builder:tag('tr')
:tag('td')
:css('padding-left','.6em')
:attr('rowspan',popcount>1 and popcount or nil)
:wikitext(' • Оценка'..(self:universalargs({'год оценки','год переписи'})~=nil and (' '..self:universalargs({'год оценки','год переписи'})) or ''))
:done()
:tag('td')
:wikitext(firstpoparg..' чел.')
:done()
:done()
for k,v in pairs(self.popnums) do
if self:universalarg('население'..v) then
builder=builder:tag('tr')
:tag('td')
:wikitext(self:universalarg('население'..v)..' чел.')
end
end
if self:universalarg('население по переписи') then
self:rendersimplerow(builder,'• Перепись',self:universalarg('население по переписи'),true,true)
end
end
if self:universalarg('плотность населения') then
builder:tag('tr')
:tag('td')
:css('padding-left','.6em')
:wikitext(' • [[Плотность населения|Плотность]]')
:done()
:tag('td')
:wikitext(self:universalarg('плотность населения')..' чел./км²'..(self:universalarg('место по плотности')~=nil and (' ([[Список стран по плотности населения|'..self:universalarg('место по плотности')..'-я]])') or ''))
end
end
function IBC:renderGDP(builder,former)
if self.gdp and self.gdp~=nil then
builder=builder:tag('tr')
:css('border-top','solid 1px #aaa')
:tag('th')
:css('padding-left','.5em')
:attr('colspan',2)
:wikitext('[[Валовой внутренний продукт]]')
:done()
:done()
:tag('tr')
:tag('td')
:css('padding-left','.5em')
:wikitext(' • Итого'..(self:universalarg('год расчёта ВВП')~=nil and (' ('..self:universalarg('год расчёта ВВП')..')') or ''))
:done()
:tag('td')
:wikitext(self.gdp..' [[Доллар США|долл.]]'..(self:universalarg('место по ВВП')~=nil and (' ([[Список стран по ВВП (ППС)|'..self:universalarg('место по ВВП')..'-й]])') or ''))
:done()
:done()
if self.percapita and self.percapita~=nil then
builder=builder:tag('tr')
:tag('td')
:css('padding-left','.5em')
:wikitext(' • На душу населения')
:done()
:tag('td')
:wikitext(self.percapita..' [[Доллар США|долл.]]'..(self:universalarg('место по ВВП на душу населения')~=nil and (' ([[Список стран по ВВП (ППС) на душу населения|'..self:universalarg('место по ВВП на душу населения')..'-й]])') or ''))
:done()
:done()
end
if self.gdpppp and self.gdpppp~=nil then
builder=builder:tag('tr')
:css('border-top',self.gdp==nil and 'solid 1px #aaa' or nil)
:tag('th')
:css('padding-left','.5em')
:attr('colspan',2)
:wikitext('[[Валовой внутренний продукт|ВВП]] <span style="font-weight:normal">([[Паритет покупательной способности|ППС]])</nobold')
:done()
:done()
:tag('tr')
:tag('td')
:css('padding-left','.5em')
:wikitext(' • Итого'..(self:universalarg('год расчёта ВВП (ППС)')~=nil and (' ('..self:universalarg('год расчёта ВВП (ППС)')..')') or ''))
:done()
:tag('td')
:wikitext(self.gdpppp..' [[Доллар США|долл.]]'..(self:universalarg('место по ВВП (ППС)')~=nil and (' ([[Список стран по ВВП (ППС)|'..self:universalarg('место по ВВП (ППС)')..'-й]])') or ''))
:done()
:done()
if self.ppppc and self.ppppc~=nil then
builder=builder:tag('tr')
:tag('td')
:css('padding-left','.5em')
:wikitext(' • На душу населения')
:done()
:tag('td')
:wikitext(self.ppppc..' [[Доллар США|долл.]]'..(self:universalarg('место по ВВП (ППС) на душу населения')~=nil and (' ([[Список стран по ВВП (ППС) на душу населения|'..self:universalarg('место по ВВП (ППС) на душу населения')..'-й]])') or ''))
:done()
:done()
end
end
if self.gdppnominal and self.gdppnominal~=nil then
builder=builder:tag('tr')
:css('border-top',(self.gdp==nil) and (self.gdpppp==nil) and 'solid 1px #aaa' or nil)
:tag('th')
:css('padding-left','.5em')
:attr('colspan',2)
:wikitext('[[Валовой внутренний продукт|ВВП]] <span style="font-weight:normal">(номинал)</span>')
:done()
:done()
:tag('tr')
:tag('td')
:css('padding-left','.5em')
:wikitext(' • Итого'..(self:universalarg('год расчёта ВВП (номинал)')~=nil and (' ('..self:universalarg('год расчёта ВВП (номинал)')..')') or ''))
:done()
:tag('td')
:wikitext(self.gdppnominal..' [[Доллар США|долл.]]'..(self:universalarg('место по ВВП (номинал)')~=nil and (' ([[Список стран по ВВП (номинал)|'..self:universalarg('место по ВВП (номинал)')..'-й]])') or ''))
:done()
:done()
if self.nominalpc and self.nominalpc~=nil then
builder=builder:tag('tr')
:tag('td')
:css('padding-left','.5em')
:wikitext(' • На душу населения')
:done()
:tag('td')
:wikitext(self.nominalpc..' [[Доллар США|долл.]]'..(self:universalarg('место по ВВП (номинал) на душу населения')~=nil and (' ([[Список стран по ВВП (номинал) на душу населения|'..self:universalarg('место по ВВП (номинал) на душу населения')..'-й]])') or ''))
:done()
:done()
end
end
--:wikitext()
end
end
function IBC:rendersuccessionbottom(builder)
local do_args = self:getArgNums('д') or {}
local posle_args = self:getArgNums('п') or {}
local hassuccessionargs = (table.count(self.predecessornums)+table.count(self.successornums)+table.count(do_args)+table.count(posle_args))>0 and true or false
if (table.count(do_args)+table.count(posle_args)==0) and (math.max(table.count(self.predecessornums),table.count(self.successornums))<8) then
hassuccessionargs=false
end
if hassuccessionargs then
builder=builder:tag('tr')
--:css('border-top','solid 1px #aaa')
:tag('td')
:attr('colspan',2)
:tag('table')
:attr('width','100%')
:cssText('text-align:center; margin:0 auto;background-color:#F5F5F5;border-top:1px')
:tag('tr')
--:css('border-top','solid 1px #aaa')
:tag('th')
:css('text-align','center')
:attr('colspan',2)
:wikitext('Преемственность')
:done()
:done()
:tag('tr')
:tag('th')
:attr('align','center')
:wikitext(self:universalargs({'type_before','type_before','тип предшественников','тип_предшественников'}) or 'Предшественники')
:done()
:tag('th')
:attr('align','center')
:wikitext(self:universalargs({'type_after','type_after','тип преемников','тип_преемников'}) or 'Преемники')
:done()
:done()
if math.max(table.count(self.predecessornums),table.count(self.successornums))>8 then
for i=1,math.max(table.count(self.predecessornums),table.count(self.successornums)) do
local successor
local predecessor
local pflagbottom
local sflagbottom
if self.predecessornums[i] then
if self:universalarg('flag_p'..self.predecessornums[i]) and (self:universalarg('flag_p'..self.predecessornums[i])~=nil) then
pflagbottom = self.frame:preprocess('[[Файл:'..self:universalarg('flag_p'..self.predecessornums[i])..'|border|20px|link='..self:universalarg('p'..self.predecessornums[i])..']]')
elseif self:universalarg('image_p'..self.predecessornums[i]) and (self:universalarg('image_p'..self.predecessornums[i])~=nil) then
pflagbottom = self:universalarg('image_p'..self.predecessornums[i]) else
pflagbottom = '[[Файл:Blank.png|20px|border]]'
end
predecessor = self:universalarg('p'..self.predecessornums[i])~=nil and (pflagbottom..' '..self.frame:preprocess('[['..self:universalarg('p'..self.predecessornums[i])..']]')) or ''
else
predecessor = ''
end
if self.successornums[i] then
if self:universalarg('flag_s'..self.successornums[i]) and (self:universalarg('flag_s'..self.successornums[i])~=nil) then
sflagbottom = self.frame:preprocess('[[Файл:'..self:universalarg('flag_s'..self.successornums[i])..'|border|20px|link='..self:universalarg('s'..self.successornums[i])..']]')
elseif self:universalarg('image_s'..self.successornums[i]) and (self:universalarg('image_s'..self.successornums[i])~=nil) then
sflagbottom = self:universalarg('image_s'..self.successornums[i]) else
sflagbottom = '[[Файл:Blank.png|20px|border]]'
end
successor = self:universalarg('s'..self.successornums[i])~=nil and (sflagbottom..' '..self.frame:preprocess('[['..self:universalarg('s'..self.successornums[i])..']]')) or ''
else
successor = ''
end
builder:tag('tr')
:tag('td')
:cssText('border:0; padding:0; vertical-align:middle; text-align:left')
:css('padding-left','.5em')
:attr('width','50%')
:wikitext(predecessor)
:done()
:tag('td')
:cssText('border:0; padding:0; vertical-align:middle; text-align:left')
:attr('width','50%')
:wikitext(successor)
end
end
if math.max(table.count(do_args),table.count(posle_args))>0 then
for i=1,math.max(table.count(do_args),table.count(posle_args)) do
builder=builder:tag('tr')
:tag('td')
:cssText('border:0; padding:0; vertical-align:middle')
:attr('width','50%')
:wikitext(do_args[i]~=nil and (self:universalargs('д'..do_args[i]) or '') or '')
:done()
:tag('td')
:cssText('border:0; padding:0; vertical-align:middle')
:attr('width','50%')
:wikitext(posle_args[i]~=nil and (self:universalargs('п'..posle_args[i]) or '') or '')
end
end
end
end
function IBC:render(former)
local builder = mw.html.create('')
--[[ :tag('table')
:addClass('infobox')
:css('width','300px')
:css('border-collapse','collapse')
:attr('data-name', former~=true and 'Государство' or 'Историческое государство')
]]--
self:statename(builder)
local hasstatusfield, extrastatus
hasstatusfield, extrastatus = false, false
if not former then
extrastatus=self:IsContestedOrVirtual()
end
if (former==true) or (extrastatus==true) then
hasstatusfield = true
end
if hasstatusfield == true then
self:renderstatusrow(builder,former)
end
if former==true then
self:lifespan(builder:tag('tr'):tag('th'):attr('colspan',2):cssText('vertical-align:middle; text-align:center; border:solid #aaa; border-width:1px 0; padding:.2em 0; background:#EFEFEF'))
end
local hasflagandarms = self:hassymbols(former)
if hasflagandarms==true then
self:renderflagandarms(builder:tag('tr'):tag('td'):attr('align','center'):attr('colspan',2):attr('width','100%'),former)
end
if self:universalargs('девиз') then
self:renderMotto(builder)
end
local hasanthem = self:hasanthem(former)
if hasanthem==true then
self:renderanthem(builder,former)
end
local maps = self:getMultiprefixArgs({'карта','на карте'},2) or {}
if (tostring(self:wikidata({'p242',(self:universalargs('карта') or self:universalargs('на карте') or ''),plain='true'}))~='') or table.count(maps)~=0 then
self:rendermaps(builder,maps)
end
if former==false then
self:renderfoundations(builder)
self:renderstages(builder,former)
end
if tostring(self:wikidata({'p37',(self:universalargs('язык') or self:universalargs('языки')),plain='true'}))~='' then
self:rendersimplerow(builder,(former~=true and ('[[Официальный язык|'..(self:universalargs('языки')~=nil and 'Официальные языки' or 'Официальный язык')..']]') or 'Язык(и)'),self:wikidata({'p37',(self:universalargs('языки') or self:universalargs('язык'))}))
end
if tostring(self:wikidata({'p36',self:universalargs('столица')}))~='' then
self:rendersimplerow(builder,'[[Столица]]',(self:wikidata({'p36',self:universalargs('столица')})))
end
if self:universalargs('города') or self:universalargs('крупнейший город') or self:universalargs('крупнейшие города') then
self:rendersimplerow(builder,(self:universalargs('крупнейший город')~=nil and 'Крупнейший город' or 'Крупнейшие города'),(self:universalargs('крупнейший город') or self:universalargs('города') or self:universalargs('крупнейшие города')))
end
if tostring(self:wikidata({'p122',(self:universalargs('форма_правления') or self:universalargs('форма правления')),plain=true}))~='' then
self:rendersimplerow(builder,'[[Форма государственного правления|Форма правления]]',self:wikidata({'p122',(self:universalargs('форма_правления') or self:universalargs('форма правления'))}))
end
if self:universalargs('династия') then
self:rendersimplerow(builder,'Династия',self:universalargs('династия'))
end
self.leadernums=self:getMultiprefixArgs({'руководитель','правитель'})
if self:universalargs('руководители') or self:universalargs('правители') or (table.count(self.leadernums)>0) then
self:renderleaderarray(builder,former)
end
if former==true then
if self:universalargs('религия') then
self:rendersimplerow(builder,'Религия',self:universalargs('религия'))
end
else
if self:universalargs('государственная религия') then
self:rendersimplerow(builder,'[[Государственная религия|Госрелигия]]',self:universalargs('государственная религия'))
end
end
self.territoryargs = self:getMultiprefixArgs({'территория','площадь'},2) or {}
if tostring(self:wikidata({'p2046',self:universalargs({'территория','площадь'}),plain=true}))~='' or (table.count(self.territoryargs)>0) then
self:renderterritory(builder,former)
end
if tostring(self:wikidata({'p2046',self:universalargs('население','население по переписи')}))~='' then
self:renderpopulation(builder,former)
end
self.gdpppp=tostring(self:wikidata({'p4010',self.args['ВВП (ППС)'], plain='true'}))~='' and self:wikidata({'p4010',self.args['ВВП (ППС)']}) or nil
self.gdppnominal=tostring(self:wikidata({'p2131',self.args['ВВП (номинал)'], plain='true'}))~='' and self:wikidata({'p2131',self.args['ВВП (номинал)']}) or nil
self.ppppc=tostring(self:wikidata({'p2299',self.args['ВВП (ППС) на душу населения'],plain='true'}))~='' and self:wikidata({'p2299',self.args['ВВП (ППС) на душу населения']}) or nil
self.nominalpc=tostring(self:wikidata({'p2132',self.args['ВВП (номинал) на душу населения'],plain='true'}))~='' and self:wikidata({'p2132',self.args['ВВП (номинал) на душу населения']}) or nil
self.popnums=self:getArgNums('население',2) or ''
if (self.gdp and (self.gdp~=nil)) or (self.gdpppp and (self.gdpppp~=nil)) or (self.gdppnominal and (self.gdppnominal~=nil)) then
self:renderGDP(builder,former)
end
if self.args['ИРЧП'] then
self:rendersimplerow(builder,'[[Индекс человеческого развития|ИЧР]]'..(self:universalarg('год расчёта ИРЧП')~=nil and (' ('..self:universalarg('год расчёта ИРЧП')..')') or ''),self.args['ИРЧП']..(self:universalarg('уровень ИРЧП')~=nil and (' ('..self:universalarg('уровень ИРЧП')) or '')..(self:universalarg('место по ИРЧП')~=nil and ('; [[Список стран по индексу человеческого развития|'..self:universalarg('место по ИРЧП')..'-е место]]')..(self:universalarg('уровень ИРЧП')~=nil and ')' or '')))
end
if self:universalargs('этнохороним') then
self:rendersimplerow(builder,'[[Названия жителей]]',self:universalargs('этнохороним'))
end
if tostring(self:wikidata({'p38',self:universalarg('валюта'),plain='true'}))~='' then
self:rendersimplerow(builder,'[[Валюта]]',self:wikidata({'p38',self:universalarg('валюта')}))
end
if tostring(self:wikidata({'p78',self:universalargs({'домены','домен'}),plain='true'}))~='' then
self:rendersimplerow(builder,'[[Домен верхнего уровня|Интернет-домен'..(self:universalarg('домены')~=nil and 'ы' or '')..']]',self:wikidata({'p78',self:universalargs({'домены','домен'})}))
end
if tostring(self.frame:preprocess('{{#property:p297}}'))~='' then
self:rendersimplerow(builder,'[[ISO 3166-1|Код ISO]]',self.frame:preprocess('{{#property:p297}}'))
end
if tostring(self.frame:preprocess('{{#property:p984}}'))~='' then
self:rendersimplerow(builder,'[[Список кодов МОК|Код МОК]]',self.frame:preprocess('{{#property:p984}}'))
end
if tostring(self:wikidata({'p474',self:universalarg('телефонный код'),plain='true'}))~='' then
self:rendersimplerow(builder,'[[Список телефонных кодов стран|Телефонный код]]',self:universalarg('телефонный код')~=nil and ('+'..self:universalarg('телефонный код')) or self:wikidata({'p474'}))
end
if tostring(self:wikidata({'p421',self:universalargs({'часовые пояса','часовой пояс'}),plain='true'}))~='' then
self:rendersimplerow(builder,'[[Часовой пояс'..(tostring(self:wikidata({'p421','часовые пояса'}))~='' and '|Часовые пояса' or '')..']]',self:wikidata({'p421',self:universalargs({'часовые пояса','часовой пояс'})}))
end
local addparam = {}
addparam = self:getMultiprefixArgs({'содержимое_параметра','содержимое параметра'})
if table.count(addparam)>0 then
for k,v in pairs(addparam) do
self:rendersimplerow(builder,(self:universalargs({'дополнительный параметр'..v,'дополнительный_параметр'..v}) or ''),(self:universalargs({'содержимое_параметра'..v,'содержимое параметра'..v}) or ''))
end
end
if former==true then
self:renderstages(builder,former)
self:rendersuccessionbottom(builder)
end
return builder
end
function IBC.new(frame, args)
if not args then
args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:Государство', 'Template:Историческое государство','Участник:Seryo93/Историческое государство'}})
--return
end
local obj = {
frame = frame,
args = args,
predecessornums = {},
successornums = {},
leadernums = {},
territoryargs = {},
popnums = {},
gdp=args['ВВП'] or nil,
percapita=args['ВВП на душу населения'],
gdpppp = nil,
gdppnominal = nil,
ppppc = nil,
nominalpc= nil,
}
return setmetatable(obj, IBC)
end
local p = {}
function p.main(frame)
return IBC.new(frame):render(false)
end
function p.mainFormer(frame)
return IBC.new(frame):render(true)
end
return p