Module:Pop density and Module:Pop density/sandbox: Difference between pages
Appearance
(Difference between pages)
Content deleted Content added
fix double sort key |
No edit summary |
||
Line 5: | Line 5: | ||
local math_module = require( "Module:Math" ) |
local math_module = require( "Module:Math" ) |
||
local precision = math_module._precision |
local precision = math_module._precision |
||
local sortkey = require( "Module:Sortkey" ) |
|||
local function rnd(num, digits) |
local function rnd(num, digits) |
||
Line 43: | Line 42: | ||
local function popdensity(pop, area1, areaunit1, areaunit2, prec, disp, flip) |
local function popdensity(pop, area1, areaunit1, areaunit2, prec, disp, flip) |
||
local dens1, |
local dens1, prec1 = nil, nil |
||
local dens2, |
local dens2, prec2 = nil, nil |
||
local str1, str2 = '', '' |
local str1, str2 = '', '' |
||
local uniterror = '<sup>[[Template:Pop density|?Unknown unit?]]</sup>[[Category:Pop density using unsupported units]]' |
local uniterror = '<sup>[[Template:Pop density|?Unknown unit?]]</sup>[[Category:Pop density using unsupported units]]' |
||
Line 50: | Line 49: | ||
if(pop ~= '' and area1 ~= '') then |
if(pop ~= '' and area1 ~= '') then |
||
-- pop and area are defined |
-- pop and area are defined |
||
local |
local dens1num = tonumber(pop)/tonumber(area1) |
||
if not popnum then |
|||
error(string.format('Unable to convert population "%s" to a number', pop), 2) |
|||
end |
|||
local area1num = tonumber(area1) |
|||
if not area1num then |
|||
error(string.format('Unable to convert area "%s" to a number', area1), 2) |
|||
end |
|||
local dens1num = popnum/area1num |
|||
local unit1 = unitnames[areaunit1] or nil |
local unit1 = unitnames[areaunit1] or nil |
||
local unit2 = unitnames[areaunit2] or nil |
local unit2 = unitnames[areaunit2] or nil |
||
prec1 = (prec ~= '') and tonumber(prec) |
prec1 = (prec ~= '') and tonumber(prec) or (1+math.log10(2*area1/(1/10^precision(pop)+pop/area1/10^precision(area1)))) |
||
or (1+math.log10(2*area1/(1/10^precision(pop)+pop/area1/10^precision(area1)))) |
|||
dens1 = rnd(dens1num, math.floor(prec1 + 0.5)) |
dens1 = rnd(dens1num, math.floor(prec1 + 0.5)) |
||
dens1sort = '<span style="display:none" data-sort-value="' |
|||
.. sortkey._sortKeyForNumber(dens1num) .. '♠"></span>' |
|||
if (unit1) then |
if (unit1) then |
||
str1 = '/' .. unitstr[unit1] |
str1 = '/' .. unitstr[unit1] |
||
Line 75: | Line 62: | ||
prec2 = prec1 - math.log10(mult) |
prec2 = prec1 - math.log10(mult) |
||
dens2 = rnd(dens1num*mult, math.floor(prec2 + 0.5)) |
dens2 = rnd(dens1num*mult, math.floor(prec2 + 0.5)) |
||
dens2sort = '<span style="display:none" data-sort-value="' |
|||
.. sortkey._sortKeyForNumber(dens1num*mult) .. '♠"></span>' |
|||
str2 = '/' .. unitstr[unit2] |
str2 = '/' .. unitstr[unit2] |
||
elseif(areaunit2 ~= '') then |
elseif(areaunit2 ~= '') then |
||
Line 103: | Line 88: | ||
if( str2 ~= '' ) then |
if( str2 ~= '' ) then |
||
-- has a converted unit |
-- has a converted unit |
||
if( disp ~= 'num |
if( disp ~= 'num' ) then |
||
-- display input and output density numbers with units |
-- display input and output density numbers with units |
||
if( flip == 'on' ) then |
if( flip == 'on' ) then |
||
return |
return dens2 .. str2 .. ' (' .. dens1 .. str1 .. ')' |
||
else |
else |
||
return |
return dens1 .. str1 .. ' (' .. dens2 .. str2 .. ')' |
||
end |
end |
||
elseif( disp == 'table') then |
|||
dens1 = (dens1sort or '') .. dens1 |
|||
dens2 = (dens2sort or '') .. dens2 |
|||
return pop .. '||' .. area1 .. '||' .. dens1 .. '||' .. dens2 |
|||
else |
else |
||
-- display output density number without unit |
-- display output density number without unit |
||
Line 120: | Line 101: | ||
else |
else |
||
-- no converted unit |
-- no converted unit |
||
if( disp ~= 'num |
if( disp ~= 'num' ) then |
||
-- display input density number with unit |
-- display input density number with unit |
||
return |
return dens1 .. str1 |
||
elseif( disp == 'table') then |
|||
return pop .. '||' .. area1 .. '||' ..(dens1sort or '') .. dens1 |
|||
else |
else |
||
-- display input density number without unit |
-- display input density number without unit |
||
Line 136: | Line 115: | ||
function p.density(frame) |
function p.density(frame) |
||
local args = (frame.args[3] ~= nil) and frame.args or frame:getParent().args |
local args = (frame.args[3] ~= nil) and frame.args or frame:getParent().args |
||
⚫ | |||
return popdensity( |
|||
⚫ | |||
args['prec'] or '', args['disp'] or '', args['flip'] or '' |
|||
) |
|||
end |
end |
||