Module:Sandbox/Rousseaulambertlp Explained

local p = local getArgs = require('Module:Arguments').getArgslocal datePattern = "^(%d+)-(%d+)$"-- local weatherTemplate = 'Template:Weather box'local weatherTemplate = 'Template:Climat'local wrapsTemplate = 'User:Rousseaulambertlp/Weather box'

function p.weatherbox(frame) local args = getArgs(frame,) local dataPage = assert(args.data, 'Missing "data" parameter') args.data = nil

local monthlyHigh, monthlyLow =, local highSum, highCount =, local lowSum, lowCount =, local avgHighSum, avgHighCount =, local avgLowSum, avgLowCount =, local precipSum, precipCount =, local snowfallSum, snowfallCount =,

-- There is currently no established way to specify sources, suggestions needed -- For now, prepend the link to edit box to the first source local source = args['source'] or args['source 1'] if source then source = '
' .. source end args['source'] = 'edit data' .. source args['source 1'] = nil

for key, row in pairs(mw.ext.data.get(dataPage).data) do local date, avgHighTemp, avgLowTemp, extHighTemp, extLowTemp, precipTotalRain, precipTotalSnow, precipTotal, snowGrndLastDay, windDirMaxGust, windSpeedMaxGust = unpack(row)

local year, month = date:match(datePattern) month = tonumber(month)

if extHighTemp ~= nil and (monthlyHigh[month]

nil or monthlyHigh[month] < extHighTemp) then monthlyHigh[month] = extHighTemp end if extLowTemp ~= nil and (monthlyLow[month]

nil or monthlyLow[month] > extLowTemp) then monthlyLow[month] = extLowTemp end recordAvg(highSum, highCount, month, extHighTemp) recordAvg(lowSum, lowCount, month, extLowTemp) recordAvg(avgHighSum, avgHighCount, month, avgHighTemp) recordAvg(avgLowSum, avgLowCount, month, avgLowTemp) recordAvg(precipSum, precipCount, month, precipTotal) recordAvg(snowfallSum, snowfallCount, month, precipTotalSnow) end

local months = for i=1, 12 do args[months[i] .. 'tmax-'] = monthlyHigh[i] end for i=1, 12 do args[months[i] .. 'tmin-'] = monthlyLow[i] end-- for i=1, 12 do args[months[i] .. 'avg record high C'] = string.format("%.1f", highSum[i] / highCount[i]) end-- for i=1, 12 do args[months[i] .. 'avg record low C'] = string.format("%.1f", lowSum[i] / lowCount[i]) end-- for i=1, 12 do args[months[i] .. 'high C'] = string.format("%.1f", avgHighSum[i] / avgHighCount[i]) end-- for i=1, 12 do args[months[i] .. 'low C'] = string.format("%.1f", avgLowSum[i] / avgLowCount[i]) end for i=1, 12 do args[months[i] .. 'prec-'] = string.format("%.1f", precipSum[i] / precipCount[i]) end-- for i=1, 12 do args[months[i] .. ' snow mm'] = string.format("%.1f", snowfallSum[i] / snowfallCount[i]) end

return frame:expandTemplateend

function recordAvg(sumTbl, countTbl, month, value) if value ~= nil then sumTbl[month] = (sumTbl[month] or 0) + value countTbl[month] = (countTbl[month] or 0) + 1 endend

return p