შინაარსზე გადასვლა

მოდული:WikidataCoords

მასალა ვიკიპედიიდან — თავისუფალი ენციკლოპედია

შეგიძლიათ შექმნათ დოკუმენტაცია ამ მოდულისათვის: მოდული:WikidataCoords/ინფო

local p = {};

-- Значения аргументов по умолчанию
local defaultArgs = {
	['lat_deg'] = '',
	['lat_min'] = '0',
	['lat_sec'] = '0',
	['lat_dir'] = 'N',
	['lon_deg'] = '0',
	['lon_min'] = '0',
	['lon_sec'] = '0',
	['lon_dir'] = 'E'
};

-- Соотношение именованных и числовых параметров
local argsMap = {
	'lat_deg',
	'lat_min',
	'lat_sec',
	'lat_dir',
	'lon_deg',
	'lon_min',
	'lon_sec',
	'lon_dir'
};

-- Метод вызывает шаблон, добавляя к параметрам координаты из Викиданных
function p.execTplWithCoords( frame )
	local moduleWikidata = require( 'Module:Wikidata' );

	local pFrame = frame:getParent();
	local args = mw.clone( pFrame.args );
	setmetatable( args, nil );

	local template = mw.text.trim( args[1] );
	args[1] = nil;

	if not args.lat_deg or args.lat_deg == '' then
		-- Получение координат из Викиданных
		frame.args = {
			['property'] = 'p625',
			['plain'] = true
		};
		local coords = moduleWikidata.formatProperty( frame );
		coords = string.gsub( coords, ''', '\'' );
		coords = string.gsub( coords, '"', '"' );

		-- Преобразование координат в значения отдельных параметров
		coords = mw.text.split( coords, ', ', true );
		local lat = coords[1];
		local lon = coords[2];
		if lat and lat ~= '' then
			args.lat_deg = string.match( lat, '%d+°' );
			args.lat_min = string.match( lat, '%d+\'' );
			args.lat_sec = string.match( lat, '[0-9%.]+"' );
			args.lat_dir = string.match( lat, '[NS]' );
		end
		if lon and lon ~= '' then
			args.lon_deg = string.match( lon, '%d+°' );
			args.lon_min = string.match( lon, '%d+\'' );
			args.lon_sec = string.match( lon, '[0-9%.]+"' );
			args.lon_dir = string.match( lon, '[EW]' );
		end
	end

	-- Установка значений по умолчанию
	for name, value in pairs( defaultArgs ) do
	    if not args[name] or args[name] == '' then
	    	args[name] = value;
	    end
    	args[name] = mw.text.trim( args[name], \'" ' );
	end

	-- Если во втором параметре указан формат вывода
	if args[2] then
		local outType = mw.text.trim( args[2] );
		if outType == '12345678' then
			for i, name in ipairs( argsMap ) do
				args[i] = args[name];
				args[name] = nil;
			end
		end
	end

	return frame:expandTemplate{ title = template, args = args };
end

return p;
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy