Content deleted Content added
Make more easily callable from other modules |
Fixed off-by-one error |
||
(7 intermediate revisions by 4 users not shown) | |||
Line 1:
--- Example usage:
--- {{#invoke
--- =p._externalData({
local p = {}
Line 21:
local change = current / previous * 100 - 100
local sign = change < 0 and "−" or "+"
return mw.ustring.format("%s%s%%", sign, lang:formatNum(round(math.abs(change))))▼
if (math.abs(change)) >= 10 then
return mw.ustring.format("%s%.0f%%", sign, (math.abs(change)))
end
if (math.abs(change)) < 1 then
return mw.ustring.format("%s%.3f%%", sign, (math.abs(change)))
end
end
function p._externalData(args)
local data = mw.ext.data.get(args
local dateIndex
Line 34 ⟶ 41:
local class5Index
for i, field in ipairs(data.schema.fields) do
if field.name == "date" or field.name == args.
dateIndex = i
elseif field.name == "deaths" or field.name == args.
deathsIndex = i
elseif field.name == "recoveries" or field.name == args.
recoveriesIndex = i
elseif field.name == "cases" or field.name == args.
casesIndex = i
elseif field.name == "class4" or field.name == args.
class4Index = i
elseif field.name == "class5" or field.name == args.
class5Index = i
end
end
assert(dateIndex, "Date field not found.")
assert(deathsIndex or not args.
assert(recoveriesIndex or not args.
assert(casesIndex or not args.
assert(class4Index or not args.
assert(class5Index or not args.
-- Restructure the data as tables with keys.
Line 69 ⟶ 76:
}
local prevRecord = records[#records] or {}
if casesIndex and not prevRecord.cases and record.cases and record.cases > 0 then
record.options.firstright1 = "y"
end
if deathsIndex and prevRecord.deaths == 0 and record.deaths and record.deaths > 0 then
record.options.firstright2 = "y"
end
Line 94 ⟶ 101:
for i = #records, 1, -1 do
local record = records[i]
if i < #records and record.streak > 3 then
for j = i, i - record.streak + 3, -1 do
table.remove(records, j)
Line 131 ⟶ 138:
function p.externalData(frame)
local args = {}
return p._externalData(frame.args)▼
for k,v in pairs(frame.args) do
if (v or '') ~= '' then
args['data'..k] = v
end
end
end
return p
|