From 1227f0338751af5dd14b3755530be2c9c39e5f32 Mon Sep 17 00:00:00 2001 From: Anastasiia Bakai Date: Sun, 12 May 2024 22:05:43 +0300 Subject: [PATCH] May update for UI ## Basic changes: - Fixed url in sensor owner (in sensors list) - Fixed layout for popups - Added some translations - Map controls in ther bottom redesign - Replaced theme coloring with only system preferrable (works only for map now) - Fixed bug in chart (not displayed all measurement types for some sensors) - Added scales info into the Sensor popup (with localization) - Added "Loaded sesnsors" quality in the header - Added detecting of available units in the footer selector - Removed Radiation icon (creeepy) ## Technical details: - fixed main layout: deleted all unused elements, replaced some 'fixed' to 'absolute' - added default styles for: inputs, select - fixed location icon - changed map controls layout - added Popover API - moved functions for working with IndexedDB to a separate file - added names of db and table for bookmarks to store vault - sensorPopup big changes in layout ## TECH ALERT: - replaced big part of code SensorPopup component - removed many components (sorry!) - removed Footer/Switcher component - removed store state and localStorage for theme - Temporarily removed PWA intallation message - Added Broadcasting on sensor added, clear ## BUGFIX NEEDED - check map tiles img after rerouting - translate cities in import --- .gitignore | 2 + index.html | 8 +- package.json | 2 +- public/app-icon-120.png | Bin 0 -> 8396 bytes public/app-icon-192.png | Bin 0 -> 13477 bytes public/app-icon-256.png | Bin 0 -> 18860 bytes public/app-icon-512-rounded.png | Bin 0 -> 40993 bytes public/app-icon-512.png | Bin 0 -> 39831 bytes public/{ => untitled folder}/192.png | Bin public/{ => untitled folder}/256.png | Bin public/{ => untitled folder}/512.png | Bin .../{ => untitled folder}/icon512_rounded.png | Bin .../{ => untitled folder}/maskable-icon.png | Bin .../sensors-world-app.png | Bin src/assets/styles/base.css | 284 +++++--- src/assets/styles/variables.css | 33 +- src/components/Bookmarks.vue | 82 +++ src/components/Map.vue | 268 ++++--- .../colorfulScale/ColorfulScale.vue | 213 ------ .../colorfulScale/ColorfulScaleItem.vue | 145 ---- src/components/footer/Footer.vue | 513 ++------------ src/components/footer/HistoryImport.vue | 108 +++ src/components/footer/HistoryPopup.vue | 2 +- src/components/footer/MeasuresPopup.vue | 245 ------- src/components/footer/Switcher.vue | 172 ----- src/components/header/BookmarkPopup.vue | 138 ---- src/components/header/ForkPopup.vue | 41 -- src/components/header/Header.vue | 382 +++------- src/components/header/MenuPopup.vue | 113 --- src/components/header/ThemeSwitcher.vue | 109 --- src/components/measures/MeasureButton.vue | 42 -- src/components/measures/MeasureInfo.vue | 53 -- src/components/measures/Measures.vue | 102 +-- src/components/measures/MeasuresPopup.vue | 127 ---- src/components/sensor/Bookmark.vue | 260 +++---- src/components/sensor/Chart.vue | 12 +- src/components/sensor/MeasureButton.vue | 156 ----- src/components/sensor/SensorPopup.vue | 654 ++++++------------ src/idb.js | 75 ++ src/measurements/___example.js | 20 +- src/measurements/co.js | 21 +- src/measurements/gc.js | 25 +- src/measurements/humidity.js | 25 +- src/measurements/nh3.js | 29 + src/measurements/no2.js | 30 +- src/measurements/pm1.js | 1 - src/measurements/pm10.js | 21 +- src/measurements/pm25.js | 21 +- src/measurements/pressure.js | 5 +- src/measurements/temperature.js | 25 +- src/plugins/fontawesome.js | 46 +- src/sensors.js | 11 +- src/store.js | 34 +- src/translate.js | 63 +- src/utils/map/marker.js | 14 + src/views/AirMeasurements.vue | 24 +- src/views/Main.vue | 252 +++---- src/views/PrivacyPolicy.vue | 12 +- vite.config.js | 10 +- 59 files changed, 1550 insertions(+), 3480 deletions(-) create mode 100644 public/app-icon-120.png create mode 100644 public/app-icon-192.png create mode 100644 public/app-icon-256.png create mode 100644 public/app-icon-512-rounded.png create mode 100644 public/app-icon-512.png rename public/{ => untitled folder}/192.png (100%) rename public/{ => untitled folder}/256.png (100%) rename public/{ => untitled folder}/512.png (100%) rename public/{ => untitled folder}/icon512_rounded.png (100%) rename public/{ => untitled folder}/maskable-icon.png (100%) rename public/{ => untitled folder}/sensors-world-app.png (100%) create mode 100644 src/components/Bookmarks.vue delete mode 100644 src/components/colorfulScale/ColorfulScale.vue delete mode 100644 src/components/colorfulScale/ColorfulScaleItem.vue create mode 100644 src/components/footer/HistoryImport.vue delete mode 100644 src/components/footer/MeasuresPopup.vue delete mode 100644 src/components/footer/Switcher.vue delete mode 100644 src/components/header/BookmarkPopup.vue delete mode 100644 src/components/header/ForkPopup.vue delete mode 100644 src/components/header/MenuPopup.vue delete mode 100644 src/components/header/ThemeSwitcher.vue delete mode 100644 src/components/measures/MeasureButton.vue delete mode 100644 src/components/measures/MeasureInfo.vue delete mode 100644 src/components/measures/MeasuresPopup.vue delete mode 100644 src/components/sensor/MeasureButton.vue create mode 100644 src/idb.js diff --git a/.gitignore b/.gitignore index 38adffa..26b36f2 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,5 @@ coverage *.njsproj *.sln *.sw? + +commit.txt \ No newline at end of file diff --git a/index.html b/index.html index 33ace38..3668530 100644 --- a/index.html +++ b/index.html @@ -2,13 +2,13 @@ - + - - + + - Decentralized Sensors Network - map of IoT sensors connected to Web3 + Web3 public sensors map
diff --git a/package.json b/package.json index f70efa7..d350a70 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.5.0", "private": true, "scripts": { - "dev": "vite", + "dev": "vite --host", "build": "vite build", "preview": "vite preview --port 4173", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" diff --git a/public/app-icon-120.png b/public/app-icon-120.png new file mode 100644 index 0000000000000000000000000000000000000000..df15127ddb006fa16607d293f96abba7ddf4a5a9 GIT binary patch literal 8396 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 TL^CPz00000NkvXXu0mjf{%iS4 literal 0 HcmV?d00001 diff --git a/public/app-icon-256.png b/public/app-icon-256.png new file mode 100644 index 0000000000000000000000000000000000000000..c83191cc12e611286de175ebd8698926f5a681c5 GIT binary patch literal 18860 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 literal 0 HcmV?d00001 diff --git a/public/app-icon-512-rounded.png b/public/app-icon-512-rounded.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c2792183cb0d89405c9638f9ca652f7e2a9ecc GIT binary patch literal 40993 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�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 literal 0 HcmV?d00001 diff --git a/public/app-icon-512.png b/public/app-icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..886bd5c72c9cd7afd9fb54f816af3d71483cdff8 GIT binary patch literal 39831 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 U(D4n30ich$>2Z^4l6&m`0MSvU"); + background-position-x: calc(100% - var(--app-inputpadding)); + background-position-y: 50%; + background-repeat: no-repeat; + background-size: .5rem; + padding-right: calc(var(--app-inputpadding) * 1.5 + 0.5rem); user-select: none; } -.sensors-select-border { - padding: 4px 10px; - background-color: #fff; - border: 2px solid #000; - border-radius: 5px; +input[type=text]:focus, input[type=password]:focus { + --app-bordercolor: var(--color-navy); } -.sensors-select-border svg { - font-size: 10px; - pointer-events: none; - position: absolute; - right: 8px; - top: calc(50% - 0.55rem*0.5); +input[type=checkbox] { + border: var(--app-borderwidth) solid var(--app-bordercolor); + height: calc(var(--app-inputheight) * .5); + width: calc(var(--app-inputheight) * .5); } -.sensors-select select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; +input[type=checkbox]:not(:last-child) { + margin-right: calc(var(--gap) * .5); +} - border: 2px solid #fff; - border-radius: 4px; - outline: 0; +input[type=submit], .button { + background-color: var(--app-buttoncolor); + border-color: var(--app-buttoncolor); + color: var(--app-buttontextcolor); +} - font-size: inherit; - font-family: inherit; - font-weight: inherit; - color: inherit; - text-transform: inherit; +input[type=submit]:not(:disabled):active, .button:not(:disabled):active { --app-buttoncolor: var(--app-buttoncolor-active); } +input[type=submit]:not(:disabled):hover, .button:not(:disabled):hover { --app-buttoncolor: var(--app-buttoncolor-hover); } + +select:not([disabled]), +input[type=checkbox]:not([disabled]), +input[type=submit]:not([disabled]), +.button:not([disabled]) { cursor: pointer; +} + +.button-green { + --app-buttoncolor: var(--color-green); +} - padding: 0rem 0.2rem; - +.button > *:not(:last-child) { + margin-right: calc(var(--gap) * 0.5); } -.sensors-select.green, -.title.green { - color: var(--color-green) +label { + font-weight: 700; } +/* - FORMS, INPUTS */ -.sensors-select.blue { - color: var(--color-blue) +/* + POPOVER API */ +/* [popover] { +} */ + +:popover-open { + background-color: var(--app-popoverbg); + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + border-radius: var(--app-inputbradius); + border: none; + inset: unset; + padding: var(--gap); } -/* end of SELECT */ +[popovertarget] { + transition: opacity 0.3s ease-in-out; +} -/* INPUT */ -input { - font-size: 16px; - font-family: var(--font-family--normal); - font-weight: 700; - border: 1px solid #000; - background-color:#fff; - padding: 0.3rem 1rem; +:popover-open ~ [popovertarget] { + opacity: .6; +} + +:popover-open::backdrop { + backdrop-filter: grayscale(1); +} + +.popovercontrol { + align-items: center; + background-color: var(--app-inputbg); + border-radius: 50%; + border: var(--app-borderwidth) solid var(--app-bordercolor); + cursor: pointer; + display: flex; + height: var(--app-inputheight); + justify-content: center; + user-select: none; + width: var(--app-inputheight); + color: var(--app-textcolor); + font-size: var(--font-size); +} + +.popovercontrol .svg-inline--fa path { + fill: var(--app-textcolor); +} +/* - POPOVER API */ + +/* + SCROLLABLE CONTENT */ +.scrollable-y { + overflow-y: auto; + max-height: 100%; +} +::-webkit-scrollbar { + width: 7px; +} +::-webkit-scrollbar-track { border-radius: 4px; - transition: color 0.33s ease-in-out, background-color 0.33s ease-in-out; + background: #EAEAEA; +} +::-webkit-scrollbar-thumb { + border-radius: 4px; + background: #A5A5A5; +} +/* - SCROLLABLE CONTENT */ + +/* + FLEX */ +.flexline { + display: flex; + gap: var(--gap); + align-items: center; +} + +.flexline.space-between { + justify-content: space-between; +} + +.flexline.align-start { + align-items: start; +} +/* - FLEX */ + +/* + TEXT */ +.clipoverflow { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.textsmall { + font-size: .8em; +} +/* - TEXT */ + +section:not(:last-child) { + margin-bottom: calc(var(--gap) * 2); +} + +#app { + position: relative; + max-width: 100vw; + min-height: 100svh; +} + +#app.map { + overflow: hidden; } -/* end of INPUT */ .container { padding: calc(var(--gap) * 0.5) var(--gap); - pointer-events: all; - font-family: var(--font-family--normal); - font-weight: 700; - text-transform: uppercase; +} + +.container-pagetext { + padding: calc(var(--gap) * 7) var(--gap) calc(var(--gap) * 3); + margin: 0 auto; + max-width: 1200px; } .sensors-container { @@ -179,10 +274,12 @@ input { transition: color 0.33s ease-in-out, background-color 0.33s ease-in-out; } -.text-small { - font-size: 80%; +@media (prefers-color-scheme: dark) { + .text-changabletheme {color: var(--color-light)} } +.text-small { font-size: .8em; } + .text-tip { margin-top: var(--gap); /* margin-bottom: calc(var(--gap) * 2); */ @@ -274,14 +371,12 @@ input { /* POPUP */ .popup, .popup-js { + background-color: var(--color-light); + color: var(--color-dark); display: none; opacity: 0; position: relative; transform: translateY(20px); - padding-right: calc(var(--gap) * 2.2) !important; - background-color: var(--color-light); - color: var(--color-dark); - border-radius: 4px; transition: color 0.33s ease-in-out, background-color 0.33s ease-in-out; } @@ -428,11 +523,6 @@ input { .sensors-dateselect .sensors-switcher label { margin: 0; } - - /* geo location */ - .leaflet-right .leaflet-control { - margin-top: 50px; - } } @media screen and (max-width: 600px) { @@ -447,14 +537,6 @@ input { /* end of DATE SELECT */ -@media screen and (max-width: 450px) { - /* geo location */ - .leaflet-right .leaflet-control { - margin-bottom: 60px; - } -} - - /* ANIMATION */ @keyframes fadeIn { to { diff --git a/src/assets/styles/variables.css b/src/assets/styles/variables.css index b06db35..fd5cd5c 100644 --- a/src/assets/styles/variables.css +++ b/src/assets/styles/variables.css @@ -1,4 +1,4 @@ -body { +:root { --color-light: #fff; --color-gray: #4e4e4f; --color-middle-gray: #B6BDC4; @@ -12,7 +12,7 @@ body { --color-yellow: #f5ff00; --color-orange: #ff9d00; --color-purple: #7a00da; - --color-navy: #2a5cbc; + --color-navy: hsl(219, 63%, 45%); --color-link: var(--color-blue); --color-link-hover: var(--color-green); @@ -25,12 +25,29 @@ body { --sensor-popup-bg: #ffffff; --main-bg: #ffffff; + + --app-borderwidth: 2px; + --app-bordercolor: #000; + --app-inputbg: #fff; + --app-inputpadding: .4rem; + --app-inputbradius: .3rem; + --app-textcolor: #000; + --app-inputheight: 2.4rem; + --app-popoverbg: #fff; + --app-buttoncolor:hsl(219, 63%, 45%); + --app-buttoncolor-active:hsl(219, 63%, 60%); + --app-buttoncolor-hover:hsl(219, 63%, 35%); + --app-buttontextcolor: #fff; + --app-popoverbg: #fff; } -body.dark { - --color-light: #000; - --color-dark: #fff; +@media screen and (max-width: 500px) { + :root { + --font-size: .8rem; + --gap: .5rem; + } - --sensor-popup-bg: #5a5a5a; - --main-bg: #2f2f2f; -} + .leaflet-bottom .leaflet-control { + margin-bottom: 0; + } +} \ No newline at end of file diff --git a/src/components/Bookmarks.vue b/src/components/Bookmarks.vue new file mode 100644 index 0000000..8d5c7e2 --- /dev/null +++ b/src/components/Bookmarks.vue @@ -0,0 +1,82 @@ + + + + + \ No newline at end of file diff --git a/src/components/Map.vue b/src/components/Map.vue index 2f8838f..5637961 100755 --- a/src/components/Map.vue +++ b/src/components/Map.vue @@ -1,12 +1,9 @@ + + diff --git a/src/components/colorfulScale/ColorfulScale.vue b/src/components/colorfulScale/ColorfulScale.vue deleted file mode 100644 index e337f2f..0000000 --- a/src/components/colorfulScale/ColorfulScale.vue +++ /dev/null @@ -1,213 +0,0 @@ - - - - - diff --git a/src/components/colorfulScale/ColorfulScaleItem.vue b/src/components/colorfulScale/ColorfulScaleItem.vue deleted file mode 100644 index 4695a97..0000000 --- a/src/components/colorfulScale/ColorfulScaleItem.vue +++ /dev/null @@ -1,145 +0,0 @@ - - - - - diff --git a/src/components/footer/Footer.vue b/src/components/footer/Footer.vue index 9d275af..ee9bf63 100644 --- a/src/components/footer/Footer.vue +++ b/src/components/footer/Footer.vue @@ -1,134 +1,46 @@ - + \ No newline at end of file diff --git a/src/components/footer/HistoryImport.vue b/src/components/footer/HistoryImport.vue new file mode 100644 index 0000000..db25389 --- /dev/null +++ b/src/components/footer/HistoryImport.vue @@ -0,0 +1,108 @@ + + + \ No newline at end of file diff --git a/src/components/footer/HistoryPopup.vue b/src/components/footer/HistoryPopup.vue index 99bf38c..d242769 100644 --- a/src/components/footer/HistoryPopup.vue +++ b/src/components/footer/HistoryPopup.vue @@ -177,7 +177,7 @@ export default { }; - diff --git a/src/components/footer/Switcher.vue b/src/components/footer/Switcher.vue deleted file mode 100644 index 894b157..0000000 --- a/src/components/footer/Switcher.vue +++ /dev/null @@ -1,172 +0,0 @@ - - - - - diff --git a/src/components/header/BookmarkPopup.vue b/src/components/header/BookmarkPopup.vue deleted file mode 100644 index f63684e..0000000 --- a/src/components/header/BookmarkPopup.vue +++ /dev/null @@ -1,138 +0,0 @@ - - - - - diff --git a/src/components/header/ForkPopup.vue b/src/components/header/ForkPopup.vue deleted file mode 100644 index 4f4d9d4..0000000 --- a/src/components/header/ForkPopup.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/src/components/header/Header.vue b/src/components/header/Header.vue index b921238..f23ed9f 100644 --- a/src/components/header/Header.vue +++ b/src/components/header/Header.vue @@ -1,342 +1,126 @@ diff --git a/src/components/header/MenuPopup.vue b/src/components/header/MenuPopup.vue deleted file mode 100644 index 6eff4b5..0000000 --- a/src/components/header/MenuPopup.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - diff --git a/src/components/header/ThemeSwitcher.vue b/src/components/header/ThemeSwitcher.vue deleted file mode 100644 index 3f8fb6b..0000000 --- a/src/components/header/ThemeSwitcher.vue +++ /dev/null @@ -1,109 +0,0 @@ - - - - - diff --git a/src/components/measures/MeasureButton.vue b/src/components/measures/MeasureButton.vue deleted file mode 100644 index 83a0ced..0000000 --- a/src/components/measures/MeasureButton.vue +++ /dev/null @@ -1,42 +0,0 @@ - - - - - diff --git a/src/components/measures/MeasureInfo.vue b/src/components/measures/MeasureInfo.vue deleted file mode 100644 index afc2116..0000000 --- a/src/components/measures/MeasureInfo.vue +++ /dev/null @@ -1,53 +0,0 @@ - - - - - diff --git a/src/components/measures/Measures.vue b/src/components/measures/Measures.vue index 0054da9..27d510c 100644 --- a/src/components/measures/Measures.vue +++ b/src/components/measures/Measures.vue @@ -1,42 +1,39 @@ - - diff --git a/src/components/measures/MeasuresPopup.vue b/src/components/measures/MeasuresPopup.vue deleted file mode 100644 index e8feb1e..0000000 --- a/src/components/measures/MeasuresPopup.vue +++ /dev/null @@ -1,127 +0,0 @@ - - - - - diff --git a/src/components/sensor/Bookmark.vue b/src/components/sensor/Bookmark.vue index 97f3658..b4d1efa 100644 --- a/src/components/sensor/Bookmark.vue +++ b/src/components/sensor/Bookmark.vue @@ -1,214 +1,108 @@ + \ No newline at end of file diff --git a/src/components/sensor/Chart.vue b/src/components/sensor/Chart.vue index 3e8c0ec..17fc2b1 100644 --- a/src/components/sensor/Chart.vue +++ b/src/components/sensor/Chart.vue @@ -11,7 +11,7 @@ import measurements from "../../measurements"; import { moveMarkerTime } from "../../utils/map/marker"; export default { - props: ["log", "measurement", "sensor_id", "model", "type"], + props: ["log", "measurement", "sensor_id", "model", "type", "units"], data() { const self = this; return { @@ -111,8 +111,8 @@ export default { }, computed: { series: function () { - if (this.log.length > 0) { - const measurementNames = Object.keys(this.log[0].data).map((item) => + if (this.log.length > 0 && this.units && this.units.length > 0) { + const measurementNames = this.units.map((item) => item.toLowerCase() ); const series = []; @@ -151,9 +151,6 @@ export default { return this.store.currentActiveMeasure; }, }, - mounted() { - this.fillData(); - }, watch: { sensor_id: function () { this.fillData(); @@ -262,6 +259,9 @@ export default { } }, }, + mounted() { + this.fillData() + }, }; diff --git a/src/components/sensor/MeasureButton.vue b/src/components/sensor/MeasureButton.vue deleted file mode 100644 index 757c9fc..0000000 --- a/src/components/sensor/MeasureButton.vue +++ /dev/null @@ -1,156 +0,0 @@ - - - - - diff --git a/src/components/sensor/SensorPopup.vue b/src/components/sensor/SensorPopup.vue index 6fbeb30..a9bc108 100644 --- a/src/components/sensor/SensorPopup.vue +++ b/src/components/sensor/SensorPopup.vue @@ -1,130 +1,97 @@ @@ -140,36 +107,56 @@ import { hidePath, showPath } from "../../utils/map/marker"; import Bookmark from "./Bookmark.vue"; import Chart from "./Chart.vue"; import Copy from "./Copy.vue"; -import MeasureButton from "./MeasureButton.vue"; export default { emits: ["close"], - props: [ - "sender", - "sensor_id", - "log", - "model", - "address", - "type", - "geo", - "donated_by", - "currentProvider", - ], - components: { MeasureButton, Chart, Copy, Bookmark }, + props: [ "type", "currentProvider", "point"], + components: { Chart, Copy, Bookmark }, data() { return { select: "", measurement: this.type, isShowPath: false, - isSuccessCopy: false, store: useStore(), realtime: this.currentProvider === "realtime", start: moment().format("YYYY-MM-DD"), maxDate: moment().format("YYYY-MM-DD"), - isShared: false, }; }, computed: { + locale() { return localStorage.getItem("locale") || this.$i18n.locale || 'en' }, + + address() { return this.point.address }, + donated_by() { return this.point.donated_by }, + geo() { return this.point.geo }, + log() { return this.point.log }, + model() { return this.point.model }, + sender() { return this.point.sender }, + sensor_id() { return this.point.sensor_id }, + + units() { + /* + Possible units for the sensor */ + let measures = [] + Object.keys(this.log).forEach(key => { + measures.push(Object.keys(Object.values(this.log[key])[0])) + }) + return [...new Set(measures.flat())] + }, + + scales() { + /* + Info for scales for possible units */ + let bufer = [] + Object.keys(measurements).forEach(key => { + if(this.units.some(item => {return item === key})) { + bufer.push(measurements[key]) + } + }) + return bufer + }, + + addressformatted() { + return this.address.country + ', ' + this.address.address.join(', ') + }, isLocationRussion() { return ( this.address.country === "Россия" || this.address.country === "Russia" @@ -220,19 +207,11 @@ export default { measurements[item.toLowerCase()] ? measurements[item.toLowerCase()].states : undefined - ), - // icon: `fa-solid fa-${this.icon(item)}`, - // info: this.$filters.measurementInfo(item), - // color: scale ? getColor(scale, this.last.data[item]) : "", + ) }); } return items; }, - classList() { - return { - [`sensor-popup__header`]: true, - }; - }, measurementFilter(value) { return measurements[value.toLowerCase()]?.label || value; }, @@ -264,6 +243,9 @@ export default { link: function () { return sensors[this.sensor_id] ? sensors[this.sensor_id].link : ""; }, + icon: function () { + return sensors[this.sensor_id] ? sensors[this.sensor_id].icon : ""; + }, last: function () { return this.log[this.log.length - 1]; }, @@ -280,36 +262,19 @@ export default { moment(this.start + " 23:59:59", "YYYY-MM-DD HH:mm:ss").format("X") ); }, + sharable: function() { + return navigator.share && navigator.canShare + } }, methods: { - // changing icon on copy success - successCopy() { - this.isSuccessCopy = true; - setTimeout(() => { - this.isSuccessCopy = false; - }, 2000); - }, - // share event shareData() { - if (navigator.share && navigator.canShare) { - navigator - .share({ - title: - "Decentralized Sensors Network - map of IoT sensors connected to Web3", - url: this.linkSensor ? this.linkSensor : this.link, - }) - .then(() => { - console.log("Callback after sharing"); - }) - .catch(console.error); - } else { - // Implement fallback sharing option - navigator.clipboard.writeText(this.linkSensor); - this.isShared = true; - setTimeout(() => { - this.isShared = false; - }, 2000); - } + navigator + .share({ + title: "Public Sensor Map", + url: this.linkSensor ? this.linkSensor : this.link, + }) + .then(() => { console.log("Shared") }) + .catch(console.error); }, getHistory() { if (this.realtime) { @@ -320,13 +285,14 @@ export default { start: this.startTimestamp, end: this.endTimestamp, }); - }, - }, - updated() { - setTimeout(() => { - this.$refs.content.scrollTop = 0; - }, 100); + } }, + /* Causes some error, needs to be checked */ + // updated() { + // setTimeout(() => { + // this.$refs.content.scrollTop = 0; + // }, 100); + // }, watch: { sensor_id() { this.isShowPath = false; @@ -341,294 +307,118 @@ export default { start() { this.getHistory(); }, - }, + } }; diff --git a/src/idb.js b/src/idb.js new file mode 100644 index 0000000..9ec0020 --- /dev/null +++ b/src/idb.js @@ -0,0 +1,75 @@ +/* Functions for working with IndexedDB */ + +/* + function IDBworkflow + Basic for InxedDB: + - opens and checks for uppropriate version; + - creates objectStore for dbtable + + Usage example: + idbworkflow('db', 1, 'dbtable', 'readonly', store => { + let somearray = [] + store.openCursor().addEventListener('success', e => { + const cursor = e.target.result + if(cursor){ + somearray.push(cursor.value) + cursor.continue() + } + }) + }) + */ +export function IDBworkflow(dbname, dbver, dbtable, mode, onsuccess) { + const IDB = window.indexedDB || window.webkitIndexedDB + if(!IDB) { return } + + let db = null + const DBOpenReq = IDB.open(dbname, dbver) + + DBOpenReq.addEventListener('error', err => { + console.warn(err) + }) + + DBOpenReq.addEventListener('success', e => { + db = e.target.result; + + if(db.objectStoreNames.contains(dbtable)) { + let tx = db.transaction(dbtable, mode); + tx.addEventListener('error', err => { + console.warn(err) + }) + const store = tx.objectStore(dbtable) + onsuccess(store) + } + }) + + + DBOpenReq.addEventListener('upgradeneeded', (e) => { + db = e.target.result + + const oldVersion = e.oldVersion + const newVersion = e.newVersion || db.version + console.log('DB updated from version', oldVersion, 'to', newVersion) + + if (!db.objectStoreNames.contains(dbtable)) { + db.createObjectStore(dbtable, {keyPath: 'id', autoIncrement: true}) + } + }) +} + +/* gets all data from the table */ +export function IDBgettable(dbname, dbver, dbtable) { + return new Promise((resolve) => { + let datafromtable = [] + IDBworkflow(dbname, dbver, dbtable, 'readonly', store => { + store.openCursor().addEventListener('success', e => { + const cursor = e.target.result + if(cursor){ + datafromtable.push(cursor.value) + cursor.continue() + } else { + resolve(datafromtable) + } + }) + }) + }) +} \ No newline at end of file diff --git a/src/measurements/___example.js b/src/measurements/___example.js index 370985f..1a22f19 100644 --- a/src/measurements/___example.js +++ b/src/measurements/___example.js @@ -1,14 +1,28 @@ export default { label: "PM2.5", // ! Обязательное поле. Название + // Необязательное поле, для некоторых значений хочется более человеческого описания + локализация + name: { + en: "Humidity", + ru: "Влажность" + }, unit: "μg/m3", // ! Обязательное поле. Единица измерения chartColor: "#89b268", // Цвет на графике - range: [0, 50, 90], // диапозон значений для отображения цвета + range: [0, 50, 90], // диапазон значений для отображения цвета colors: ["#60bc2a", "#ff9d00", "#fc0202"], // диапозон цвета в зависимости от значения для отрисовки маркера на карте - states: ["good", "attention", "danger", "neutral"], // состояние в зависимости от значения + // зоны для графика, value - высшее значение, color - цвет на графике, label [en/ru] - локализованная подпись короткая + zones: [ + { + value: 50, + color: "#60bc2a", + label: { + en: "Good", + ru: "Хорошо" + } + } + ], calculate: function (v) { // преобразование значения, например для приведения к нужной единице измерения, только для реалтайм return Number(v) * 2; }, - icon: "soap", // Иконка | на данный момент не используется info: "", // Описание | на данный момент не используется }; diff --git a/src/measurements/co.js b/src/measurements/co.js index c89f736..7879599 100644 --- a/src/measurements/co.js +++ b/src/measurements/co.js @@ -2,8 +2,11 @@ import { converterPpmToMgm3 } from "./tools"; export default { label: "CO", + name: { + en: "Carbon monoxide", + ru: "Угарный газ" + }, unit: "mg/m3", - icon: "vial-virus", chartColor: "#c1c1c1", colors: ["#60bc2a", "#ff9d00", "#fc0202"], range: [0, 2, 4, 14], @@ -11,17 +14,33 @@ export default { { value: 0, color: "#60bc2a", + label: { + en: "Good", + ru: "Хорошо" + } }, { value: 2, color: "#12bfcc", + label: { + en: "Satisfyingly", + ru: "Удовлетворительно" + } }, { value: 4, color: "#ff9d00", + label: { + en: "Poor", + ru: "Плохо" + } }, { color: "#7a00da", + label: { + en: "Very poor", + ru: "Очень плохо" + } }, ], calculate: function (v) { diff --git a/src/measurements/gc.js b/src/measurements/gc.js index 19ba561..82e651b 100644 --- a/src/measurements/gc.js +++ b/src/measurements/gc.js @@ -1,24 +1,43 @@ export default { label: "GC", + name: { + en: "Radiation", + ru: "Радиация" + }, unit: "μR/h", - icon: "circle-radiation", chartColor: "#e99152", - range: [2.1, 10, 100, 1000], + range: [2, 10, 100, 1000], zones: [ { - value: 2.1, + value: 2, color: "#60bc2a", + label: { + en: "Background", + ru: "Фоновая" + } }, { value: 10, color: "#03a5ed", + label: { + en: "Moderate", + ru: "Невысокая" + } }, { value: 100, color: "#ff9d00", + label: { + en: "Elevated", + ru: "Повышенная" + } }, { color: "#ff4d00", + label: { + en: "High", + ru: "Высокая" + } }, ], }; diff --git a/src/measurements/humidity.js b/src/measurements/humidity.js index 00127d2..d43b474 100644 --- a/src/measurements/humidity.js +++ b/src/measurements/humidity.js @@ -1,28 +1,51 @@ export default { label: "Hm", + name: { + en: "Humidity", + ru: "Влажность" + }, unit: "%", - icon: "droplet", chartColor: "#6fd3ff", range: [30, 40, 60, 70], zones: [ { value: 30, color: "#ff4d00", + label: { + en: "Very dry", + ru: "Очень сухо" + } }, { value: 40, color: "#ff9d00", + label: { + en: "Dry", + ru: "Сухо" + } }, { value: 60, color: "#03a5ed", + label: { + en: "Comfortable", + ru: "Комфортно" + } }, { value: 70, color: "#2a5cbc", + label: { + en: "Humid", + ru: "Влажно" + } }, { color: "#7a00da", + label: { + en: "Very humid", + ru: "Очень влажно" + } }, ], }; diff --git a/src/measurements/nh3.js b/src/measurements/nh3.js index db0fab7..dd8bf2d 100644 --- a/src/measurements/nh3.js +++ b/src/measurements/nh3.js @@ -2,11 +2,40 @@ import { converterPpmToMgm3 } from "./tools"; export default { label: "NH3", + name: { + en: "Ammonia", + ru: "Аммиак" + }, unit: "mg/m3", icon: "vial-virus", chartColor: "#a1e37a", colors: ["#60bc2a", "#ff9d00", "#fc0202"], range: [0, 15, 40], + zones: [ + { + value: 15, + color: "#60bc2a", + label: { + en: "Good", + ru: "Хорошо" + } + }, + { + value: 40, + color: "#ff9d00", + label: { + en: "Satisfyingly", + ru: "Удовлетворительно" + } + }, + { + color: "#fc0202", + label: { + en: "Poor", + ru: "Плохо" + } + }, + ], calculate: function (v) { return converterPpmToMgm3(v, 17.03); }, diff --git a/src/measurements/no2.js b/src/measurements/no2.js index 1eeaad0..d8699d2 100644 --- a/src/measurements/no2.js +++ b/src/measurements/no2.js @@ -2,11 +2,39 @@ import { converterPpmToMgm3 } from "./tools"; export default { label: "NO2", + name: { + en: "Nitrogen Dioxide", + ru: "Диоксид азота" + }, unit: "mg/m3", - icon: "vial-virus", chartColor: "#d4dd53", colors: ["#60bc2a", "#ff9d00", "#fc0202"], range: [0, 1, 5], + zones: [ + { + value: 1, + color: "#60bc2a", + label: { + en: "Good", + ru: "Хорошо" + } + }, + { + value: 5, + color: "#ff9d00", + label: { + en: "Satisfyingly", + ru: "Удовлетворительно" + } + }, + { + color: "#fc0202", + label: { + en: "Poor", + ru: "Плохо" + } + }, + ], calculate: function (v) { return converterPpmToMgm3(v, 46.01); }, diff --git a/src/measurements/pm1.js b/src/measurements/pm1.js index db545f6..a4f48be 100644 --- a/src/measurements/pm1.js +++ b/src/measurements/pm1.js @@ -1,6 +1,5 @@ export default { label: "PM1", unit: "μg/m3", - icon: "soap", chartColor: "#ff99e9", }; diff --git a/src/measurements/pm10.js b/src/measurements/pm10.js index bcffa02..3e4f729 100644 --- a/src/measurements/pm10.js +++ b/src/measurements/pm10.js @@ -3,7 +3,6 @@ import { toFixed } from "./tools"; export default { label: "PM10", unit: "μg/m3", - icon: "soap", chartColor: "#e8b738", colors: ["#60bc2a", "#ff9d00", "#fc0202"], range: [0, 51, 101, 251, 350], @@ -11,21 +10,41 @@ export default { { value: 50, color: "#60bc2a", + label: { + en: "Good", + ru: "Хорошо" + } }, { value: 100, color: "#12bfcc", + label: { + en: "Satisfyingly", + ru: "Удовлетворительно" + } }, { value: 250, color: "#ff9d00", + label: { + en: "Poor", + ru: "Плохо" + } }, { value: 350, color: "#ff4d00", + label: { + en: "Very poor", + ru: "Очень плохо" + } }, { color: "#7a00da", + label: { + en: "Unacceptable", + ru: "Неприемлемо" + } }, ], calculate: function (v) { diff --git a/src/measurements/pm25.js b/src/measurements/pm25.js index 81b93f0..0a3ec00 100644 --- a/src/measurements/pm25.js +++ b/src/measurements/pm25.js @@ -3,7 +3,6 @@ import { toFixed } from "./tools"; export default { label: "PM2.5", unit: "μg/m3", - icon: "soap", chartColor: "#89b268", colors: ["#60bc2a", "#ff9d00", "#fc0202"], range: [0, 36, 70, 151, 251], @@ -11,21 +10,41 @@ export default { { value: 36, color: "#60bc2a", + label: { + en: "Good", + ru: "Хорошо" + } }, { value: 70, color: "#12bfcc", + label: { + en: "Satisfyingly", + ru: "Удовлетворительно" + } }, { value: 150, color: "#ff9d00", + label: { + en: "Poor", + ru: "Плохо" + } }, { value: 250, color: "#ff4d00", + label: { + en: "Very poor", + ru: "Очень плохо" + } }, { color: "#7a00da", + label: { + en: "Unacceptable", + ru: "Неприемлемо" + } }, ], calculate: function (v) { diff --git a/src/measurements/pressure.js b/src/measurements/pressure.js index 8b36119..58c03fa 100644 --- a/src/measurements/pressure.js +++ b/src/measurements/pressure.js @@ -1,5 +1,8 @@ export default { label: "Pr", + name: { + en: "Atmospheric pressure", + ru: "Атмосферное давление" + }, unit: "mmHg", - icon: "arrows-down-to-line", }; diff --git a/src/measurements/temperature.js b/src/measurements/temperature.js index 4cbb322..0b6713f 100644 --- a/src/measurements/temperature.js +++ b/src/measurements/temperature.js @@ -2,8 +2,11 @@ import { toFixed } from "./tools"; export default { label: "Tmp", + name: { + en: "Temperature", + ru: "Температура" + }, unit: "℃", - icon: "temperature-high", chartColor: "#2d7ac7", colors: ["#fc0202", "#ff9d00", "#60bc2a", "#ff9d00", "#fc0202"], range: [-10, 0, 10, 25], @@ -11,21 +14,41 @@ export default { { value: -9, color: "#7a00da", + label: { + en: "Very cold", + ru: "Очень холодно" + } }, { value: 0, color: "#2a5cbc", + label: { + en: "Cold", + ru: "Холодно" + } }, { value: 10, color: "#03a5ed", + label: { + en: "Cool", + ru: "Прохладно" + } }, { value: 25, color: "#60bc2a", + label: { + en: "Warm", + ru: "Тепло" + } }, { color: "#ff9d00", + label: { + en: "Very warm", + ru: "Очень тепло" + } }, ], states: ["danger", "attention", "good", "attention", "danger", "neutral"], diff --git a/src/plugins/fontawesome.js b/src/plugins/fontawesome.js index bad311a..4b5f950 100644 --- a/src/plugins/fontawesome.js +++ b/src/plugins/fontawesome.js @@ -2,6 +2,8 @@ import { library } from "@fortawesome/fontawesome-svg-core"; import { faArrowsDownToLine, faArrowUpRightFromSquare, + faBars, + faBookmark, faCheck, faCircleInfo, faCircleNodes, @@ -15,6 +17,8 @@ import { faFaceFrownOpen, faFaceMeh, faFaceSmile, + faFlask, + faGear, faLocationDot, faSliders, faSoap, @@ -25,36 +29,42 @@ import { faVialVirus, faWind, faXmark, + faShareFromSquare, } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; library.add( - faSort, + faArrowsDownToLine, + faArrowUpRightFromSquare, + faBars, + faBookmark, + faCheck, + faCircleInfo, + faCircleNodes, faCircleQuestion, + faCircleRadiation, faCompass, - faXmark, - faCircleInfo, - faFaceSmile, - faFaceMeh, - faFaceFrownOpen, - faFaceDizzy, - faDownload, faCopy, - faStopwatch, + faCopy, + faDownload, + faDroplet, + faFaceDizzy, + faFaceFrownOpen, + faFaceMeh, + faFaceSmile, + faFlask, + faGear, faLocationDot, - faArrowUpRightFromSquare, + faSliders, faSoap, + faSort, + faStopwatch, faTemperatureHigh, - faDroplet, - faCircleNodes, - faCircleRadiation, - faSliders, - faCopy, - faCheck, - faWind, faVial, faVialVirus, - faArrowsDownToLine + faWind, + faXmark, + faShareFromSquare, ); export function useIcons(app) { diff --git a/src/sensors.js b/src/sensors.js index df88b5c..022a99b 100644 --- a/src/sensors.js +++ b/src/sensors.js @@ -14,11 +14,11 @@ export default { }, "162ebfac08a69bc96c0bd569c95026c6750cbecca7a61731dfe1a985a9391176": { icon: atc, - link: "http://atcgaz.ru/главная/", + link: "http://atcgaz.ru/", }, "7c7ffabc786c46ff40d8ca922b1248e1261baefec702eea160001140063f8c53": { icon: atc, - link: "http://atcgaz.ru/главная/", + link: "http://atcgaz.ru/", }, "7cdeafa03331cb330c3993ff0381457f0713a8fd6d0b3dbe93ea24affe5676ac": { icon: artesiantlt, @@ -37,16 +37,9 @@ export default { link: "https://panorama-park63.ru/", }, e4871acd155431c63fbbc54b89d015bc17bc5fbe44d5846502f7e58566e24a8e: { - icon: radiation, link: "https://airalab.org/", }, "62c86fb3712e2c8e3d8a7a79f62c1cb0dbd4ad2980606dbf8fcf96ce9ed46c8d": { icon: sun, - }, - "850aef6dbc5f015c58c02bcc829301c5b47b1cf8dd81121e6d2e52d91a85b176": { - icon: radiation - }, - "6cbea54e4f1ca357ed492cf852e85ea567cf5fae829c368c665e017e114a39a8": { - icon: radiation } }; diff --git a/src/store.js b/src/store.js index 4ba04e2..abd9e79 100644 --- a/src/store.js +++ b/src/store.js @@ -3,41 +3,17 @@ import { defineStore } from "pinia"; export const useStore = defineStore({ id: "main", state: () => ({ - theme: "", // helps to color map black&white when popup is opened isColored: false, currentSensorPopupMeasures: [], currentActiveMeasure: "", + idbBookmarkDbname: 'SensorsDBBookmarks', + idbBookmarkVDbver: 1, + idbBookmarkVDbtable: 'bookmarks', + idbWatcherBroadcast: 'idbBookmarkChanges', /* this we need until IndexedDB Observer will be available in browsers */ + sensors: [] // all uploaded sensors (getting via broadcast messages) }), actions: { - initTheme() { - const cachedTheme = localStorage.theme ? localStorage.theme : false; - const userPrefersDark = window.matchMedia( - "(prefers-color-scheme: dark)" - ).matches; - - let theme = "light"; - if (cachedTheme) { - theme = cachedTheme; - } else if (userPrefersDark) { - theme = "dark"; - } - this.theme = theme; - localStorage.theme = theme; - }, - toggleTheme() { - switch (localStorage.theme) { - case "light": - this.theme = "dark"; - localStorage.theme = "dark"; - break; - - default: - this.theme = "light"; - localStorage.theme = "light"; - break; - } - }, // helps to color map black&white when popup is opened colorMap() { this.isColored = true; diff --git a/src/translate.js b/src/translate.js index 02dec21..c84d616 100644 --- a/src/translate.js +++ b/src/translate.js @@ -37,8 +37,6 @@ export default { "Feel free to fork the GitHub repository of this map and deploy it on any domain of your choice. With this flexibility, you have the option to display all sensors or set up your own customized service. Take control and make it your own!", descriptionLink5: "GitHub repository", descriptionLink6: "Instructions", - bookmarkTitle: "Your bookmarks", - noBookmarks: "You can save sensors from the map here", }, measures: { pollutionScale: "Pollution scale", @@ -159,9 +157,6 @@ export default { 5: "Seek a cool place and use fans or air conditioning.", }, }, - footer: { - history: "Download History", - }, provider: { realtime: "Real time", }, @@ -180,16 +175,42 @@ export default { history: { city: "Locality", period: "Calendar period", - download: "Download .CSV", currentDay: "Current day", currentMonth: "Last month", chooseDates: "Select dates", usecity: "Select locality", + title: "Import data", + button: "Download csv file", }, notice_with_fz: "The specified data is not legally significant information for general use and special information in accordance with the federal law of July 19, 1998 no 113-fz «On the hydrometeorological service»", notice_without_fz: "This information holds no legal validity and is intended solely for personal use.", + sensorpopup: { + infotitle: "Advanced information", + bookmarkplaceholder: "A name for sensor", + bookmarkbutton: "Add to Bookmarks", + infosensorid: "Sensor id", + infosensormodel: "Sensor model", + infosensorgeo: "Sensor geoposition", + infosensorowner: "Sensor owner", + infosensordonated: "Donated by" + }, + bookmarks: { + listtitle: "Your bookmarked sensors", + listempty: "Save any sensor from the map here for quicker access" + }, + links: { + measurement: "Measurements guide", + github: "GitHub repository", + privacy: "Privacy policy" + }, + scales: { + title: "Units of measurement", + upto: "up to", + above: "above" + }, + loadedsesnsors: "Loaded sensors" }, ru: { header: { @@ -229,8 +250,6 @@ export default { "Feel free to fork the GitHub repository of this map and deploy it on any domain of your choice. With this flexibility, you have the option to display all sensors or set up your own customized service. Take control and make it your own!", descriptionLink5: "GitHub repository", descriptionLink6: "Instructions", - bookmarkTitle: "Ваши закладки", - noBookmarks: "You can save sensors from the map here", }, measures: { pollutionScale: "Шкала загрязнения", @@ -377,15 +396,41 @@ export default { history: { city: "Населенный пункт", period: "Календарный период", - download: "Сохранить CSV", currentDay: "Текущие cутки", currentMonth: "Последний месяц", chooseDates: "Выбрать Даты", usecity: "Выбрать населенный пункт", + title: "Импорт данных", + button: "Скачать csv файл", }, notice_with_fz: "Указанные данные не являются юридически значимой информацией для общего пользования и специальной информацией в соответствии с федеральным законом от 19.07.1998 г. no 113-фз «О гидрометеорологической службе»", notice_without_fz: "Указанные данные не являются юридически значимой информацией.", + sensorpopup: { + infotitle: "Подробная информация", + bookmarkplaceholder: "Название сенсора", + bookmarkbutton: "Сохранить в закладки", + infosensorid: "ID датчика", + infosensormodel: "Модель датчика", + infosensorgeo: "Геопозиция датчика", + infosensorowner: "Владелец датчика", + infosensordonated: "Спонсирован" + }, + bookmarks: { + listtitle: "Сохраненные датчики", + listempty: "Здесь вы можете сохранить датчики для быстрого просмотра" + }, + links: { + measurement: "Руководство по измеренным показателям", + github: "Репозиторий GitHub", + privacy: "Политика конфиденциальности" + }, + scales: { + title: "Единицы измерения", + upto: "до", + above: "выше" + }, + loadedsesnsors: "Загружено датчиков" }, }; diff --git a/src/utils/map/marker.js b/src/utils/map/marker.js index 71dd64b..d0eccce 100755 --- a/src/utils/map/marker.js +++ b/src/utils/map/marker.js @@ -319,12 +319,20 @@ export async function addPoint(point) { console.log(point); } else if (point.model === 2) { await addMarker(point); + + /* + Broadcasting about new sensor */ + const bc = new BroadcastChannel('sensors') + bc.postMessage(point) + bc.close() + /* - Broadcasting about new sensor */ + } else if (point.model === 3) { await addMarker(point); await addPointPath(point); } else if (point.model === 4) { await addMarkerUser(point); } + } catch (error) { console.log(error); } @@ -462,6 +470,12 @@ async function addMarkerUser(point) { export function clear() { if (markersLayer) { markersLayer.clearLayers(); + + /* + Broadcasting about removing all sensors */ + const bc = new BroadcastChannel('sensorsremoved') + bc.postMessage(true) + bc.close() + /* - Broadcasting about removing all sensors */ } if (pathsLayer) { pathsLayer.clearLayers(); diff --git a/src/views/AirMeasurements.vue b/src/views/AirMeasurements.vue index 1efe698..5fb6b00 100644 --- a/src/views/AirMeasurements.vue +++ b/src/views/AirMeasurements.vue @@ -1,6 +1,6 @@