Module:Races
Documentation for this module may be created at Module:Races/doc
local p = {}
local raceNameTls = mw.loadJsonData('Data:Races/Names')
local horseNameTls = mw.loadJsonData('Data:Races/HorseNames')
local jockeyNameTls = mw.loadJsonData('Data:Races/JockeyNames')
local trackNameTls = mw.loadJsonData('Data:Races/TrackNames')
function p.loadRaceHistoryJson(horseName)
return mw.loadJsonData('Data:Races/RaceHistory/' .. horseName)
end
function p.translateHorseName(horseName)
for i, v in ipairs(horseNameTls) do
if v['name_jp'] == horseName and v['name_en'] then
return v['name_en']
end
end
return horseName
end
function p.translateRaceName(raceName)
for i, v in ipairs(raceNameTls) do
for j, n in ipairs(v['names_jp']) do
if n == raceName then
return v['name_en'], v['grade']
end
end
end
return raceName, ''
end
function p.translateJockeyName(jockeyName)
for i, v in ipairs(jockeyNameTls) do
if v['name_jp'] == jockeyName and v['name_en'] then
return v['name_en']
end
end
return jockeyName
end
function p.translateTrackName(trackName)
for i, v in ipairs(trackNameTls) do
for j, n in ipairs(v['names_jp']) do
if n == trackName then
return v['name_en']
end
end
end
return trackName
end
function p.raceHistoryTable(frame)
local horseName = mw.text.decode(frame.args[1])
local json = p.loadRaceHistoryJson(horseName)
local text = '<div class="noresize">\n{| class="wikitable sortable"\n'
text = text .. '|+ style="caption-side:bottom;"|<small>\'\'Race data sourced from [https://netkeiba.com netkeiba].\'\'</small>\n|-\n'
text = text .. '! Date !! Racecourse !! Race !! Grade !! Distance !! Gate !! Odds !! Fav. !! Fin. !! Time !! Margin !! Jockey !! Winner (Runner-Up) !! Other Umamusume\n'
for i, race in ipairs(json) do
local raceDate = race['date']
local racecourse = p.translateTrackName(race['racecourse'])
local raceName, raceGrade = p.translateRaceName(race['race'])
local classGrade = 'grade ' .. string.lower(raceGrade)
local raceLink = 'https://db.netkeiba.com/race/' .. race['netkeibaId']
local ground = race['ground'] == 'dirt' and 'D' or 'T'
local distance = race['distance'] or ""
local horseNumber = race['number'] or ""
local odds = race['odds']
local oddsFmt = odds and string.format("%.1f", odds) or ''
local fav = race['favorite'] or ""
local classFav = 'place n' .. fav
local place = race['place'] or ""
local classPlace = 'place n' .. place
local raceTime = race['time'] or ""
local margin = race['delta']
local marginFmt = margin and string.format("%.1f", margin) or ''
local jockey = p.translateJockeyName(race['jockey'])
local firstOrSecond = p.translateHorseName(race['firstOrSecond'])
if place == 1 and firstOrSecond then
firstOrSecond = '(' .. firstOrSecond .. ')'
end
if not firstOrSecond then firstOrSecond = '' end
local otherUmasList = {}
for j, v in ipairs(race['otherUmas']) do
table.insert(otherUmasList, '[[' .. p.translateHorseName(v) .. ']]')
end
local otherUmas = table.concat(otherUmasList, ', ')
text = text ..
string.format('|-\n| %s || %s || class="%s"|[%s %s] || class="%s"|%s || %s %sm || %s || %s || class="%s"|%s || class="%s"|%s || %s || %s || %s || %s || %s\n',
raceDate, racecourse, classGrade, raceLink, raceName, classGrade, raceGrade, ground, distance, horseNumber, oddsFmt, classFav, fav, classPlace, place, raceTime, marginFmt, jockey, firstOrSecond, otherUmas)
end
text = text .. "|}\n</div>"
return text
end
return p