mirror of
https://github.com/GoogleChrome/chrome-extensions-samples.git
synced 2026-03-29 13:49:41 +07:00
* Initial README.md file * fix design doc link * Update README.md adding scheib * Update README.md * test * update README.md with alvinjiooo * add a ascii fish in README.md * Update README.md * skeloton extension * Add original co2meter.html * add buttons to settings page * Initial storage module stub. * Add storage module reference from settings page. * Fix settings JS to be module compatible. * Add stubs for settings storage writing * Call saveCO2Value() from onInputReport in co2meter.html * background page to read CO2 periodically based on the stored interval * verion 1.0 /module/co2_meter.js * Refactor settings.html and hook up CO2 driver * update v2 of /module/co2_meter.js which access all methods from CO2Meter class * Fix co2_meter import in background.js * background page to show CO2 meter disconnected icon * v2.1 update /module/co2_meter.js add support for virtual meter and connection listener also rquestPermission * v2.1 update /module/co2_meter.js * Import idb-keyval indexedDB library into storage.js, with trivial usage. * background page handle disconnect connect device * update v2.2 /module/co2_meter.js make non-static and add guarding flag for exccessive reading * update v2.3 /module/co2_meter.js await device to close before open device in * update v2.4 /module/co2_meter.js change to return reject promise instead of Error in * Add third-party/idb-keyval, use to set/get interval. * Simplify settings and storage. * handle background page device disconnect/connect * Rename *_script.js files to only *.js. * Add temp reading * Add chart to popup.html with chartjs etc. * Update extension tool tip to show connected/disconnected status. * use indexedDB to store CO2 reading * Renaming items in background.js Name methods more clearly for what they are doing. Collapse some code when possible to be inline. * add in Storage * add support for storing temperature and query temperature in range * background page boardcasting reading updated * Refactor chart out of popup into chart.html for iframing * Continued: chart out of popup into chart.html for iframing * Use message channel for message broadcasting and move common constant to constant.js * Work in progress for data into chart. * Use set for clients in background page * Add promise to storage constructor. * Change IDB version number due to schema change * Populate chart data. * check store name before creating when version changed * increase popup window and iframe size * Update chart upon new data. * Add calibration period and refactor inputReport * Use flexbox to layout pages. * move internal and temperature unit into setting store * move dbInitialized into transaction oncomplete event * remove reading out interval and temp unit log * Remove co2meter.html * Add .map files for third party code to remove devtools warnings. * Display chart in Fahrenheit * remove idb-keyvalue * prettier storage.js and add comments to public methods * Chart style: time axis respects time of data, no data points * Show dialog on the chart when device is disconnected * Add Example Data Button * Close dialog button * Implement toggling between Celsius / Fahrenheit * polish co2_meter.js and remove virtual device and change default interval to 30 sec * Change small icon to CO2 text * change reading interval default to 30 secs which helps the chart update faster for fresh load case * Fix lint error * Clean up console.log * Add chrome.alarm example * remove keep alive for reading alarm * refactor to keep connection open * add README.md * strip down * addressed comments * add link to README.md --------- Co-authored-by: Vincent Scheib <scheib@users.noreply.github.com> Co-authored-by: Alvin Ji <111466895+alvinjiooo@users.noreply.github.com> Co-authored-by: Alvin Ji <alvinji@chromium.org> Co-authored-by: Alpaca Jam <alvinji@google.com>
95 lines
2.8 KiB
JavaScript
95 lines
2.8 KiB
JavaScript
// Copyright 2023 Google LLC
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import {
|
|
CO2_METER_UNAVAILABLE,
|
|
CO2_METER_AVAILABLE,
|
|
NEW_CO2_READING,
|
|
NEW_TEMP_READING,
|
|
READING_UNKNOWN
|
|
} from './modules/constant.js';
|
|
import CO2Meter from './modules/co2_meter.js';
|
|
|
|
window.onload = async () => {
|
|
// Register for messages to update chart upon new data readings.
|
|
chrome.runtime.connect().onMessage.addListener((msg) => {
|
|
switch (msg.type) {
|
|
case NEW_CO2_READING:
|
|
updateCO2Reading(msg.data);
|
|
break;
|
|
case NEW_TEMP_READING:
|
|
updateTempReading(msg.data);
|
|
break;
|
|
case CO2_METER_AVAILABLE:
|
|
updateCO2MeterStatus(true);
|
|
break;
|
|
case CO2_METER_UNAVAILABLE:
|
|
updateCO2MeterStatus(false);
|
|
break;
|
|
}
|
|
});
|
|
|
|
// Dialog
|
|
document.getElementById('closeDialogButton').onclick = () => {
|
|
document.getElementById('noDeviceDialog').close();
|
|
};
|
|
|
|
await CO2Meter.init(CO2MeterConnected, CO2MeterDisconnected);
|
|
const deviceStatus = await CO2Meter.getDeviceStatus();
|
|
updateCO2MeterStatus(deviceStatus);
|
|
};
|
|
|
|
function updateCO2Reading(co2_reading) {
|
|
let co2_reading_element = document.getElementById('co2_reading');
|
|
if (co2_reading === READING_UNKNOWN) {
|
|
co2_reading_element.textContent = 'unknown';
|
|
} else {
|
|
co2_reading_element.textContent = `${co2_reading} \u33d9`;
|
|
}
|
|
}
|
|
|
|
function updateTempReading(temp_reading) {
|
|
let temp_reading_element = document.getElementById('temp_reading');
|
|
if (temp_reading === READING_UNKNOWN) {
|
|
temp_reading_element.textContent = 'unknown';
|
|
} else {
|
|
const fahrenheit = CO2Meter.tempReadingToFahrenheit(temp_reading);
|
|
temp_reading_element.textContent = `${fahrenheit}\u2109`;
|
|
}
|
|
}
|
|
|
|
function updateCO2MeterStatus(connected) {
|
|
let noDeviceDialog = document.getElementById('noDeviceDialog');
|
|
let co2_meter_connected_status = document.getElementById(
|
|
'co2_meter_connected_status'
|
|
);
|
|
if (connected) {
|
|
noDeviceDialog.close();
|
|
co2_meter_connected_status.textContent = 'connected';
|
|
} else {
|
|
if (!noDeviceDialog.open) {
|
|
noDeviceDialog.showModal();
|
|
}
|
|
co2_meter_connected_status.textContent = 'disconnected';
|
|
}
|
|
}
|
|
|
|
function CO2MeterConnected() {
|
|
updateCO2MeterStatus(true);
|
|
}
|
|
|
|
function CO2MeterDisconnected() {
|
|
updateCO2MeterStatus(false);
|
|
}
|