Модуль:Песочница/Vort
Перейти к навигации
Перейти к поиску
Документация
local p = {}
local function amountToNumber(amount)
return tonumber(string.gsub(amount, '^% ', ''), 10);
end
local function formatNum(number)
return mw.language.getContentLanguage():formatNum(
math.floor(number * 100) / 100);
end
local function densityq(q)
local p1082 = mw.wikibase.getBestStatements(q, 'P1082');
if #p1082 == 0 then return nil; end;
local p2046 = mw.wikibase.getBestStatements(q, 'P2046');
if #p2046 == 0 then return nil; end;
local population = amountToNumber(p1082[1].mainsnak.datavalue.value.amount);
local areaValue = p2046[1].mainsnak.datavalue.value;
local areaAmount = tonumber(areaValue.amount, 10);
local areaUnit = string.gsub(areaValue.unit,
'http://www.wikidata.org/entity/', '');
local p2370 = mw.wikibase.getBestStatements(areaUnit, 'P2370');
if not p2370 then return nil; end;
local unitToSI = amountToNumber(p2370[1].mainsnak.datavalue.value.amount);
local areaKM2 = areaAmount * unitToSI / 1000000;
return population / areaKM2;
end
local function densityi()
local q = mw.wikibase.getEntityIdForCurrentPage();
if not q then return nil;
else return densityq(q); end;
end
function p.density(frame)
local q = frame.args[1];
local unit = frame.args['unit'];
local result = nil;
if not q then result = densityi();
else result = densityq(q); end;
if not result then return nil;
else if unit
then return formatNum(result) .. ' ' .. unit;
else return formatNum(result); end;
end;
end
return p