Модуль:TerritorialDivision

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Игорь Темиров (обсуждение | вклад) в 14:28, 11 октября 2016 (Продолжение работы). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
Документация
local p = {}

local function Declension(collocation, case)
	    --NameDistrictGenitive= Declension(NameDistrict, Genitive)
	local str = string.match(collocation, "([^\(]+)")
	if string.match(collocation, "ий район") then
		return string.gsub( collocation, "ий район", "ого района" )
	elseif string.match(collocation, "ая автономная область") then
		return string.gsub( collocation, "ая автономная область", "ой автономной области" )
	end
end

function p.MakeMunicipality(frame)
    local args = frame:getParent().args
	
    local CallSite = mw.wikibase.getEntityObject() or mw.wikibase.getEntityObject(string.match( args[1], "Q%d+")) 
    local District

	if CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2198484" then 
		District = CallSite
	elseif (CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099") or
		(CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2661988") then 
		District = mw.wikibase.getEntityObject( CallSite.claims.P131 and CallSite.claims.P131[1].mainsnak.datavalue.value['id'] )
	else
		do return "Неизвестный тип поселения. Сообщите, пожалуйста, на страницу обсуждения шаблона" end
    end
    if District == nill then do return "Не удалось получить свойства района из викидаты" end end

    DistrictName = District:getSitelink() or District:getLabel()
	
	local Colour   = args['цвет'] or "{{Цвет|Россия}}"
	local Titul    = args['заглавие'] or "Муниципальные образования [[" .. DistrictName .. "|" ..  Declension(DistrictName, Genitive) .. "]]"
	local State    = args['state'] or (#District.claims.P150 > 20 and "<includeonly>collapsed</includeonly>")
	local Picture  = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|60px]]")
	local Picture2 = args['изображение2'] or (District.claims.P41 and "[[Файл:" .. District.claims.P41[1].mainsnak.datavalue['value'] .. "|80px|border]]") 

	local Mystr=""
	local GorodMO={}
	local SeloMO={}
	
	for c, claim in pairs( District.claims.P150 ) do
		if ( claim['rank'] ~= "deprecated" and claim.mainsnak.datavalue.value['id'] ) then
			local childQ = claim.mainsnak.datavalue.value['id']
		    local Child = mw.wikibase.getEntityObject( childQ )
		    if Child.claims.P31 and Child.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099" then 
		    	table.insert (SeloMO, Child:getSitelink()  or Child:getLabel())
		    elseif Child.claims.P31 and Child.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2661988" then 
		    	table.insert (GorodMO, Child:getSitelink()  or Child:getLabel())
		    else
		    	do return "Неизвестный тип поселения" end
		    end
		end
	end

	table.sort(GorodMO)
	Gorodstr=""
	for key, val in pairs(GorodMO) do
   		Gorodstr=Gorodstr .. "{{s|[[" .. val .. "|" .. string.match(val, "([^\(]+)") .. "]]{{•}}}}" 
	end	
	if Gorodstr ~= "" then Gorodstr = string.gsub( Gorodstr, "{{•}}}}$", "}}") end

	table.sort(SeloMO)
	SeloStr=""
	for key, val in pairs(SeloMO) do
   		SeloStr=SeloStr .. "{{s|[[" .. val .. "|" .. string.match(val, "([^\(]+)") .. "]]{{•}}}}" 
	end	
	if SeloStr ~= "" then SeloStr = string.gsub( SeloStr, "{{•}}}}$", "}}") end

	Mystr=Gorodstr
	if Gorodstr ~= "" and SeloStr ~= "" then Mystr = Mystr .. "<br>" end
	Mystr = Mystr .. SeloStr
	Mystr=""
	local frameStr = "{{навигационная полоса"	
	frameStr = frameStr .. "|имя = Муниципальные образования"
	frameStr = frameStr .. "|цвет = " .. Colour
	frameStr = frameStr .. "|заглавие = " .. Titul
	if State then frameStr = frameStr .. "|state = " .. State end
	if Picture then frameStr = frameStr .. "|изображение = " .. Picture end
	if Picture2 then frameStr = frameStr .. "|изображение2 = " .. Picture2 end
	frameStr = frameStr .. "|содержание = " .. Mystr
	frameStr = frameStr .. "}}" --<noinclude>[[Категория:Шаблоны:Административное деление субъектов Российской Федерации|*]]</noinclude>"

	return frame:preprocess( frameStr ) 
end
-- ================================================================================================================================
function p.MakeSettlements (frame)
    local args = frame:getParent().args

    local CallSite = mw.wikibase.getEntityObject() or mw.wikibase.getEntityObject(string.match( args[1], "Q%d+")) 
    local District

	if CallSite.claims.P31 and CallSite.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2198484" then 
		District = CallSite
	else
		Parent = mw.wikibase.getEntityObject( CallSite.claims.P131 and CallSite.claims.P131[1].mainsnak.datavalue.value['id'] )
		District = mw.wikibase.getEntityObject( Parent.claims.P131 and Parent.claims.P131[1].mainsnak.datavalue.value['id'] )
		if District.claims.P31 and District.claims.P31[1].mainsnak.datavalue.value['id'] ~= "Q2198484" then District = nil end
    end
    if District == nill then do return "Не удалось получить свойства района из викидаты" end end

    DistrictName = District:getSitelink() or District:getLabel()
    AdmCenterQ = District.claims.P36 and District.claims.P36[1].mainsnak.datavalue.value['id']
	AdmCenter = mw.wikibase.getEntityObject( AdmCenterQ )
	AdmCenterName = AdmCenter:getSitelink() or AdmCenter:getLabel()
	
	local Colour   = args['цвет'] or "{{Цвет|Россия}}"
	local Titul    = args['заглавие'] or "Населённые пункты [[" .. DistrictName .. "|" ..  Declension(DistrictName, Genitive) .. "]]"
	local State    = args['state'] or (#District.claims.P150 > 20 and "<includeonly>collapsed</includeonly>")
	local Picture  = args['изображение'] or (District.claims.P94 and "[[Файл:" .. District.claims.P94[1].mainsnak.datavalue['value'] .. "|60px]]")
	local Picture2 = args['изображение2'] or (District.claims.P41 and "[[Файл:" .. District.claims.P41[1].mainsnak.datavalue['value'] .. "|80px|border]]") 

	local Mystr=""
	local GorodMO={}
	local SeloMO={}

	Mystr="Районный центр: " .. AdmCenterName
	
	for d, DistrictClaim in pairs( District.claims.P150 ) do
		if ( DistrictClaim['rank'] ~= "deprecated" and DistrictClaim.mainsnak.datavalue.value['id'] ) then
			local MunicipalityQ = DistrictClaim.mainsnak.datavalue.value['id']
		    local Municipality = mw.wikibase.getEntityObject( MunicipalityQ )
			for m, MunicipalityClaim in pairs( Municipality.claims.P150 ) do
				if ( MunicipalityClaim['rank'] ~= "deprecated" and MunicipalityClaim.mainsnak.datavalue.value['id'] ) then
					local SettlementQ = MunicipalityClaim.mainsnak.datavalue.value['id']
				    local Settlement = mw.wikibase.getEntityObject( SettlementQ )
				    TypeNP=Settlement
				    if Settlement.claims.P31 and Settlement.claims.P31[1].mainsnak.datavalue.value['id'] == "Q634099" then 
				    	table.insert (SeloMO, Settlement:getSitelink()  or Settlement:getLabel())
				    elseif Settlement.claims.P31 and Settlement.claims.P31[1].mainsnak.datavalue.value['id'] == "Q2661988" then 
				    	table.insert (GorodMO, Settlement:getSitelink()  or Settlement:getLabel())
				    else
				    	do return "Неизвестный тип населённого пункта" end
				    end
				end
			end
		end
	end

	table.sort(GorodMO)
	Gorodstr=""
	for key, val in pairs(GorodMO) do
   		Gorodstr=Gorodstr .. "{{s|[[" .. val .. "|" .. string.match(val, "([^\(]+)") .. "]]{{•}}}}" 
	end	
	if Gorodstr ~= "" then Gorodstr = string.gsub( Gorodstr, "{{•}}}}$", "}}") end

	table.sort(SeloMO)
	SeloStr=""
	for key, val in pairs(SeloMO) do
   		SeloStr=SeloStr .. "{{s|[[" .. val .. "|" .. string.match(val, "([^\(]+)") .. "]]{{•}}}}" 
	end	
	if SeloStr ~= "" then SeloStr = string.gsub( SeloStr, "{{•}}}}$", "}}") end

	--do return Gorodstr end
	if Gorodstr ~= "" and SeloStr ~= "" then Mystr = Mystr .. "<br>" end
	Mystr = Mystr .. SeloStr
	
	local frameStr = "{{навигационная полоса"	
	frameStr = frameStr .. "|имя = Муниципальные образования"
	frameStr = frameStr .. "|цвет = " .. Colour
	frameStr = frameStr .. "|заглавие = " .. Titul
	if State then frameStr = frameStr .. "|state = " .. State end
	if Picture then frameStr = frameStr .. "|изображение = " .. Picture end
	if Picture2 then frameStr = frameStr .. "|изображение2 = " .. Picture2 end
	frameStr = frameStr .. "|содержание = " .. Mystr
	frameStr = frameStr .. "}}<noinclude>[[Категория:Шаблоны:Административное деление субъектов Российской Федерации|*]]</noinclude>"

	return frame:preprocess( frameStr ) 
end

return p