Модуль:Карта

Матеріал з Аккерманіка

Документацію для цього модуля можна створити у Модуль:Карта/документація

--отримати текст виду <mapframe width=300 height=300 zoom=4 longitude=30 latitude=50 align=center frameless>{"type": "ExternalData","service": "geoshape","ids": "Q170036"}</mapframe> для вставки в шаблони-картки
local p = {}

--функція яка перевіряє чи присутнє певне значення в масиві
function value_in_array(tab, value)
	for _ , v in ipairs(tab) do
		if(v == value) then return true; end
	end
	return false
end

--функція яка перевіряє чи не є текстовий рядок порожнім (розміром 0 або значення nil) 
function is_not_empty(var)
	if(var) then
		if(string.len(var)>0) then return true; else return false; end
	else return false;
	end
end

function p.main(frame)
	--отримуємо аргументи, передані до шаблону
	parent = frame:getParent();
	args = parent.args;

	--при помилці буде повертатись таке значення
	errormessage = "[[Категорія:Сторінки із некоректними мапами]]";
	--шаблони, що використовують цей модуль, будуть включатись до спеціальної категорії

	--змінні для збереження значень аргументів, або за їх відсутності, значень за замовчуванням
	width = 300; height = 300; frameless = " frameless"; text = ""; geojson = ""; align = "center";


	--перевіряємо чи присутні аргументи ширини і висоти мапи, якщо ні, то залишаємо значення за замовчуванням
	if(is_not_empty(args["ширина"])) then width = args["ширина"]; end
	if(is_not_empty(args["висота"])) then height = args["висота"]; end

	--перевіряємо чи присутні аргументи широти (північ-південь) та довготи (захід-схід), якщо ні, то пізніше їх отримаємо з Вікіданих
	if(is_not_empty(args["широта"]) and is_not_empty(args["довгота"])) then latitude = args["широта"]; longitude = args["довгота"]; end

	--перевіряємо чи присутній аргумент масштабу, якщо ні, то пізніше отримаємо з Вікіданих
	if(is_not_empty(args["масштаб"])) then zoom = args["масштаб"]; end

	--перевіряємо інші аргументи
	if(is_not_empty(args["рамка"])) then frameless = ""; end
	if(is_not_empty(args["текст"])) then text = args["текст"]; end
	if(is_not_empty(args["geojson"])) then geojson = args["geojson"]; end

	if(is_not_empty(args["вирівнювання"])) then align = args["вирівнювання"]; end
	geo = "geoshape";
	if(is_not_empty(args["geo"])) then geo = args["geo"]; end
	if(is_not_empty(args["geoshape"])) then geo = "geoshape"; end

	--якщо координати та масштаб визначені, повертаємо текстовий рядок з результатом
	if(latitude and longitude and zoom) then
		--якщо аргумент "текст" було задано, заміняємо в ньому лапки на html-коди
		if(text~="") then
			text = string.gsub(text, '"', "&quot;");
			text = string.gsub(text, "'", "&#39;")
			text = ' text="' .. text .. '"';
		end
		--записуємо всі необхідні змінні в таблицю, об'єднуємо її в текстовий рядок, який повертаємо як результат
		if(is_not_empty(args["контур"])) then shape = {'page","title": "', args["контур"]}; end --нас цікавить саме об'єкт, а не оточення - geoshape"
		--можна задавати текст, який відображатиметься перед та після шаблону, якщо шаблон відображається
		--якщо шаблон не відображається, то і цей текст не відображатиметься
		--якщо префікс та постфкс не задані, присвоюємо їм порожнй рядок, щоб вони не мали значення nil
		if(not is_not_empty(args["префікс"])) then args["префікс"] = ""; end
		if(not is_not_empty(args["постфікс"])) then args["постфікс"] = ""; end
		if(not is_not_empty(args["додатково"])) then args["додатково"] = ""; end
		res = {"<mapframe width=", width, " height=", height, " zoom=", zoom, " latitude=", latitude, " longitude=", longitude, ">", geojson, "</mapframe>"};
		return frame:preprocess(table.concat(res));
		end;
end

return p;