Модуль:Культурное наследие народов РФ/Поиск категорий

Документация
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