Модуль:Виборчий округ України

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[створити]
local p = {}

function adress(st)
	p = mw.text.split(st.qualifiers.P6375[1].datavalue.value.text, ", ");
	np = mw.text.split(p[2], " ");
	cap_item = mw.wikibase.getEntity(st.mainsnak.datavalue.value.id);
	np_title = cap_item.sitelinks.ukwiki.title;
	if np_title~=np[2] then np[2] = "[["..np_title.."|"..np[2].."]]"; 
	else np[2] = "[["..np[2].."]]"; end
	if(st.qualifiers.P669) then
		street_item = mw.wikibase.getEntity(st.qualifiers.P669[1].datavalue.value.id);
		p[3] = "[["..street_item.sitelinks.ukwiki.title.."|"..p[3].."]]";
	end
	return p[1]..", "..np[1].." "..np[2]..", <br/>"..p[3]..", "..p[4];
end

function mp(st, oc)
	if(oc and (oc[1].mainsnak.datavalue.value.id=="Q19684249" or oc[1].mainsnak.datavalue.value.id=="Q20094029")) then return "немає"; end
	mp_link = mw.wikibase.getEntity(st.mainsnak.datavalue.value.id).sitelinks.ukwiki.title;
	if(string.match(mp_link, " %(")) then mp_link = mp_link.."|"..mw.text.split(mp_link, " %(")[1] end
	if(st.qualifiers["P102"][1].snaktype=="novalue") then party_link = "самовисуванець";
	else
		party_item = mw.wikibase.getEntity(st.qualifiers["P102"][1].datavalue.value.id);
		if(party_item.sitelinks and party_item.sitelinks.ukwiki) then
			party_link = party_item.sitelinks.ukwiki.title;
			if(string.match(party_link, " %(")) then party_link = party_link.."|"..mw.text.split(party_link, " %(")[1] end
			party_link = "[["..party_link.."]]";
		else party_link = party_item.labels.uk.value end
	end
	mp_time = mw.text.split(mw.text.split(string.gsub(st.qualifiers["P580"][1].datavalue.value.time, "+", ""), "T")[1], "-");
	months = {"січня", "лютого", "березня", "квітня", "травня", "червня", "липня", "серпня", "вересня", "жовтня", "листопада", "грудня"};
	return "[["..mp_link.."]] ("..party_link..", з "..string.format("%u", mp_time[3]).."&nbsp;"..months[tonumber(mp_time[2])].."&nbsp;"..mp_time[1]..")";
end

function p.main(frame)
	parent = frame:getParent();
	args = parent.args;

	regions_abbr = {
		["Q756294"]="АРК", ["Q166709"]="Вн", ["Q167859"]="Вл", ["Q170672"]="Днп", ["Q2012050"]="Днц", 
		["Q40637"]="Жт", ["Q170213"]="Зк", ["Q171334"]="Зп", ["Q178269"]="ІФ", ["Q1899"]="Квм", 
		["Q170036"]="Кв", ["Q180981"]="Крв", ["Q171965"]="Лг", ["Q164193"]="Лв", ["Q181633"]="Мк", 
		["Q171852"]="Од", ["Q169501"]="Пл", ["Q174187"]="Рв", ["Q7525"]="Сев", ["Q170446"]="См", 
		["Q173407"]="Тр", ["Q170666"]="Хрк", ["Q163271"]="Хрс", ["Q171331"]="Хм", ["Q161808"]="Чрк", 
		["Q168856"]="Чрв", ["Q167874"]="Чрн"
	};
	label = '\n|-\n| style="text-align:right; background:#ddd; width:120px;" | ';
	data  = '\n| style="background:#eee" | ';

	item = mw.wikibase.getEntity(mw.wikibase.getEntityIdForCurrentPage());
	if(not item) then return "[[Категорія:Сторінки з помилками скриптів]]"; end

	ovk_coord = item:getBestStatements('P36')[1].qualifiers.P625[1].datavalue.value;
	dist_coord = item:getBestStatements('P625')[1].mainsnak.datavalue.value;
	region = item:getBestStatements('P131')[1].mainsnak.datavalue.value.id;
	locator = item:getBestStatements('P242')[1].mainsnak.datavalue.value;
	num = tonumber(item:getBestStatements('P1545')[1].mainsnak.datavalue.value);
	if(num<10) then num_prefix = "0"; else num_prefix = ""; end
	if(not args["zoom"]) then args["zoom"] = 9; end

	n = tonumber(num);
	if(item.claims['P361']) then 
		partof = item:getBestStatements('P361')[1].mainsnak.datavalue.value.id;
		partof_qual = item:getBestStatements('P361')[1].qualifiers;
	else partof = ""; end
	occ_pref = {'|-\n| style="text-align:center;color:white;background-color:', '" colspan="2" | '};

	if(partof=="Q20094029") then occupied = occ_pref[1].."#f44"..occ_pref[2].."Перебуває під окупацією РФ\n";
	elseif(partof=="Q19684249") then
		if(region=="Q2012050") then w = "Д"; else w = "Л"; end
		if(partof_qual and partof_qual["P518"]) then h="Частково"; c="#f94"; else h="Повністю"; c="#f44"; end
		occupied = occ_pref[1]..c..occ_pref[2]..h.." перебуває під контролем "..w.."НР\n";
	else occupied = ""; end

	area = "";
	if(#item:getBestStatements('P2046') > 0) then
		area = label .. "'''Площа:'''" .. data .. 
		  string.gsub(item:getBestStatements('P2046')[1].mainsnak.datavalue.value.amount, "+", "") .. 
		  ' км<sup>2</sup>';
	end
	
	res = {'{| class="infobox" style="width:300px; font-size:90%;"\n', 
		'|- style="font-size:140%; text-align:center; background-color:#cde"\n', 
		'| colspan="2" | ', "'''Виборчий округ №", num, "'''\n", occupied, 
		'|-\n', '| style="text-align:center" colspan="2" | ', '[[Файл:', locator,
		'|lang=d', num_prefix, num, '|260x290px]]', 
		label, "'''Регіон:'''", data, '{{', regions_abbr[region], '}}', 
		label, "'''Кіл-ть виборців:'''", data, 
		'{{formatnum:', string.gsub(item.claims['P1867'][#item.claims['P1867']].mainsnak.datavalue.value.amount, "+", ""), '}}', 
		label, "'''Кіл-ть дільниць:'''", data, 
		'{{formatnum:', string.gsub(item.claims['P6753'][#item.claims['P6753']].mainsnak.datavalue.value.amount, "+", ""), '}}', area, 
		label, "'''Адреса ОВК:'''", data, adress(item:getBestStatements('P36')[1]), '\n', 
		label, "'''Чинний<br/>мажоритарник:'''", data, mp(item.claims["P1268"][#item.claims["P1268"]], item.claims["P361"]), '\n', 
		'|-\n', '| colspan="2" | ', 
		'<mapframe width=290 height=290 zoom=', args["zoom"], ' longitude=', dist_coord.longitude, ' latitude=', dist_coord.latitude, ' align=center>', 
		'[{"type":"ExternalData", "service":"page", "title":"Ukrainian electoral district ', num, '.map", "properties":{"fill-opacity":0.3}}, ', 
		'{"type":"Feature", "properties":{"title":"ОВК №', num, '", "marker-symbol":"polling-place", "marker-color":"048"}, ', 
		'"geometry":{"type":"Point", "coordinates":[', ovk_coord.longitude, ', ', ovk_coord.latitude, ']}} ]', 
		'</mapframe>\n', 
		'|-\n', '| style="text-align:center; background-color:#cde" colspan="2" | [', 
		item:getBestStatements('P856')[1].mainsnak.datavalue.value, ' Округ №', num, ' на сайті ДРВ', ']\n|}'
	};

	return frame:preprocess(table.concat(res));
end

return p;