mirror of
https://github.com/GoogleChrome/chrome-extensions-samples.git
synced 2026-03-28 13:39:44 +07:00
117 lines
3.2 KiB
JavaScript
117 lines
3.2 KiB
JavaScript
import storage from "./modules/storage.js";
|
|
import { NEW_READING_SAVED_MESSAGE, PERMISSION_GRANTED_MESSAGE, CO2_METER_UNAVAILABLE } from "./modules/constant.js";
|
|
import CO2Meter from "./modules/co2_meter.js";
|
|
|
|
let lastChartUpdateTimeMs =
|
|
new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000).getTime(); // Initialize to one week ago.
|
|
|
|
let chart = null;
|
|
|
|
window.onload = async e => {
|
|
const chartConfig = {
|
|
type: 'line',
|
|
data: {
|
|
datasets: [
|
|
{
|
|
label: "Temperature",
|
|
data: [],
|
|
borderColor: 'rgba(255, 0, 0, 1)',
|
|
backgroundColor: 'rgba(255, 0, 0, 0.5)',
|
|
yAxisID: 'y'
|
|
},
|
|
{
|
|
label: "CO₂",
|
|
data: [],
|
|
borderColor: 'rgba(0, 0, 255, 1)',
|
|
backgroundColor: 'rgba(0, 0, 255, 0.5)',
|
|
yAxisID: 'y1'
|
|
}
|
|
]
|
|
},
|
|
options: {
|
|
type: 'line',
|
|
pointStyle: false,
|
|
scales: {
|
|
x: {
|
|
type: 'time'
|
|
},
|
|
y: {
|
|
type: 'linear',
|
|
display: true,
|
|
position: 'left',
|
|
|
|
grid: {
|
|
drawOnChartArea: false
|
|
}
|
|
},
|
|
y1: {
|
|
type: 'linear',
|
|
display: true,
|
|
position: 'right'
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
chart = new Chart(document.getElementById('chart'), chartConfig);
|
|
await updateChart();
|
|
|
|
// Update when document becomes visible.
|
|
document.onvisibilitychange = updateChart;
|
|
|
|
// Register for messages to update chart upon new data readings.
|
|
chrome.runtime.connect().onMessage.addListener((msg) => {
|
|
if (msg === NEW_READING_SAVED_MESSAGE) { updateChart(); }
|
|
else if (msg === PERMISSION_GRANTED_MESSAGE) { updateCO2MeterStatus(true); }
|
|
else if (msg === CO2_METER_UNAVAILABLE) { updateCO2MeterStatus(false); }
|
|
});
|
|
|
|
// Dialog
|
|
closeDialogButton.onclick = () => { noDeviceDialog.close(); }
|
|
|
|
await CO2Meter.init();
|
|
updateCO2MeterStatus(CO2Meter.getDeviceStatus());
|
|
CO2Meter.registerCallback(CO2MeterConnected, CO2MeterDisconnected);
|
|
}
|
|
|
|
function updateCO2MeterStatus(connected) {
|
|
if (connected) {
|
|
noDeviceDialog.close();
|
|
} else {
|
|
if (!noDeviceDialog.open) {
|
|
noDeviceDialog.showModal();
|
|
}
|
|
}
|
|
}
|
|
|
|
function CO2MeterConnected() {
|
|
updateCO2MeterStatus(true);
|
|
}
|
|
|
|
function CO2MeterDisconnected() {
|
|
updateCO2MeterStatus(false);
|
|
}
|
|
|
|
async function updateChart() {
|
|
if (document.visibilityState == 'hidden')
|
|
return; // Don't update if hidden.
|
|
|
|
let TempData = await storage.getTempValueInRange(lastChartUpdateTimeMs);
|
|
let CO2Data = await storage.getCO2ValueInRange(lastChartUpdateTimeMs);
|
|
lastChartUpdateTimeMs = new Date().getTime();
|
|
|
|
function KelvinToFahrenheit(k) { return (k - 273.15) * 9/5 + 32; }
|
|
function KelvinToCelsius(k) { return k - 273.15; }
|
|
let isCelsius = await storage.getTemperatureUnit() == "Celsius";
|
|
let convert = isCelsius ? KelvinToCelsius : KelvinToFahrenheit
|
|
chart.data.datasets[0].label = "Temperature " + (isCelsius ? "(C)" : "(F)");
|
|
|
|
TempData.forEach(datum => {
|
|
chart.data.datasets[0].data.push({ x: datum.time, y: convert(datum.reading) });
|
|
});
|
|
CO2Data.forEach(datum => {
|
|
chart.data.datasets[1].data.push({ x: datum.time, y: datum.reading });
|
|
});
|
|
chart.update();
|
|
}
|