table = (data) => {
const renderCandidate = (candidate, key, winnerKey) => {
const winnerClass = candidate[winnerKey] ? 'winner' : 'loser'
const partyClass = {'DEM': 'd', 'REP': 'r'}[candidate.PartyCode]
const formattedPercent = percentFormat(candidate[key])
const party = candidate.PartyCode.slice(0,1)[0]
const lastName = displayNames[candidate.NameOnBallot].split(' ').slice(-1,)[0]
const fullName = displayNames[candidate.NameOnBallot]
return `<div class="row-item ${winnerClass} ${partyClass}"><span class="percent">${formattedPercent}</span> ${lastName}</div>`
}
const racesRendered = data.map(race => {
const c1 = race.candidates[0]
const c2 = race.candidates[1]
return `<div class="row">
<div class="row-header-1">${race.year} ${displayRaces[race.position]}</div>
<div class="row-header-2">${displayNames[c1.NameOnBallot]} (${c1.PartyCode.slice(0,1)[0]}) v. ${displayNames[c2.NameOnBallot]} (${c2.PartyCode.slice(0,1)[0]})</div>
<div class="row-content">
<div class="row-col header">Statewide</div>
<div class="row-col header">CP-12 West</div>
<div class="row-col header">CP-12 East</div>
</div>
<div class="row-content">
<div class="row-col statewide">${race.candidates.map(d => renderCandidate(d, 'votes_percent', 'wasStatewideWinner')).join('')}</div>
<div class="row-col west">${race.candidates.map(d => renderCandidate(d, 'west_percent', 'wasWesternWinner')).join('')}</div>
<div class="row-col east">${race.candidates.map(d => renderCandidate(d, 'east_percent', 'wasEasternWinner')).join('')}</div>
</div>
</div>`
}).join('')
return `
<div class="map-headers"></div>
<div class="races">
${racesRendered}
</div>
`
}