You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.0 KiB
JavaScript

2 years ago
// SARS-CoV-2-Viz
// Animated COVID case count visualization
// Copyright 2022 Edward L. Platt <ed@elplatt.com>
function main() {
let ui = UI();
let tracker = ProgressTracker(
(id) => { ui.addDisplay(id); },
(id, progress) => ui.display(progress, id)
);
document.getElementById("header").appendChild(ui.node);
let onDataProgress = tracker.getTracker();
let dataPromise = getData(
(progress) => {
onDataProgress(`Fetching data: Received ${progress} bytes`)
})
.then((dataCSV) => {
return parseData(
dataCSV,
(progress) => onDataProgress(`Parsing data: ${progress}`)
);
});
let onFeatureProgress = tracker.getTracker();
let featurePromise = getFeatures(
(progress) => {
onFeatureProgress(`Fetching features: Received ${progress} bytes`);
})
.then((features) => {
return parseFeatures(
features,
(progress) => onFeatureProgress(`Parsing features: ${progress}`));
});
let onMetadataProgress = tracker.getTracker();
let metadataPromise = getMetadata(
(progress) => {
onMetadataProgress(`Fetching metadata: ${progress}`);
})
.then((metadata) => {
return parseMetadata(
metadata,
(progress) => onMetadataProgress(`Parsing metadata: ${progress}`));
});
2 years ago
Promise.all([
dataPromise, featurePromise, metadataPromise
2 years ago
]).then((values) => {
const [dataForDay, us, metadata] = values;
console.log(metadata);
2 years ago
ui.clearDisplays();
ui.display("Initializing visualization");
let msPerFrame = 200;
console.log(dataForDay);
console.log(us);
console.log(metadata);
2 years ago
let dates = dataForDay.map((data) => data["00000"].date);
let chart = createChoropleth(us, msPerFrame);
document.getElementById("content").appendChild(chart.node);
let day = dataForDay.length - 1;
let data = dataForDay[day];
ui.display(dataForDay[day]["00000"].date);
ui.setFrames(dates, day);
ui.setMsPerFrame(msPerFrame);
chart.update(data);
ui.onTick((day) => {
chart.update(dataForDay[day]);
ui.display(dates[day]);
});
});
};
main();