require('strict')
local limitedtoregs
local IRHCats = {}
IRHCats.__index = IRHCats
local IRHconfig = require('Module:Культурное наследие народов РФ/config')
function table.contains(table, element)
for _, value in pairs(table) do
if value == element then
return true
end
end
return false
end
function table.count(tab)
local Count
Count = 0
for Index, Value in pairs( tab ) do
Count = Count + 1
end
return Count
end
local regins = {}
local munins = {}
local CrimeaMunicipalities = {} -- проверка для крымских городов, сами РК и Севастополь проверяются по IRHconfig.reginsdisp
-- сбор всех данных по категориям
local function geninstringreg(key,str,hide)
if hide==true then return '' else
local buildo = mw.html.create('ul')
:css('font-size','85%')
if IRHconfig.statuscats and (type(IRHconfig.statuscats)=='table') then
for k,v in pairs(IRHconfig.statuscats) do
if (type(v)=='table') and ((v[1]~=nil) and (type(v[1]=='string'))) then
buildo=buildo:tag('li'):wikitext('[[:Category:'..v[1]..' объекты культурного наследия '..str..'|'..v[1]..' объекты культурного наследия '..str..']]'):done()
end
end
end
buildo = buildo:allDone()
return tostring(buildo)
end
end
function IRHCats:regcats()
local regcatstmp = {}
for _,v in ipairs(IRHconfig.fdlist) do
for k,cpyk in pairs((require('Module:Культурное наследие народов РФ/config/'..v).Reg()).regins) do
regcatstmp[k]=cpyk
end
end
return regcatstmp
end
local function muncats()
--unload all modules
--[[for _,v in ipairs(IRHconfig.fdlist) do
package.loaded['Module:Культурное наследие народов РФ/config/'..v]=nil
package.loaders['Module:Культурное наследие народов РФ/config/'..v]=nil
end]]
local muncatstmp = {}
local muncatstmpavali = {}
for _,v in ipairs(IRHconfig.fdlist) do
for b,r in pairs(IRHconfig.feddistr[v]) do
local regtowrite = require(tostring('Module:Культурное наследие народов РФ/config/'..v)).Mun(r) or nil
if regtowrite~=nil then
muncatstmpavali[r]=regtowrite
end
end
end
local muninstmp = {}
for k,v in pairs(muncatstmpavali) do
muninstmp[k]=v['munins']
end
for k,v in pairs(muninstmp) do
for a,b in pairs(v) do
muncatstmp[a]=b
if table.contains(IRHconfig.reginsdisp,k) then
CrimeaMunicipalities[a]=b
end
end
end
return muncatstmp
end
function IRHCats:render()
regins = self:regcats()
munins = muncats()
local builder = mw.html.create()
builder = builder:tag('table')
:addClass('wikitable')
:tag('caption')
:wikitext((limitedtoregs==true and 'Базовые категории ' or 'Категории ')..'[[Объект культурного наследия России|ОКН]] по регионам и городам России')
:done()
:tag('tr')
:tag('th')
:attr('width','50%')
:wikitext('По регионам')
:done()
:tag('th')
:attr('width','50%')
:wikitext('По городам (кроме [[Город федерального значения|ГФЗ]])')
:done():done()
:tag('tr')
:tag('td')
:attr('width','50%')
:css('vertical-align','top')
:tag('div')
:css('width','100%')
:css('max-height','200px')
:css('overflow','hidden')
:css('overflow-y','scroll')
:tag('ul')
for k,v in pairs(regins) do
builder=builder:tag('li'):wikitext('[[:Category:Объекты культурного наследия'..(table.contains(IRHconfig.reginsdisp,k)==false and ' России ' or ' ')..v..'|Объекты культурного наследия'..(table.contains(IRHconfig.reginsdisp,k)==false and ' России ' or ' ')..v..']]'..geninstringreg(k,v,limitedtoregs)):done()
end
builder=builder:done():done():done()
:tag('td')
:attr('width','50%')
:css('vertical-align','top')
:tag('div')
:css('width','100%')
:css('max-height','200px')
:css('overflow','hidden')
:css('overflow-y','scroll')
:tag('ul')
for k,v in pairs(munins) do
builder=builder:tag('li'):wikitext('[[:Category:Объекты культурного наследия'..((not CrimeaMunicipalities[k]) and ' России ' or ' ')..tostring(v)..'|Объекты культурного наследия'..((not CrimeaMunicipalities[k]) and ' России ' or ' ')..tostring(v)..']]'..geninstringreg(k,v,limitedtoregs)):done()
end
builder=builder:allDone()
return builder
end
function IRHCats.new(frame, args)
if not args then
args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:Культурное наследие народов РФ', 'Template:Культурное наследие народов РФ/doc','Template:Культурное наследие народов РФ/catlist'}})
--return
end
local obj = {
frame = frame,
args = args
}
return setmetatable(obj, IRHCats)
end
local p = {}
function p.main(frame)
limitedtoregs = false
return IRHCats.new(frame):render()
end
function p.mainReg(frame)
limitedtoregs = true
return IRHCats.new(frame):render()
end
return p