local p =
local lang = mw.language.getContentLanguage
local function getPopulations(qid) -- Return table of all population or nil if none found. -- Each entry is a table where POP is a number. local populations = local props = mw.wikibase.getAllStatements(qid, 'P1082') if not props then return nil end for _, v in pairs(props) do if v.qualifiers and v.qualifiers["P585"] then local timestamp = v.qualifiers["P585"][1].datavalue.value.time timestamp = timestamp:gsub("%-00%-00T", "-01-01T") if string.sub(timestamp, 1, 1) ~= '-' then populations[#populations + 1] = end end end if next(populations) then -- if table is not empty return populations end return nilend
local function getPopEst(qid) local populations = getPopulations(qid) if not populations then return -1 end -- get the two most recent population counts local popCurrent, popPrevious, timeCurrent, timePrevious = -1, -1, -1, -1 for i, v in ipairs(populations) do if v[2] > timeCurrent then popPrevious = popCurrent timePrevious = timeCurrent popCurrent = v[1] timeCurrent = v[2] elseif v[2] > timePrevious then popPrevious = v[1] timePrevious = v[2] end end if (timeCurrent > 0) and (timePrevious > 0) then local timeNow = lang:formatDate('U', nil, true) return math.floor(popCurrent + (popCurrent - popPrevious)/(timeCurrent - timePrevious)*(timeNow - timeCurrent) + 0.5) else return -1 endend
function p.row(frame) local function formatnum(num) return frame:callParserFunction end local function flag(str) return frame:expandTemplate end local args = frame.args local res = local argnums = for k, v in pairs(args) do if type(k)
local qid = nil if country
"" then qid = mw.wikibase.getEntityIdForCurrentPage else qid = mw.wikibase.getEntityIdForTitle(country) end local cpop = getPopEst(qid)
if (cpop > 0) and (wpop > 0) then local pct = math.floor(1000*cpop / wpop + 0.5) / 10 cpop = formatnum(cpop) res = res .. '|-\n|' .. flag(country) .. '||' .. cpop .. ' || ' .. lang:formatDate('d F Y', nil, true) .. ' || ' .. pct .. '%\n' else res = res .. 'Error: Country = ' .. country .. ' Country population estimate = ' .. cpop .. ' World population estimate = ' .. wpop end end return resend
return p