More actions
Skycrafter (talk | contribs) No edit summary |
Skycrafter (talk | contribs) Fixed format |
||
Line 1: | Line 1: | ||
-- Module:TrackInfobox | |||
local p = {} | local p = {} | ||
Line 28: | Line 29: | ||
end | end | ||
local total_seconds = | -- centiseconds (100 Hz -> 10 ms per tick) | ||
local | local cs = math.floor(ms / 10) | ||
local | local total_seconds = math.floor(cs / 100) | ||
local time_str = string.format("%d:% | local centi = cs % 100 | ||
local hours = math.floor(total_seconds / 3600) | |||
local rem = total_seconds % 3600 | |||
local minutes = math.floor(rem / 60) | |||
local seconds = rem % 60 | |||
local time_str | |||
if hours > 0 then | |||
-- h:mm:ss.cc (hours not zero-padded, minutes and seconds are 2 digits) | |||
time_str = string.format("%d:%02d:%02d.%02d", hours, minutes, seconds, centi) | |||
elseif minutes > 0 then | |||
-- mm:ss.cc (minutes zero-padded) | |||
time_str = string.format("%02d:%02d.%02d", minutes, seconds, centi) | |||
else | |||
-- ss.cc (no leading zero on seconds) | |||
time_str = string.format("%d.%02d", seconds, centi) | |||
end | |||
if player ~= '' then | if player ~= '' then |
Latest revision as of 13:19, 14 August 2025
Documentation for this module may be created at Module:TrackInfobox/doc
-- Module:TrackInfobox
local p = {}
local function escape_html(s)
if s == nil then return '' end
s = tostring(s)
s = s:gsub("&", "&")
s = s:gsub("<", "<")
s = s:gsub(">", ">")
s = s:gsub('"', """)
s = s:gsub("'", "'")
return s
end
function p.formatWR(frame)
local time_ms = frame.args[1] or ''
local player = frame.args[2] or ''
local fallback = frame.args[3] or ''
if time_ms == '' or time_ms == nil then
if fallback ~= '' then return fallback end
return 'Unknown'
end
local ms = tonumber(time_ms)
if not ms then
if fallback ~= '' then return fallback end
return 'Unknown'
end
-- centiseconds (100 Hz -> 10 ms per tick)
local cs = math.floor(ms / 10)
local total_seconds = math.floor(cs / 100)
local centi = cs % 100
local hours = math.floor(total_seconds / 3600)
local rem = total_seconds % 3600
local minutes = math.floor(rem / 60)
local seconds = rem % 60
local time_str
if hours > 0 then
-- h:mm:ss.cc (hours not zero-padded, minutes and seconds are 2 digits)
time_str = string.format("%d:%02d:%02d.%02d", hours, minutes, seconds, centi)
elseif minutes > 0 then
-- mm:ss.cc (minutes zero-padded)
time_str = string.format("%02d:%02d.%02d", minutes, seconds, centi)
else
-- ss.cc (no leading zero on seconds)
time_str = string.format("%d.%02d", seconds, centi)
end
if player ~= '' then
return time_str .. ' by ' .. escape_html(player)
else
return time_str
end
end
return p