Skip to content

Commit

Permalink
Added CNN live sources
Browse files Browse the repository at this point in the history
  • Loading branch information
jacksonjude committed Nov 5, 2024
1 parent 43848d9 commit 439293a
Show file tree
Hide file tree
Showing 7 changed files with 583 additions and 24 deletions.
10 changes: 5 additions & 5 deletions src/display/region-box.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ async function updateRegionBox(regionID = currentRegionID)

var regionData = regionID ? getRegionData(regionID).regionData : null

if (regionID == null || regionData == null || regionData.partyID == null || (regionData.partyID == TossupParty.getID() && (!regionData.partyVotesharePercentages || regionData.partyVotesharePercentages.reduce((s, p) => s+p.voteshare, 0) == 0) && !canZoomCurrently && !editingRegionVotesharePercentages) || regionData.disabled == true || (currentEditingState == EditingState.editing && currentMapSource.getEditingMode() == EditingMode.margin && !shiftKeyDown && !editingRegionMarginValue))
if (regionID == null || regionData == null || regionData.partyID == null || (regionData.partyID == TossupParty.getID() && (!regionData.partyVotesharePercentages || regionData.partyVotesharePercentages.reduce((s, p) => s+p.voteshare, 0) == 0) && !canZoomCurrently && !editingRegionVotesharePercentages && regionData.reportingPercent == null) || regionData.disabled == true || (currentEditingState == EditingState.editing && currentMapSource.getEditingMode() == EditingMode.margin && !shiftKeyDown && !editingRegionMarginValue))
{
$("#regionboxcontainer").trigger('hide')
return
Expand Down Expand Up @@ -36,7 +36,7 @@ async function updateRegionBox(regionID = currentRegionID)

const shouldShowVotes = !(showingCompareMap && currentMapSource.isCustom())
let voteshareSortedData = regionData.partyVotesharePercentages ? cloneObject(regionData.partyVotesharePercentages).sort((voteData1, voteData2) => voteData2.voteshare-voteData1.voteshare) : []
var roundedMarginValue = shouldShowVotes && shiftKeyDown && voteshareSortedData.length >= 2 && voteshareSortedData.every(voteData => voteData.votes)
var roundedMarginValue = shouldShowVotes && shiftKeyDown && voteshareSortedData.length >= 2 && voteshareSortedData.every(voteData => voteData.votes != null)
? addCommaFormatting(voteshareSortedData[0].votes-voteshareSortedData[1].votes)
: getRoundedMarginValue(regionData.margin)

Expand Down Expand Up @@ -182,10 +182,10 @@ async function updateRegionBox(regionID = currentRegionID)

sortedPercentages.forEach((voteData, i) => {
const roundedVoteshare = Math.round(voteData.voteshare*100)/100
if (roundedVoteshare <= 0 && !currentMapSource.isCustom()) { return }
if (roundedVoteshare <= 0 && !currentMapSource.isCustom() && regionData.reportingPercent == null) { return }

regionBoxHTML += "<span id='voteshare-" + (voteData.partyID + "-" + voteData.candidate) + "' style='display: inline-block; padding: 4px; color: #fff; border-radius: " + (i == 0 ? "3px 3px" : "0px 0px") + " " + (i == sortedPercentages.length-1 ? "3px 3px" : "0px 0px") + "; " + "background: " + getGradientCSS(politicalParties[voteData.partyID].getMarginColors().safe, politicalParties[voteData.partyID].getMarginColors().lean, (showingCompareMap && currentMapSource.isCustom() ? 50 : 0) + voteData.voteshare) + "; " + " width: 100%'><span style='float: left;'>" + voteData.candidate + "</span><span style='float: right;'>"
regionBoxHTML += shiftKeyDown && shouldShowVotes && voteData.votes ? addCommaFormatting(voteData.votes) : (showingCompareMap && currentMapSource.isCustom() && voteData.voteshare > 0.0 ? "+" : "") + decimalPadding(roundedVoteshare, 2) + currentMapSource.getVoteshareSuffix()
regionBoxHTML += shiftKeyDown && shouldShowVotes && voteData.votes != null ? addCommaFormatting(voteData.votes) : (showingCompareMap && currentMapSource.isCustom() && voteData.voteshare > 0.0 ? "+" : "") + decimalPadding(roundedVoteshare, 2) + currentMapSource.getVoteshareSuffix()
regionBoxHTML += "</span></span><br>"

hasVoteCountsForAll = hasVoteCountsForAll && voteData.votes != null
Expand All @@ -196,7 +196,7 @@ async function updateRegionBox(regionID = currentRegionID)
regionBoxHTML += "</div>"
}

if (regionData.reportingPercent)
if (regionData.reportingPercent != null)
{
regionBoxHTML += "<div style='color: gray; font-size: 16px; margin-top: -5px; margin-bottom: 5px'>" + regionData.reportingPercent + "% reporting" + "</div>"
}
Expand Down
65 changes: 61 additions & 4 deletions src/model/map-types/usa-governor-map-type.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ var USAGovernorMapType = new MapType(

const heldSeatPartyIDs2023 = {"AK": republicanPartyID, "HI": democraticPartyID, "AL": republicanPartyID, "AR": republicanPartyID, "AZ": democraticPartyID, "CA": democraticPartyID, "CO": democraticPartyID, "CT": democraticPartyID, "DE": democraticPartyID, "FL": republicanPartyID, "GA": republicanPartyID, "IA": republicanPartyID, "ID": republicanPartyID, "IL": democraticPartyID, "IN": republicanPartyID, "KS": democraticPartyID, "KY": democraticPartyID, "LA": republicanPartyID, "MA": republicanPartyID, "MD": democraticPartyID, "ME": democraticPartyID, "MI": democraticPartyID, "MN": democraticPartyID, "MO": republicanPartyID, "MS": republicanPartyID, "MT": republicanPartyID, "NC": democraticPartyID, "ND": republicanPartyID, "NH": democraticPartyID, "NJ": democraticPartyID, "NM": democraticPartyID, "NV": republicanPartyID, "NY": democraticPartyID, "OH": republicanPartyID, "OK": republicanPartyID, "OR": democraticPartyID, "PA": democraticPartyID, "RI": democraticPartyID, "SC": republicanPartyID, "SD": republicanPartyID, "TN": republicanPartyID, "TX": republicanPartyID, "UT": republicanPartyID, "VA": republicanPartyID, "VT": republicanPartyID, "WA": democraticPartyID, "WI": democraticPartyID, "WV": republicanPartyID, "WY": republicanPartyID, "NE": republicanPartyID}

var jsonVoteshareFilterFunction = function(rawMapData, _, columnMap, __, ___, regionNameToID, heldRegionMap, ____, _____, voteshareCutoffMargin)
var jsonVoteshareCNNFilterFunction = function(rawMapData, _, columnMap, __, ___, regionNameToID, heldRegionMap, ____, _____, voteshareCutoffMargin)
{
let racesToIgnore = []
let candidateExceptions = {"None of these candidates": "None"}
Expand Down Expand Up @@ -93,7 +93,7 @@ var USAGovernorMapType = new MapType(
partyID = IndependentGenericParty.getID()
}

formattedCandidatesArray.push({candidate: candidateName, partyID: partyID, voteshare: candidateVotes/totalVotes*100, votes: candidateVotes})
formattedCandidatesArray.push({candidate: candidateName, partyID: partyID, voteshare: totalVotes > 0 ? candidateVotes/totalVotes*100 : 0, votes: candidateVotes})
}

let voteshareSortedCandidateData = formattedCandidatesArray.sort((cand1, cand2) => cand2.voteshare - cand1.voteshare)
Expand Down Expand Up @@ -668,7 +668,7 @@ var USAGovernorMapType = new MapType(
heldSeatPartyIDs2022, // heldRegionMap
false, // shouldFilterOutDuplicateRows
true, // addDecimalPadding
jsonVoteshareFilterFunction, // organizeMapDataFunction
jsonVoteshareCNNFilterFunction, // organizeMapDataFunction
null, // viewingDataFunction
null, // zoomingDataFunction
null, // splitVoteDataFunction
Expand Down Expand Up @@ -698,6 +698,62 @@ var USAGovernorMapType = new MapType(
1.0 // voteshareCutoffMargin
)

var CNNGovernorResults2024MapSource = new MapSource(
"CNN-2024-Governor-Results", // id
"CNN Results", // name
{url: "https://politics.api.cnn.io/results/national-races/2024-GG.json", type: jsonSourceType}, // dataURL
"https://www.cnn.com/election/2024/results/", // homepageURL
{regular: "./assets/cnn-large.png", mini: "./assets/cnn.png"}, // iconURL
{
date: "extractedAt",
raceKey: "ecKey",
region: "stateAbbreviation",
special: "raceType",
totalVotes: "totalVote",
reportingPercent: "percentReporting",
candidates: "candidates",
candidateName: "lastName",
partyID: "majorParty",
candidateVotes: "voteNum"
}, // columnMap
2024, // cycleYear
null, // candidateNameToPartyIDMap
null, // shortCandidateNameOverride
regionNameToIDHistorical, // regionNameToIDMap
{"AL":"alabama", "AK":"alaska", "AZ":"arizona", "AR":"arkansas", "CA":"california", "CO":"colorado", "CT":"connecticut", "DE":"delaware", "FL":"florida", "GA":"georgia", "HI":"hawaii", "ID":"idaho", "IL":"illinois", "IN":"indiana", "IA":"iowa", "KS":"kansas", "KY":"kentucky", "LA":"louisiana", "ME":"maine", "MD":"maryland", "MA":"massachusetts", "MI":"michigan", "MN":"minnesota", "MS":"mississippi", "MO":"missouri", "MT":"montana", "NE":"nebraska", "NV":"nevada", "NH":"new-hampshire", "NJ":"new-jersey", "NM":"new-mexico", "NY":"new-york", "NC":"north-carolina", "ND":"north-dakota", "OH":"ohio", "OK":"oklahoma", "OR":"oregon", "PA":"pennsylvania", "RI":"rhode-island", "SC":"south-carolina", "SD":"south-dakota", "TN":"tennessee", "TX":"texas", "UT":"utah", "VT":"vermont", "VA":"virginia", "WA":"washington", "WV":"west-virginia", "WI":"wisconsin", "WY":"wyoming"}, // regionIDToLinkMap
heldSeatPartyIDs2022, // heldRegionMap
false, // shouldFilterOutDuplicateRows
true, // addDecimalPadding
jsonVoteshareCNNFilterFunction, // organizeMapDataFunction
null, // viewingDataFunction
null, // zoomingDataFunction
null, // splitVoteDataFunction
null, // splitVoteDisplayOptions
null, // getFormattedRegionName
function(homepageURL, regionID, regionIDToLinkMap, _, shouldOpenHomepage, __)
{
if (!shouldOpenHomepage && !regionID) return

let linkToOpen = homepageURL
if (shouldOpenHomepage)
{
homepageURL += "governor"
}
else
{
linkToOpen += regionIDToLinkMap[regionID] + "/" + "governor"
}

window.open(linkToOpen)
}, // customOpenRegionLinkFunction
null, // updateCustomMapFunction
null, // convertMapDataRowToCSVFunction
null, // isCustomMap
null, // shouldClearDisabled
true, // shouldShowVoteshare
0.0 // voteshareCutoffMargin
)

var PolymarketSenate2024MapSource = new MapSource(
"Polymarket-2024-Governor", // id
"Polymarket", // name
Expand Down Expand Up @@ -1041,6 +1097,7 @@ var USAGovernorMapType = new MapType(

var governorMapSources = {}
governorMapSources[CNNGovernorResults2022MapSource.getID()] = CNNGovernorResults2022MapSource
governorMapSources[CNNGovernorResults2024MapSource.getID()] = CNNGovernorResults2024MapSource
governorMapSources[PolymarketSenate2024MapSource.getID()] = PolymarketSenate2024MapSource
governorMapSources[FiveThirtyEightGovernorProjection2022MapSource.getID()] = FiveThirtyEightGovernorProjection2022MapSource
governorMapSources[LTEGovernorProjection2022MapSource.getID()] = LTEGovernorProjection2022MapSource
Expand All @@ -1050,7 +1107,7 @@ var USAGovernorMapType = new MapType(

const governorMapCycles = [2024, 2022]
const governorMapSourceIDs = {
2024: [PolymarketSenate2024MapSource.getID()],
2024: [CNNGovernorResults2024MapSource.getID(), PolymarketSenate2024MapSource.getID()],
2022: [FiveThirtyEightGovernorProjection2022MapSource.getID(), LTEGovernorProjection2022MapSource.getID(), CookGovernorProjection2022MapSource.getID()],
[allYearsCycle]: [PastElectionResultMapSource.getID(), CustomMapSource.getID()]
}
Expand Down
Loading

0 comments on commit 439293a

Please sign in to comment.