diff --git a/scripts/remove_bloat.sh b/scripts/remove_bloat.sh
index 3971d35..e163a84 100755
--- a/scripts/remove_bloat.sh
+++ b/scripts/remove_bloat.sh
@@ -7,7 +7,7 @@ echo "Removing bloat in node_modules..."
pwd
cd www/node_modules
-rm -rf {ansicolors,buffer-from,cardinal,concat-stream,core-util-is,csscolorparser}
+rm -rf {ansicolors,buffer-from,cardinal,chartjs-color,chartjs-color-string,color-convert,color-name,concat-stream,core-util-is,csscolorparser}
rm -rf {dom7,earcut,esprima,geojson-vt,gl-matrix,grid-index,ieee754,inherits,isarray}
rm -rf {kdbush,leaflet-geometryutil,@mapbox,minimist,murmurhash-js}
rm -rf {path-to-regexp,pbf,potpack,process-nextick-args}
@@ -25,6 +25,11 @@ rm -rf dist/bwip-js.js
rm -rf dist/node-bwipjs.js
cd ..
+cd chart.js
+cd dist
+rm {Chart.bundle.js,Chart.css,Chart.js}
+cd ../..
+
cd @fortawesome/fontawesome-free
rm -rf {js,less,metadata,scss,sprites,svgs}
find css -type f -not -name 'all.min.css' -delete
diff --git a/www/assets/images/weather-fog.svg b/www/assets/images/weather-fog.svg
new file mode 100644
index 0000000..7d06015
--- /dev/null
+++ b/www/assets/images/weather-fog.svg
@@ -0,0 +1,106 @@
+
+
+
+
diff --git a/www/assets/images/weather-hazard.svg b/www/assets/images/weather-hazard.svg
new file mode 100644
index 0000000..6fbade0
--- /dev/null
+++ b/www/assets/images/weather-hazard.svg
@@ -0,0 +1,196 @@
+
+
+
+
diff --git a/www/assets/images/weather-heat.svg b/www/assets/images/weather-heat.svg
new file mode 100644
index 0000000..ba0df95
--- /dev/null
+++ b/www/assets/images/weather-heat.svg
@@ -0,0 +1,103 @@
+
+
+
+
diff --git a/www/assets/images/weather-mostly-sunny.svg b/www/assets/images/weather-mostly-sunny.svg
new file mode 100644
index 0000000..3a9b798
--- /dev/null
+++ b/www/assets/images/weather-mostly-sunny.svg
@@ -0,0 +1,93 @@
+
+
+
+
diff --git a/www/assets/js/toolbox_weather.js b/www/assets/js/toolbox_weather.js
index b576e3e..429e558 100644
--- a/www/assets/js/toolbox_weather.js
+++ b/www/assets/js/toolbox_weather.js
@@ -40,25 +40,189 @@ function loadWeather(reload) {
}
requestfinished = true;
if (resp.status == "OK") {
- var mintemp = (getStorage("units") == "metric" ? Math.round(ftoc(resp.temp.min)) + " °C" : Math.round(resp.temp.min) + " °F");
- var maxtemp = (getStorage("units") == "metric" ? Math.round(ftoc(resp.temp.max)) + " °C" : Math.round(resp.temp.max) + " °F");
- $("#lowtemp").html(mintemp);
- $("#hightemp").html(maxtemp);
- $("#precipchance").text(Math.round(resp.precipitation.chance * 100.0) + "% chance");
+ //
+ // Summary tab
+ //
+ var mintemp = (getStorage("units") == "metric" ? Math.round(ftoc(resp.summary.temp.min)) + " °C" : Math.round(resp.summary.temp.min) + " °F");
+ var maxtemp = (getStorage("units") == "metric" ? Math.round(ftoc(resp.summary.temp.max)) + " °C" : Math.round(resp.summary.temp.max) + " °F");
+ $("#summarylowtemp").html(mintemp);
+ $("#summaryhightemp").html(maxtemp);
+ $("#summaryprecipchance").text(Math.round(resp.summary.precipitation.chance * 100.0) + "% chance");
if (getStorage("units") == "metric") {
- $("#windspeed").text(Math.round(resp.windspeed * 1.609344) + " km/h");
+ $("#summarywindspeed").text(Math.round(resp.summary.windspeed * 1.609344) + " km/h");
} else {
- $("#windspeed").text(Math.round(resp.windspeed) + " mph");
+ $("#summarywindspeed").text(Math.round(resp.summary.windspeed) + " mph");
}
- if (SETTINGS.weathericons.includes(resp.icon)) {
- $("#weathericon").attr("src", "assets/images/weather-" + resp.icon + ".svg");
+ if (SETTINGS.weathericons.includes(resp.summary.icon)) {
+ $("#summaryweathericon").attr("src", "assets/images/weather-" + resp.summary.icon + ".svg");
} else {
- $("#weathericon").attr("src", "assets/images/weather-none.svg");
+ $("#summaryweathericon").attr("src", "assets/images/weather-none.svg");
}
- $("#forecast-location").text(resp.location_name);
- $("#forecast-info").text("Forecast covers the next " + resp.forecast_hours + " hours (until " + timestampToTimeString(resp.forecast_until) + ").");
- $("#forecast-creditlink").text(resp.source.text);
- $("#forecast-creditlink").attr("onclick", "openExternalBrowser('" + resp.source.url + "')");
+ $("#summary-forecast-location").text(resp.location_name);
+ $("#summary-forecast-info").text("Forecast covers the next " + resp.summary.forecast_hours + " hours (until " + timestampToTimeString(resp.summary.forecast_until) + ").");
+ $("#summary-forecast-creditlink").text(resp.source.text);
+ $("#summary-forecast-creditlink").attr("onclick", "openExternalBrowser('" + resp.source.url + "')");
+
+
+ //
+ // Now tab
+ //
+ var temp = (getStorage("units") == "metric" ? Math.round(ftoc(resp.now.temp)) + " °C" : Math.round(resp.now.temp) + " °F");
+ var feelslike = (getStorage("units") == "metric" ? Math.round(ftoc(resp.now.feelslike)) + " °C" : Math.round(resp.now.feelslike) + " °F");
+ $("#nowtemp").html(temp);
+ $("#nowfeelslike").html(feelslike);
+ if (SETTINGS.weathericons.includes(resp.now.icon)) {
+ $("#nowweathericon").attr("src", "assets/images/weather-" + resp.now.icon + ".svg");
+ } else {
+ $("#nowweathericon").attr("src", "assets/images/weather-none.svg");
+ }
+
+ var uvcolor = "#4CAF50";
+ if (resp.now.uv_index > 10) {
+ uvcolor = "#673AB7";
+ } else if (resp.now.uv_index > 7) {
+ uvcolor = "#F44336";
+ } else if (resp.now.uv_index > 5) {
+ uvcolor = "#FF9800";
+ } else if (resp.now.uv_index > 2) {
+ uvcolor = "#FFEB3B";
+ }
+ app.gauge.get('#nowuvindexgauge').update({
+ value: Math.max(resp.now.uv_index / 11, 0.05),
+ valueText: resp.now.uv_index,
+ borderColor: uvcolor,
+ });
+
+ if (getStorage("units") == "metric") {
+ $("#nowwindspeed").text(Math.round(resp.now.windspeed * 1.609344) + " km/h");
+ } else {
+ $("#nowwindspeed").text(Math.round(resp.now.windspeed) + " mph");
+ }
+
+ $("#nowwinddirection").text(degreesToCardinal(resp.now.winddirection));
+
+ var minutelydata = [];
+ var maxprecip = 0;
+ for (var i = 0; i < resp.today.minutely.length; i++) {
+ precip = resp.today.minutely[i].precip;
+ if (getStorage("units") == "metric") {
+ precip = precip * 25.4;
+ }
+
+ minutelydata[i] = {
+ x: new Date(resp.today.minutely[i].time * 1000),
+ y: precip
+ };
+ if (precip > maxprecip) {
+ maxprecip = precip;
+ }
+ }
+
+ if (maxprecip > 0) {
+ // only make rain chart if there's rain
+ var precipChart = new Chart(document.getElementById('precipchart'), {
+ type: "line",
+ data: {
+ datasets: [
+ {
+ fill: true,
+ data: minutelydata,
+ borderWidth: 0,
+ spanGaps: true,
+ backgroundColor: "#03A9F4",
+ borderColor: "#03A9F4"
+ }
+ ]
+ },
+ options: {
+ responsive: true,
+ elements: {
+ point: {
+ radius: 0
+ }
+ },
+ scales: {
+ xAxes: [{
+ type: 'time',
+ display: true,
+ scaleLabel: {
+ display: false
+ },
+ gridLines: {
+ display: true,
+ drawBorder: false
+ },
+ time: {
+ unit: 'minute',
+ stepSize: 5,
+ displayFormats: {
+ minute: 'h:mm',
+ hour: 'hA'
+ }
+ }
+ }],
+ yAxes: [{
+ display: true,
+ scaleLabel: {
+ display: true
+ },
+ gridLines: {
+ display: false,
+ drawBorder: false
+ },
+ ticks: {
+ min: 0,
+ max: Math.round(maxprecip),
+ stepSize: (Math.round(maxprecip) / 2),
+ callback: function (value, index, values) {
+ if (getStorage("units") == "metric") {
+ return value + ' mm';
+ } else {
+ return value + ' in';
+ }
+ }
+ }
+ }]
+ },
+ legend: {
+ display: false
+ },
+ tooltips: {
+ enabled: false
+ }
+ }
+ });
+ }
+
+ forecastItems = [];
+
+ for (var i = 1; i < resp.forecast.length; i++) {
+ var low = (getStorage("units") == "metric" ? Math.round(ftoc(resp.forecast[i].temp.min)) : Math.round(resp.forecast[i].temp.min));
+ var high = (getStorage("units") == "metric" ? Math.round(ftoc(resp.forecast[i].temp.max)) + " °C" : Math.round(resp.forecast[i].temp.max) + " °F");
+ forecastItems.push({
+ day: formatTimestamp('l', resp.forecast[i].date),
+ temps: low + " to " + high,
+ uv_index: resp.forecast[i].uv_index
+ });
+ }
+
+ forecastItemTemplate = '
'
+ + ''
+ + '
'
+ + '
'
+ + ' '
+ + ' {{temps}}'
+ + '
UV Index: {{uv_index}}'
+ + '
'
+ + '
'
+ + '
'
+ + '';
+
+ forecastVirtualList = app.virtualList.create({
+ el: "#forecast-list",
+ items: forecastItems,
+ itemTemplate: forecastItemTemplate
+ });
} else {
app.dialog.alert(resp.message, "Error");
}
diff --git a/www/assets/js/util.js b/www/assets/js/util.js
index e0819ee..e9ba4cb 100644
--- a/www/assets/js/util.js
+++ b/www/assets/js/util.js
@@ -272,4 +272,46 @@ function time() {
*/
function timeDiff(compareto) {
return time() - compareto;
+}
+
+/**
+ * Convert decimal degrees to cardinal/compass directions.
+ * https://gist.github.com/felipeskroski/8aec22f01dabdbf8fb6b
+ * @param {type} deg
+ * @returns {String}
+ */
+function degreesToCardinal(deg) {
+ if (deg > 11.25 && deg < 33.75) {
+ return "NNE";
+ } else if (deg > 33.75 && deg < 56.25) {
+ return "ENE";
+ } else if (deg > 56.25 && deg < 78.75) {
+ return "E";
+ } else if (deg > 78.75 && deg < 101.25) {
+ return "ESE";
+ } else if (deg > 101.25 && deg < 123.75) {
+ return "ESE";
+ } else if (deg > 123.75 && deg < 146.25) {
+ return "SE";
+ } else if (deg > 146.25 && deg < 168.75) {
+ return "SSE";
+ } else if (deg > 168.75 && deg < 191.25) {
+ return "S";
+ } else if (deg > 191.25 && deg < 213.75) {
+ return "SSW";
+ } else if (deg > 213.75 && deg < 236.25) {
+ return "SW";
+ } else if (deg > 236.25 && deg < 258.75) {
+ return "WSW";
+ } else if (deg > 258.75 && deg < 281.25) {
+ return "W";
+ } else if (deg > 281.25 && deg < 303.75) {
+ return "WNW";
+ } else if (deg > 303.75 && deg < 326.25) {
+ return "NW";
+ } else if (deg > 326.25 && deg < 348.75) {
+ return "NNW";
+ } else {
+ return "N";
+ }
}
\ No newline at end of file
diff --git a/www/index.html b/www/index.html
index 4fd313f..6c80a79 100644
--- a/www/index.html
+++ b/www/index.html
@@ -15,6 +15,7 @@
+
@@ -46,6 +47,7 @@
+
diff --git a/www/package-lock.json b/www/package-lock.json
index 906767e..92b4750 100644
--- a/www/package-lock.json
+++ b/www/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "PackageHelper",
- "version": "1.5.0",
+ "version": "1.5.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -20,7 +20,7 @@
"@mapbox/geojson-rewind": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.4.1.tgz",
- "integrity": "sha512-mxo2MEr7izA1uOXcDsw99Kgg6xW3P4H2j4n1lmldsgviIelpssvP+jQDivFKOHrOVJDpTTi5oZJvRcHtU9Uufw==",
+ "integrity": "sha1-NX15MArbf+x8HwkVEpiLymRY8Gg=",
"requires": {
"@mapbox/geojson-area": "0.2.2",
"concat-stream": "~1.6.0",
@@ -31,14 +31,14 @@
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
}
}
},
"@mapbox/geojson-types": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz",
- "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw=="
+ "integrity": "sha1-muz2QssA6rEIClfE+UmmW0pYRtY="
},
"@mapbox/jsonlint-lines-primitives": {
"version": "2.0.2",
@@ -48,7 +48,7 @@
"@mapbox/mapbox-gl-supported": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz",
- "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg=="
+ "integrity": "sha1-9gtqVaXY5e6Qg0fSzkJQsVED3I4="
},
"@mapbox/point-geometry": {
"version": "0.1.0",
@@ -58,7 +58,7 @@
"@mapbox/tiny-sdf": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz",
- "integrity": "sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg=="
+ "integrity": "sha1-FqIMRwdBv+kZHeszb0bhlNpKkf8="
},
"@mapbox/unitbezier": {
"version": "0.0.0",
@@ -68,7 +68,7 @@
"@mapbox/vector-tile": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz",
- "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==",
+ "integrity": "sha1-06dMkEAtBuiexm3knsgX/1NAlmY=",
"requires": {
"@mapbox/point-geometry": "~0.1.0"
}
@@ -76,7 +76,7 @@
"@mapbox/whoots-js": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz",
- "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q=="
+ "integrity": "sha1-SXxnoc71DRokWbpg8xXkSNKth/4="
},
"@zxing/library": {
"version": "0.15.2",
@@ -95,7 +95,7 @@
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8="
},
"bwip-js": {
"version": "2.0.6",
@@ -111,10 +111,56 @@
"redeyed": "~0.4.0"
}
},
+ "chart.js": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.3.tgz",
+ "integrity": "sha512-+2jlOobSk52c1VU6fzkh3UwqHMdSlgH1xFv9FKMqHiNCpXsGPQa/+81AFa+i3jZ253Mq9aAycPwDjnn1XbRNNw==",
+ "requires": {
+ "chartjs-color": "^2.1.0",
+ "moment": "^2.10.2"
+ }
+ },
+ "chartjs-color": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
+ "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
+ "requires": {
+ "chartjs-color-string": "^0.6.0",
+ "color-convert": "^1.9.3"
+ }
+ },
+ "chartjs-color-string": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
+ "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ },
+ "dependencies": {
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ }
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
@@ -143,7 +189,7 @@
"earcut": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz",
- "integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ=="
+ "integrity": "sha1-QbC8NfY+D+gNp83f8oUR5+LoDRE="
},
"esprima": {
"version": "1.0.4",
@@ -164,7 +210,7 @@
"geojson-vt": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz",
- "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg=="
+ "integrity": "sha1-+K22FNLB0/bufEJlytS7861gyLc="
},
"gl-matrix": {
"version": "3.2.1",
@@ -174,17 +220,17 @@
"grid-index": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz",
- "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA=="
+ "integrity": "sha1-l/giHt7BAmyDd7hkRqfHHnlSLqc="
},
"ieee754": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
- "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q="
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w="
},
"isarray": {
"version": "1.0.0",
@@ -204,7 +250,7 @@
"kdbush": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz",
- "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew=="
+ "integrity": "sha1-+EhHlNRwBMwthe06eTU9vgq8K/A="
},
"leaflet": {
"version": "1.6.0",
@@ -269,6 +315,11 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
+ "moment": {
+ "version": "2.27.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz",
+ "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ=="
+ },
"murmurhash-js": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz",
@@ -277,12 +328,12 @@
"path-to-regexp": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.1.0.tgz",
- "integrity": "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw=="
+ "integrity": "sha1-Cxj4i3oM4L+uaiWZDJCauG9RJCc="
},
"pbf": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
- "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
+ "integrity": "sha1-tMG55yr5Zs2CxlMWkRFcwECf/io=",
"requires": {
"ieee754": "^1.1.12",
"resolve-protobuf-schema": "^2.1.0"
@@ -291,27 +342,27 @@
"potpack": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz",
- "integrity": "sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw=="
+ "integrity": "sha1-0bGv2J5Mj3dihl7DC9ESq3Z+Lr8="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
},
"protocol-buffers-schema": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz",
- "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA=="
+ "integrity": "sha1-Lw6jHKlmJ9aAvy/vrn6/orZFPq4="
},
"quickselect": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
- "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
+ "integrity": "sha1-8ZaApIal7vtYEwPgI+mPqvJd0Bg="
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -333,7 +384,7 @@
"resolve-protobuf-schema": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
- "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+ "integrity": "sha1-nKmp5pzxkrva8QBuwZc5SKpKN1g=",
"requires": {
"protocol-buffers-schema": "^3.3.1"
}
@@ -346,12 +397,12 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
},
"sharkdown": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/sharkdown/-/sharkdown-0.1.1.tgz",
- "integrity": "sha512-exwooSpmo5s45lrexgz6Q0rFQM574wYIX3iDZ7RLLqOb7IAoQZu9nxlZODU972g19sR69OIpKP2cpHTzU+PHIg==",
+ "integrity": "sha1-ZEhL0PCPNH+DGen/lHpnD2tIsbI=",
"requires": {
"cardinal": "~0.4.2",
"minimist": "0.0.5",
@@ -376,12 +427,12 @@
"ssr-window": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-1.0.1.tgz",
- "integrity": "sha512-dgFqB+f00LJTEgb6UXhx0h+SrG50LJvti2yMKMqAgzfUmUXZrLSv2fjULF7AWGwK25EXu8+smLR3jYsJQChPsg=="
+ "integrity": "sha1-MHUqakZm53Z/C35qpvwv29DZs2k="
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
"requires": {
"safe-buffer": "~5.1.0"
}
@@ -389,7 +440,7 @@
"supercluster": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.0.0.tgz",
- "integrity": "sha512-8VuHI8ynylYQj7Qf6PBMWy1PdgsnBiIxujOgc9Z83QvJ8ualIYWNx2iMKyKeC4DZI5ntD9tz/CIwwZvIelixsA==",
+ "integrity": "sha1-ddR0+vsKBV21Uu1717vaWD9qsyE=",
"requires": {
"kdbush": "^3.0.0"
}
@@ -397,12 +448,12 @@
"template7": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/template7/-/template7-1.4.2.tgz",
- "integrity": "sha512-eoKnScBMDk7lyj7+iCzKbxGiSLLlQk0DNvmclyJuMCUKxy9JrFuAB+GD5iplF4WiQPtMdI06CHHks3avL22JXA=="
+ "integrity": "sha1-YvMpWTYeRV7Bce+e8z0pynEw4Ak="
},
"text-encoding": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
- "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==",
+ "integrity": "sha1-+JXoNuRZkGJAhmAXmOqY6PNu5kM=",
"optional": true
},
"through": {
@@ -413,12 +464,12 @@
"tinyqueue": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
- "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="
+ "integrity": "sha1-ZNhJLr8554Ade9NAYuKbRbIDXwg="
},
"ts-custom-error": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.1.1.tgz",
- "integrity": "sha512-f/syoy+pTE4z82qaiRuthEeZtCGNKzlfs0Zc8jpQFcz/CYMaFSwFSdfFt1sSFnPlDLOEm7RCROdIxZ44N8UlwA=="
+ "integrity": "sha1-0wx0FUYdrJPcLMnp6y2ukuZCOQE="
},
"typedarray": {
"version": "0.0.6",
@@ -433,7 +484,7 @@
"vt-pbf": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.1.tgz",
- "integrity": "sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==",
+ "integrity": "sha1-sPYn45oQzpHZQ7iY7SNj0hiZ+4I=",
"requires": {
"@mapbox/point-geometry": "0.1.0",
"@mapbox/vector-tile": "^1.3.1",
diff --git a/www/package.json b/www/package.json
index 888e266..a487c1d 100644
--- a/www/package.json
+++ b/www/package.json
@@ -7,6 +7,7 @@
"@fortawesome/fontawesome-free": "^5.12.1",
"@zxing/library": "^0.15.2",
"bwip-js": "^2.0.6",
+ "chart.js": "^2.9.3",
"framework7": "^5.5.1",
"jquery": "^3.4.1",
"jsbarcode": "^3.11.0",
diff --git a/www/pages/toolbox/weather.html b/www/pages/toolbox/weather.html
index 0e9b2bf..383faee 100644
--- a/www/pages/toolbox/weather.html
+++ b/www/pages/toolbox/weather.html
@@ -21,34 +21,94 @@
-
-
-
-
-
-
-
-
-
Low: ...
-
-
-
High: ...
-
-
-
Precipitation: ...
-
Wind speed: ...
+
+
+
+
+
+
+
+
+
+
+
+
Low: ...
+
+
+
High: ...
+
+
+
Precipitation: ...
+ Wind speed: ...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
...
+ Feels like ...
+
+
+
+
+
+
+
+ Wind: ...
+
+ ...
+
+
+
-
+
diff --git a/www/settings.js b/www/settings.js
index 4190cfe..ca8bb2a 100644
--- a/www/settings.js
+++ b/www/settings.js
@@ -115,9 +115,13 @@ var SETTINGS = {
"clear",
"cloudy",
"partly-cloudy",
+ "mostly-sunny",
"rain",
"snow",
+ "fog",
+ "heat",
"windy",
+ "hazard",
"none"
],
scannerevents: [
@@ -357,7 +361,7 @@ var SETTINGS = {
geocodeapi: "https://apis.netsyms.net/packagehelper/geocode.php",
geocodebarcodeapi: "https://apis.netsyms.net/packagehelper/geocode_barcode.php",
trackingapi: "https://apis.netsyms.net/packagehelper/track.php",
- weatherapi: "https://apis.netsyms.net/packagehelper/weather.php",
+ weatherapi: "http://localhost/packagehelperapi/weather.php",
geoipapi: "https://apis.netsyms.net/packagehelper/geoip.php",
sharelistapi: "https://apis.netsyms.net/packagehelper/sharepackagelist.php",
loginurl: "https://apis.netsyms.net/packagehelper/login/",