@kalisio/kdk 1.4.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nyc_output/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
- package/.nyc_output/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
- package/.nyc_output/{2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
- package/.nyc_output/{81d21e46-766a-46bc-b1b7-143ca577347a.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
- package/.nyc_output/{aaf3ebbb-f895-4d7b-9255-bc5dee832570.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
- package/.nyc_output/{dbeb2602-0ac2-4e66-978b-0d29548359ca.json → 612b4859-9645-45c1-a41e-1fae420518c4.json} +0 -0
- package/.nyc_output/{e47d1e4c-2fff-4dcb-908f-d3081162547c.json → bab87fe9-d99a-4759-99e6-3fc4622eeca0.json} +0 -0
- package/.nyc_output/processinfo/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
- package/.nyc_output/processinfo/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
- package/.nyc_output/processinfo/27401f21-8ccf-42fa-8230-4232189d86b3.json +1 -0
- package/.nyc_output/processinfo/52278ef5-c337-4724-97be-e2e4416847c5.json +1 -0
- package/.nyc_output/processinfo/5dd49b8a-4c84-42f9-a3d5-712247a84775.json +1 -0
- package/.nyc_output/processinfo/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
- package/.nyc_output/processinfo/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +69 -10
- package/coverage/core/api/application.js.html +500 -422
- package/coverage/core/api/authentication.js.html +119 -119
- package/coverage/core/api/db.js.html +172 -172
- package/coverage/core/api/hooks/hooks.account.js.html +45 -45
- package/coverage/core/api/hooks/hooks.authentication.js.html +71 -71
- package/coverage/core/api/hooks/hooks.authorisations.js.html +368 -353
- package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/core/api/hooks/hooks.organisations.js.html +190 -190
- package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/core/api/hooks/hooks.query.js.html +277 -211
- package/coverage/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/core/api/hooks/hooks.users.js.html +263 -263
- package/coverage/core/api/hooks/index.html +172 -172
- package/coverage/core/api/hooks/index.js.html +24 -24
- package/coverage/core/api/index.html +76 -76
- package/coverage/core/api/index.js.html +30 -30
- package/coverage/core/api/marshall.js.html +57 -57
- package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/core/api/models/index.html +50 -50
- package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/core/api/oauth2-handler.js.html +18 -18
- package/coverage/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/core/api/services/account/account.service.js.html +104 -104
- package/coverage/core/api/services/account/index.html +32 -32
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +156 -132
- package/coverage/core/api/services/authorisations/index.html +28 -28
- package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/core/api/services/databases/index.html +24 -24
- package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/core/api/services/devices/index.html +28 -28
- package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/core/api/services/groups/index.html +13 -13
- package/coverage/core/api/services/index.html +21 -21
- package/coverage/core/api/services/index.js.html +118 -118
- package/coverage/core/api/services/mailer/index.html +24 -24
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/core/api/services/organisations/index.html +24 -24
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/core/api/services/pusher/index.html +34 -34
- package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/core/api/services/storage/index.html +21 -21
- package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/core/api/services/tags/index.html +21 -21
- package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/core/api/services/users/index.html +21 -21
- package/coverage/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/core/common/errors.js.html +1 -1
- package/coverage/core/common/index.html +42 -27
- package/coverage/core/common/index.js.html +16 -16
- package/coverage/core/common/permissions.js.html +320 -290
- package/coverage/index.html +181 -181
- package/coverage/lcov-report/core/api/application.js.html +500 -422
- package/coverage/lcov-report/core/api/authentication.js.html +119 -119
- package/coverage/lcov-report/core/api/db.js.html +172 -172
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +45 -45
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +71 -71
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +368 -353
- package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +190 -190
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +277 -211
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +263 -263
- package/coverage/lcov-report/core/api/hooks/index.html +172 -172
- package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
- package/coverage/lcov-report/core/api/index.html +76 -76
- package/coverage/lcov-report/core/api/index.js.html +30 -30
- package/coverage/lcov-report/core/api/marshall.js.html +57 -57
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/models/index.html +50 -50
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +104 -104
- package/coverage/lcov-report/core/api/services/account/index.html +32 -32
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +156 -132
- package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
- package/coverage/lcov-report/core/api/services/index.html +21 -21
- package/coverage/lcov-report/core/api/services/index.js.html +118 -118
- package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
- package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/lcov-report/core/api/services/users/index.html +21 -21
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/lcov-report/core/common/errors.js.html +1 -1
- package/coverage/lcov-report/core/common/index.html +42 -27
- package/coverage/lcov-report/core/common/index.js.html +16 -16
- package/coverage/lcov-report/core/common/permissions.js.html +320 -290
- package/coverage/lcov-report/index.html +181 -181
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +25 -7
- package/coverage/lcov-report/map/api/hooks/index.html +7 -7
- package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
- package/coverage/lcov-report/map/api/index.html +1 -1
- package/coverage/lcov-report/map/api/index.js.html +1 -1
- package/coverage/lcov-report/map/api/marshall.js.html +1 -1
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +14 -5
- package/coverage/lcov-report/map/api/models/index.html +7 -7
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/features/index.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.js.html +1 -1
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/errors.js.html +1 -1
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/grid.js.html +1 -1
- package/coverage/lcov-report/map/common/index.html +1 -1
- package/coverage/lcov-report/map/common/index.js.html +1 -1
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/permissions.js.html +1 -1
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
- package/coverage/lcov.info +3683 -3825
- package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/map/api/hooks/hooks.query.js.html +25 -7
- package/coverage/map/api/hooks/index.html +7 -7
- package/coverage/map/api/hooks/index.js.html +1 -1
- package/coverage/map/api/index.html +1 -1
- package/coverage/map/api/index.js.html +1 -1
- package/coverage/map/api/marshall.js.html +1 -1
- package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/features.model.mongodb.js.html +14 -5
- package/coverage/map/api/models/index.html +7 -7
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/map/api/services/alerts/index.html +1 -1
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/map/api/services/catalog/index.html +1 -1
- package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/map/api/services/daptiles/index.html +1 -1
- package/coverage/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/map/api/services/features/index.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/map/api/services/geocoder/index.html +1 -1
- package/coverage/map/api/services/index.html +1 -1
- package/coverage/map/api/services/index.js.html +1 -1
- package/coverage/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/map/common/errors.js.html +1 -1
- package/coverage/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/map/common/grid.js.html +1 -1
- package/coverage/map/common/index.html +1 -1
- package/coverage/map/common/index.js.html +1 -1
- package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/map/common/moment-utils.js.html +1 -1
- package/coverage/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/map/common/opendap-utils.js.html +1 -1
- package/coverage/map/common/permissions.js.html +1 -1
- package/coverage/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/map/common/tms-utils.js.html +1 -1
- package/coverage/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/map/common/wcs-utils.js.html +1 -1
- package/coverage/map/common/weacast-grid-source.js.html +1 -1
- package/coverage/map/common/wfs-utils.js.html +1 -1
- package/coverage/map/common/wms-utils.js.html +1 -1
- package/coverage/map/common/wmts-utils.js.html +1 -1
- package/extras/tours/map/navigation-bar.js +49 -1
- package/lib/core/api/application.js +35 -9
- package/lib/core/api/application.js.map +1 -1
- package/lib/core/api/hooks/hooks.authorisations.js +8 -1
- package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
- package/lib/core/api/hooks/hooks.query.js +135 -100
- package/lib/core/api/hooks/hooks.query.js.map +1 -1
- package/lib/core/api/services/authorisations/authorisations.service.js +13 -1
- package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
- package/lib/core/api/services/pusher/pusher.service.js +40 -16
- package/lib/core/api/services/pusher/pusher.service.js.map +1 -1
- package/lib/core/client/components/collection/KColumn.vue +29 -28
- package/lib/core/client/components/collection/KFilter.vue +97 -72
- package/lib/core/client/components/editor/KModalEditor.vue +3 -4
- package/lib/core/client/components/editor/KSettingsEditor.vue +6 -2
- package/lib/core/client/components/form/KFileField.vue +14 -36
- package/lib/core/client/components/form/KRoleField.vue +5 -2
- package/lib/core/client/components/form/KTextField.vue +12 -2
- package/lib/core/client/components/form/KUnitField.vue +57 -0
- package/lib/core/client/components/form/KUrlField.vue +1 -1
- package/lib/core/client/components/frame/KAction.vue +1 -2
- package/lib/core/client/components/frame/KModal.vue +66 -20
- package/lib/core/client/components/frame/KScrollArea.vue +65 -0
- package/lib/core/client/components/frame/index.js +6 -1
- package/lib/core/client/components/frame/index.js.map +1 -1
- package/lib/core/client/components/input/KColorChooser.vue +3 -5
- package/lib/core/client/components/input/KIconChooser.vue +38 -40
- package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
- package/lib/core/client/components/layout/KAbout.vue +47 -49
- package/lib/core/client/components/team/KAddMember.vue +1 -1
- package/lib/core/client/components/team/KChangeRole.vue +11 -14
- package/lib/core/client/components/team/KGroupCard.vue +12 -5
- package/lib/core/client/components/team/KGroupsActivity.vue +1 -1
- package/lib/core/client/components/team/KJoinGroup.vue +22 -22
- package/lib/core/client/components/team/KMemberCard.vue +19 -4
- package/lib/core/client/components/viewer/KModalViewer.vue +10 -9
- package/lib/core/client/i18n/core_en.json +72 -8
- package/lib/core/client/i18n/core_fr.json +66 -8
- package/lib/core/client/index.js +31 -0
- package/lib/core/client/index.js.map +1 -1
- package/lib/core/client/layout.js +8 -1
- package/lib/core/client/layout.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-widget.js +5 -3
- package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
- package/lib/core/client/reader.js +85 -0
- package/lib/core/client/reader.js.map +1 -0
- package/lib/core/client/readers/index.js +30 -0
- package/lib/core/client/readers/index.js.map +1 -0
- package/lib/core/client/readers/reader.csv.js +54 -0
- package/lib/core/client/readers/reader.csv.js.map +1 -0
- package/lib/core/client/readers/reader.json.js +49 -0
- package/lib/core/client/readers/reader.json.js.map +1 -0
- package/lib/core/client/services/index.js +14 -3
- package/lib/core/client/services/index.js.map +1 -1
- package/lib/core/client/services/local-settings.service.js +6 -4
- package/lib/core/client/services/local-settings.service.js.map +1 -1
- package/lib/core/client/time.js +4 -3
- package/lib/core/client/time.js.map +1 -1
- package/lib/core/client/units.js +195 -0
- package/lib/core/client/units.js.map +1 -0
- package/lib/core/common/permissions.js +44 -34
- package/lib/core/common/permissions.js.map +1 -1
- package/lib/core/common/schemas/settings.update.json +72 -0
- package/lib/map/api/hooks/hooks.query.js +7 -2
- package/lib/map/api/hooks/hooks.query.js.map +1 -1
- package/lib/map/api/models/features.model.mongodb.js +3 -0
- package/lib/map/api/models/features.model.mongodb.js.map +1 -1
- package/lib/map/client/components/KCaptureToolbar.vue +151 -0
- package/lib/map/client/components/KColorLegend.vue +16 -4
- package/lib/map/client/components/KFeaturesChart.vue +10 -11
- package/lib/map/client/components/KFeaturesFilter.vue +40 -39
- package/lib/map/client/components/KFeaturesTable.vue +15 -16
- package/lib/map/client/components/KLayerEditionToolbar.vue +19 -11
- package/lib/map/client/components/KLayerStyleEditor.vue +3 -2
- package/lib/map/client/components/KLayerStyleForm.vue +38 -27
- package/lib/map/client/components/KMeasureTool.vue +337 -0
- package/lib/map/client/components/KTimeline.vue +5 -9
- package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
- package/lib/map/client/components/catalog/KCatalog.vue +26 -7
- package/lib/map/client/components/catalog/KImportLayer.vue +8 -35
- package/lib/map/client/components/catalog/KLayerCategories.vue +3 -2
- package/lib/map/client/components/catalog/KLayersSelector.vue +8 -6
- package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +1 -1
- package/lib/map/client/components/widget/KInformationBox.vue +8 -17
- package/lib/map/client/components/widget/KMapillaryViewer.vue +5 -1
- package/lib/map/client/components/widget/KTimeSeries.vue +92 -9
- package/lib/map/client/i18n/map_en.json +51 -20
- package/lib/map/client/i18n/map_fr.json +51 -20
- package/lib/map/client/init.js +7 -1
- package/lib/map/client/init.js.map +1 -1
- package/lib/map/client/leaflet/MaskLayer.js +9 -0
- package/lib/map/client/leaflet/MaskLayer.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.base-globe.js +3 -5
- package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js +16 -21
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.popup.js +7 -1
- package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.base-map.js +54 -9
- package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.canvas-layers.js +2 -0
- package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.file-layers.js +51 -97
- package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.geojson-layers.js +43 -11
- package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.popup.js +7 -1
- package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.style.js +1 -1
- package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tooltip.js +7 -1
- package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/mixin.activity.js +2 -0
- package/lib/map/client/mixins/mixin.activity.js.map +1 -1
- package/lib/map/client/mixins/mixin.context.js +26 -3
- package/lib/map/client/mixins/mixin.context.js.map +1 -1
- package/lib/map/client/mixins/mixin.feature-service.js +3 -3
- package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
- package/lib/map/client/mixins/mixin.infobox.js +4 -0
- package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
- package/lib/map/client/mixins/mixin.weacast.js +7 -5
- package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
- package/lib/map/client/readers/index.js +54 -0
- package/lib/map/client/readers/index.js.map +1 -0
- package/lib/map/client/readers/reader.geojson.js +87 -0
- package/lib/map/client/readers/reader.geojson.js.map +1 -0
- package/lib/map/client/readers/reader.gpx.js +52 -0
- package/lib/map/client/readers/reader.gpx.js.map +1 -0
- package/lib/map/client/readers/reader.kml.js +52 -0
- package/lib/map/client/readers/reader.kml.js.map +1 -0
- package/lib/map/client/readers/reader.shp.js +116 -0
- package/lib/map/client/readers/reader.shp.js.map +1 -0
- package/lib/map/client/utils.js +0 -7
- package/lib/map/client/utils.js.map +1 -1
- package/lib/test/client/core/account.js +1 -1
- package/lib/test/client/core/account.js.map +1 -1
- package/lib/test/client/core/runner.js +1 -2
- package/lib/test/client/core/runner.js.map +1 -1
- package/lib/test/client/core/screens.js +1 -1
- package/lib/test/client/core/screens.js.map +1 -1
- package/lib/test/client/core/utils.js +2 -2
- package/lib/test/client/core/utils.js.map +1 -1
- package/lib/test/client/map/catalog.js +50 -49
- package/lib/test/client/map/catalog.js.map +1 -1
- package/package.json +3 -3
- package/.nyc_output/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
- package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
- package/.nyc_output/processinfo/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
- package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +0 -1
- package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +0 -1
- package/.nyc_output/processinfo/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
- package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +0 -1
- package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +0 -1
- package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +0 -1
- package/extras/testcafe/Dockerfile +0 -48
- package/extras/testcafe/docker-entrypoint.sh +0 -27
- package/extras/testcafe/page-models/core/account.js +0 -75
- package/extras/testcafe/page-models/core/base-collection.js +0 -41
- package/extras/testcafe/page-models/core/base-page.js +0 -25
- package/extras/testcafe/page-models/core/groups.js +0 -36
- package/extras/testcafe/page-models/core/index.js +0 -140
- package/extras/testcafe/page-models/core/layout.js +0 -145
- package/extras/testcafe/page-models/core/members.js +0 -98
- package/extras/testcafe/page-models/core/organisations.js +0 -76
- package/extras/testcafe/page-models/core/screens.js +0 -99
- package/extras/testcafe/page-models/core/tags.js +0 -21
- package/extras/testcafe/page-models/map/add-layer.js +0 -51
- package/extras/testcafe/page-models/map/catalog.js +0 -132
- package/extras/testcafe/page-models/map/index.js +0 -36
- package/extras/testcafe/page-models/map/map-activity.js +0 -42
- package/extras/testcafe/page-models/map/timeline.js +0 -67
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
2
|
+
<k-scroll-area :maxHeight="scrollAreaMaxHeight" :style="innerStyle">
|
|
3
3
|
<q-list dense bordered>
|
|
4
4
|
<slot name="header" />
|
|
5
5
|
<k-layers-selector
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</template>
|
|
27
27
|
<slot name="footer" />
|
|
28
28
|
</q-list>
|
|
29
|
-
</
|
|
29
|
+
</k-scroll-area>
|
|
30
30
|
</template>
|
|
31
31
|
|
|
32
32
|
<script>
|
|
@@ -65,10 +65,21 @@ export default {
|
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
67
|
computed: {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
innerStyle () {
|
|
69
|
+
const screenHeight = this.$q.screen.height
|
|
70
|
+
this.scrollAreaMaxHeight = screenHeight * 0.75 // 75vh
|
|
71
|
+
let width = 420
|
|
72
|
+
if (this.$q.screen.lt.sm) {
|
|
73
|
+
this.scrollAreaMaxHeight = screenHeight * 0.60
|
|
74
|
+
width = 300
|
|
75
|
+
} else if (this.$q.screen.lt.md) {
|
|
76
|
+
this.scrollAreaMaxHeight = screenHeight * 0.65
|
|
77
|
+
width = 340
|
|
78
|
+
} else if (this.$q.screen.lt.lg) {
|
|
79
|
+
this.scrollAreaMaxHeight = screenHeight * 0.70
|
|
80
|
+
width = 380
|
|
81
|
+
}
|
|
82
|
+
return `height: ${this.scrollAreaMaxHeight}px; width: ${width}px`
|
|
72
83
|
},
|
|
73
84
|
layersByCategory () {
|
|
74
85
|
const layers = _.values(this.layers)
|
|
@@ -95,6 +106,11 @@ export default {
|
|
|
95
106
|
return _.difference(layers, categories)
|
|
96
107
|
}
|
|
97
108
|
},
|
|
109
|
+
data () {
|
|
110
|
+
return {
|
|
111
|
+
scrollAreaMaxHeight: 0
|
|
112
|
+
}
|
|
113
|
+
},
|
|
98
114
|
methods: {
|
|
99
115
|
getId (category) {
|
|
100
116
|
return _.kebabCase(category.name)
|
|
@@ -128,10 +144,13 @@ export default {
|
|
|
128
144
|
})
|
|
129
145
|
}
|
|
130
146
|
},
|
|
131
|
-
|
|
147
|
+
beforeCreate () {
|
|
132
148
|
// Load the required components
|
|
149
|
+
this.$options.components['k-scroll-area'] = this.$load('frame/KScrollArea')
|
|
133
150
|
this.$options.components['k-panel'] = this.$load('frame/KPanel')
|
|
134
151
|
this.$options.components['k-layers-selector'] = this.$load('catalog/KLayersSelector')
|
|
152
|
+
},
|
|
153
|
+
created () {
|
|
135
154
|
// Categorize layers
|
|
136
155
|
this.categorize()
|
|
137
156
|
}
|
|
@@ -55,7 +55,7 @@ export default {
|
|
|
55
55
|
field: {
|
|
56
56
|
component: 'form/KFileField',
|
|
57
57
|
label: 'KImportLayer.FILE_FIELD_LABEL',
|
|
58
|
-
mimeTypes: '.json,.geojson
|
|
58
|
+
mimeTypes: '.json,.geojson,.gpx,.kml'
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
},
|
|
@@ -88,8 +88,6 @@ export default {
|
|
|
88
88
|
},
|
|
89
89
|
featureId: {
|
|
90
90
|
type: 'string',
|
|
91
|
-
maxLength: 256,
|
|
92
|
-
minLength: 2,
|
|
93
91
|
default: this.guessFeatureId(),
|
|
94
92
|
field: {
|
|
95
93
|
component: 'form/KSelectField',
|
|
@@ -98,7 +96,7 @@ export default {
|
|
|
98
96
|
}
|
|
99
97
|
}
|
|
100
98
|
},
|
|
101
|
-
required: ['name'
|
|
99
|
+
required: ['name']
|
|
102
100
|
}
|
|
103
101
|
},
|
|
104
102
|
onFileFormFieldChanged (field, value) {
|
|
@@ -122,10 +120,10 @@ export default {
|
|
|
122
120
|
if (this.file) {
|
|
123
121
|
const properties = _.keys(_.get(this.file, 'schema.properties', {}))
|
|
124
122
|
for (const prop of properties) {
|
|
125
|
-
if (
|
|
123
|
+
if (_.indexOf(['id', 'fid', 'featureid', '_id', 'objectid'], prop.toLowerCase()) >= 0) return prop
|
|
126
124
|
}
|
|
127
125
|
}
|
|
128
|
-
return
|
|
126
|
+
return undefined
|
|
129
127
|
},
|
|
130
128
|
onClose () {
|
|
131
129
|
this.$emit('done')
|
|
@@ -135,37 +133,12 @@ export default {
|
|
|
135
133
|
const propertiesResult = this.$refs.propertiesForm.validate()
|
|
136
134
|
if (!fileResult.isValid || !propertiesResult.isValid) return
|
|
137
135
|
this.importing = true
|
|
138
|
-
|
|
139
|
-
const geoJson = this.file.content
|
|
140
|
-
// Create an empty layer used as a container
|
|
141
|
-
const engine = {
|
|
142
|
-
type: 'geoJson',
|
|
143
|
-
isVisible: true,
|
|
144
|
-
realtime: true
|
|
145
|
-
}
|
|
146
|
-
const newLayer = {
|
|
136
|
+
await this.kActivity.addGeoJsonLayer({
|
|
147
137
|
name: propertiesResult.values.name,
|
|
148
138
|
description: propertiesResult.values.description,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
isDataEditable: true, // Flag as editable
|
|
153
|
-
featureId: propertiesResult.values.featureId,
|
|
154
|
-
leaflet: engine,
|
|
155
|
-
// Avoid sharing reference to the same object although options are similar
|
|
156
|
-
// otherwise updating one will automatically update the other one
|
|
157
|
-
cesium: Object.assign({}, engine),
|
|
158
|
-
schema: {
|
|
159
|
-
name: this.file.name,
|
|
160
|
-
content: this.file.schema
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
await this.kActivity.addLayer(newLayer)
|
|
164
|
-
// Assign the features to the layer
|
|
165
|
-
await this.kActivity.updateLayer(newLayer.name, geoJson)
|
|
166
|
-
// Zoom to it
|
|
167
|
-
if (geoJson.bbox) this.kActivity.zoomToBBox(geoJson.bbox)
|
|
168
|
-
else this.kActivity.zoomToLayer(newLayer.name)
|
|
139
|
+
schema: { name: this.file.name, content: this.file.schema },
|
|
140
|
+
featureId: propertiesResult.values.featureId
|
|
141
|
+
}, this.file.content)
|
|
169
142
|
this.importing = false
|
|
170
143
|
this.$emit('done')
|
|
171
144
|
}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
:buttons="buttons"
|
|
8
8
|
v-model="isModalOpened"
|
|
9
9
|
@opened="$emit('opened')"
|
|
10
|
-
@closed="$emit('closed')"
|
|
11
|
-
|
|
10
|
+
@closed="$emit('closed')"
|
|
11
|
+
>
|
|
12
|
+
<div id="layer-categories-content">
|
|
12
13
|
<q-card-section id="layer-categories-list" v-if="mode === 'list'">
|
|
13
14
|
<k-list
|
|
14
15
|
style="min-height: 50px; min-width: 200px"
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
<slot name="header" />
|
|
4
4
|
<div v-if="layers.length > 0">
|
|
5
5
|
<template v-for="layer in layers">
|
|
6
|
-
<div :key="getId(layer)" :id="getId(layer)" class="row items-center
|
|
6
|
+
<div :key="getId(layer)" :id="getId(layer)" class="full-width row items-center q-pl-md q-pr-sm no-wrap">
|
|
7
7
|
<!-- Layer name -->
|
|
8
|
-
<div v-bind:class="{
|
|
8
|
+
<div class="ellipsis" v-bind:class="{
|
|
9
9
|
'text-primary text-weight-bold': layer.isVisible,
|
|
10
10
|
'text-grey-6': layer.isDisabled
|
|
11
11
|
}">
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
</q-tooltip>
|
|
23
23
|
</div>
|
|
24
24
|
<q-space />
|
|
25
|
-
<q-icon name="las la-exclamation-circle" size="
|
|
25
|
+
<q-icon name="las la-exclamation-circle" size="sm" color="warning" v-if="layer.isDisabled">
|
|
26
26
|
<q-tooltip>{{ $t('KLayersSelector.LAYER_DISABLED') }}</q-tooltip>
|
|
27
27
|
</q-icon>
|
|
28
28
|
<!-- Layer toggle -->
|
|
29
|
-
<q-toggle :value="layer.isVisible" :disable="layer.isDisabled" @input="onLayerClicked(layer)"/>
|
|
29
|
+
<q-toggle :value="layer.isVisible" :disable="layer.isDisabled" size="sm" @input="onLayerClicked(layer)" />
|
|
30
30
|
<!-- Layer actions -->
|
|
31
31
|
<k-panel
|
|
32
32
|
:id="`${layer.name}-actions`"
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
</div>
|
|
38
38
|
</template>
|
|
39
39
|
</div>
|
|
40
|
-
<div v-else-if="!options.hideIfEmpty" class="row justify-center q-
|
|
40
|
+
<div v-else-if="!options.hideIfEmpty" class="row justify-center q-pa-sm">
|
|
41
41
|
<k-stamp icon="las la-exclamation-circle" icon-size="sm" :text="$t('KLayersSelector.NO_LAYER_AVAILABLE')" direction="horizontal" />
|
|
42
42
|
</div>
|
|
43
43
|
<slot name="footer" />
|
|
@@ -66,7 +66,9 @@ export default {
|
|
|
66
66
|
},
|
|
67
67
|
methods: {
|
|
68
68
|
getId (layer) {
|
|
69
|
-
|
|
69
|
+
const name = _.kebabCase(layer.name)
|
|
70
|
+
if (_.startsWith(name, 'layers-')) return name
|
|
71
|
+
return 'layers-' + name
|
|
70
72
|
},
|
|
71
73
|
layerIcon (layer) {
|
|
72
74
|
return utils.getIconName(layer, 'icon')
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
</template>
|
|
34
34
|
</k-layers-selector>
|
|
35
35
|
</div>
|
|
36
|
-
<div v-else class="row justify-center q-
|
|
36
|
+
<div v-else class="row justify-center q-pa-sm">
|
|
37
37
|
<k-stamp icon="las la-exclamation-circle" icon-size="sm" :text="$t('KWeatherLayersSelector.NO_MODEL_AVAILABLE')" direction="horizontal" />
|
|
38
38
|
</div>
|
|
39
39
|
</template>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div :style="widgetStyle
|
|
2
|
+
<div :style="widgetStyle">
|
|
3
3
|
<div v-if="schema && properties" class="fit row">
|
|
4
4
|
<k-panel id="information-box-actions" class="q-pa-sm" :content="actions" direction="vertical" />
|
|
5
|
-
<
|
|
5
|
+
<k-scroll-area class="col" :maxHeight="widgetHeight">
|
|
6
6
|
<k-view class="q-pa-md" :schema="schema" :values="properties" :separators="true" />
|
|
7
|
-
</
|
|
7
|
+
</k-scroll-area>
|
|
8
8
|
</div>
|
|
9
9
|
<div v-else class="absolute-center">
|
|
10
10
|
<k-stamp icon="las la-exclamation-circle" icon-size="3rem" :text="$t('KInformationBox.NO_FEATURE_PROPERTIES')" />
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
<script>
|
|
16
16
|
import _ from 'lodash'
|
|
17
|
-
import {
|
|
17
|
+
import { copyToClipboard, exportFile } from 'quasar'
|
|
18
18
|
import { baseWidget } from '../../../../core/client/mixins'
|
|
19
19
|
import { generatePropertiesSchema } from '../../utils'
|
|
20
20
|
|
|
@@ -34,18 +34,6 @@ export default {
|
|
|
34
34
|
},
|
|
35
35
|
data () {
|
|
36
36
|
return {
|
|
37
|
-
thumbStyle: {
|
|
38
|
-
right: '4px',
|
|
39
|
-
borderRadius: '5px',
|
|
40
|
-
backgroundColor: colors.getBrand('primary'),
|
|
41
|
-
width: '6px'
|
|
42
|
-
},
|
|
43
|
-
barStyle: {
|
|
44
|
-
right: '2px',
|
|
45
|
-
borderRadius: '5px',
|
|
46
|
-
backgroundColor: colors.getBrand('accent'),
|
|
47
|
-
width: '10px'
|
|
48
|
-
},
|
|
49
37
|
schema: null,
|
|
50
38
|
properties: null,
|
|
51
39
|
actions: []
|
|
@@ -115,11 +103,14 @@ export default {
|
|
|
115
103
|
}
|
|
116
104
|
}
|
|
117
105
|
},
|
|
118
|
-
|
|
106
|
+
beforeCreate () {
|
|
119
107
|
// laod the required components
|
|
108
|
+
this.$options.components['k-scroll-area'] = this.$load('frame/KScrollArea')
|
|
120
109
|
this.$options.components['k-panel'] = this.$load('frame/KPanel')
|
|
121
110
|
this.$options.components['k-view'] = this.$load('form/KView')
|
|
122
111
|
this.$options.components['k-stamp'] = this.$load('frame/KStamp')
|
|
112
|
+
},
|
|
113
|
+
created () {
|
|
123
114
|
// Registers the actions
|
|
124
115
|
this.actions = {
|
|
125
116
|
default: [
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div :style="widgetStyle
|
|
2
|
+
<div :style="widgetStyle">
|
|
3
3
|
<div class="fit row">
|
|
4
|
+
<q-resize-observer @resize="onResized" />
|
|
4
5
|
<k-panel id="mapillary-actions" class="q-pa-sm" :content="actions" direction="vertical" />
|
|
5
6
|
<div class="col" id="mapillary-container"></div>
|
|
6
7
|
</div>
|
|
@@ -123,6 +124,9 @@ export default {
|
|
|
123
124
|
this.bearing = await this.mapillaryViewer.getBearing()
|
|
124
125
|
this.centerMap()
|
|
125
126
|
this.kActivity.updateSelectionHighlight('mapillary', this.getMarkerFeature())
|
|
127
|
+
},
|
|
128
|
+
onResized () {
|
|
129
|
+
if (this.mapillaryViewer) this.mapillaryViewer.resize()
|
|
126
130
|
}
|
|
127
131
|
},
|
|
128
132
|
beforeCreate () {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div :style="widgetStyle
|
|
2
|
+
<div :style="widgetStyle">
|
|
3
3
|
<div class="fit row">
|
|
4
4
|
<q-resize-observer @resize="onResized" />
|
|
5
5
|
<!-- Actions -->
|
|
@@ -32,12 +32,15 @@ import centroid from '@turf/centroid'
|
|
|
32
32
|
import chroma from 'chroma-js'
|
|
33
33
|
import Chart from 'chart.js'
|
|
34
34
|
import 'chartjs-plugin-annotation'
|
|
35
|
+
import Papa from 'papaparse'
|
|
35
36
|
import { getTimeInterval } from '../../utils'
|
|
37
|
+
import { downloadAsBlob } from '../../../../core/client/utils'
|
|
38
|
+
import { Units } from '../../../../core/client/units'
|
|
36
39
|
import { Time } from '../../../../core/client/time'
|
|
37
40
|
import { baseWidget } from '../../../../core/client/mixins'
|
|
38
41
|
|
|
39
42
|
export default {
|
|
40
|
-
name: 'k-time-series
|
|
43
|
+
name: 'k-time-series',
|
|
41
44
|
inject: ['kActivity'],
|
|
42
45
|
mixins: [baseWidget],
|
|
43
46
|
props: {
|
|
@@ -101,6 +104,10 @@ export default {
|
|
|
101
104
|
hasVariable (name, properties) {
|
|
102
105
|
return (properties[name] && Array.isArray(properties[name]))
|
|
103
106
|
},
|
|
107
|
+
getSelectedRunTime () {
|
|
108
|
+
// Set default run as latest
|
|
109
|
+
return this.runTime || _.last(this.runTimes)
|
|
110
|
+
},
|
|
104
111
|
setupTimeTicks () {
|
|
105
112
|
if (!this.times || !this.graphWidth) return
|
|
106
113
|
// Choose the right step size to ensure we have almost 100px between hour ticks
|
|
@@ -145,24 +152,50 @@ export default {
|
|
|
145
152
|
this.timeRange = null
|
|
146
153
|
}
|
|
147
154
|
},
|
|
155
|
+
setupAvailableRunTimes () {
|
|
156
|
+
this.runTimes = []
|
|
157
|
+
const runTime = this.probedLocation.runTime
|
|
158
|
+
this.probedVariables.forEach(variable => {
|
|
159
|
+
if (!variable.runTimes) return
|
|
160
|
+
// Check if we are targetting a specific level
|
|
161
|
+
const name = (this.kActivity.selectedLevel ? `${variable.name}-${this.kActivity.selectedLevel}` : variable.name)
|
|
162
|
+
|
|
163
|
+
if (runTime && runTime[name]) this.runTimes.push(runTime[name])
|
|
164
|
+
})
|
|
165
|
+
// Make union of all available run times
|
|
166
|
+
this.runTimes = _.union(...this.runTimes).map(time => moment.utc(time)).sort((a, b) => a - b)
|
|
167
|
+
},
|
|
148
168
|
setupAvailableDatasets () {
|
|
149
169
|
this.datasets = []
|
|
150
170
|
const time = this.probedLocation.time || this.probedLocation.forecastTime
|
|
171
|
+
const runTime = this.probedLocation.runTime
|
|
151
172
|
const properties = this.probedLocation.properties
|
|
152
173
|
// Generate a color palette in case the variables does not provide it
|
|
153
174
|
const colors = _.shuffle(chroma.scale('Spectral').colors(this.probedVariables.length))
|
|
154
175
|
this.probedVariables.forEach((variable, index) => {
|
|
155
176
|
// Check if we are targetting a specific level
|
|
156
177
|
const name = (this.kActivity.selectedLevel ? `${variable.name}-${this.kActivity.selectedLevel}` : variable.name)
|
|
157
|
-
|
|
178
|
+
// Falback to base unit
|
|
179
|
+
const baseUnit = variable.units[0]
|
|
180
|
+
// Get default unit for this quantity instead if available
|
|
181
|
+
const defaultUnit = Units.getDefaultUnit(baseUnit)
|
|
182
|
+
const unit = (variable.units.includes(defaultUnit) ? defaultUnit : baseUnit)
|
|
158
183
|
const label = this.$t(variable.label) || variable.label
|
|
159
184
|
// Aggregated variable available for feature ?
|
|
160
185
|
if (this.hasVariable(name, properties)) {
|
|
186
|
+
// Build data structure as expected by visualisation
|
|
187
|
+
let values = properties[name].map((value, index) => ({ x: time[name][index], y: Units.convert(value, baseUnit, unit) }))
|
|
188
|
+
// Keep only selected value if multiple are provided for the same time (eg different forecasts)
|
|
189
|
+
if (variable.runTimes && !_.isEmpty(_.get(runTime, name)) && this.getSelectedRunTime()) {
|
|
190
|
+
values = values.filter((value, index) => (runTime[name][index] === this.getSelectedRunTime().toISOString()))
|
|
191
|
+
} else values = _.uniqBy(values, 'x')
|
|
192
|
+
// Then transform to date object as expected by visualisation
|
|
193
|
+
values = values.map((value) => Object.assign(value, { x: new Date(value.x) })).filter(this.filter)
|
|
161
194
|
this.datasets.push(_.merge({
|
|
162
|
-
label: `${label} (${unit})`,
|
|
195
|
+
label: `${label} (${Units.getUnitSymbol(unit)})`,
|
|
163
196
|
borderColor: colors[index],
|
|
164
197
|
backgroundColor: colors[index],
|
|
165
|
-
data:
|
|
198
|
+
data: values,
|
|
166
199
|
yAxisID: unit
|
|
167
200
|
}, _.omit(variable.chartjs, 'yAxis')))
|
|
168
201
|
}
|
|
@@ -176,7 +209,11 @@ export default {
|
|
|
176
209
|
this.probedVariables.forEach(variable => {
|
|
177
210
|
// Check if we are targetting a specific level
|
|
178
211
|
const name = (this.kActivity.selectedLevel ? `${variable.name}-${this.kActivity.selectedLevel}` : variable.name)
|
|
179
|
-
|
|
212
|
+
// Falback to base unit
|
|
213
|
+
const baseUnit = variable.units[0]
|
|
214
|
+
// Get default unit for this quantity instead if available
|
|
215
|
+
const defaultUnit = Units.getDefaultUnit(baseUnit)
|
|
216
|
+
const unit = (variable.units.includes(defaultUnit) ? defaultUnit : baseUnit)
|
|
180
217
|
// Variable available for feature ?
|
|
181
218
|
// Check also if axis already created
|
|
182
219
|
if (this.hasVariable(name, properties) && !_.find(this.yAxes, axis => axis.id === unit)) {
|
|
@@ -185,7 +222,7 @@ export default {
|
|
|
185
222
|
position: isLeft ? 'left' : 'right',
|
|
186
223
|
scaleLabel: {
|
|
187
224
|
display: true,
|
|
188
|
-
labelString: unit
|
|
225
|
+
labelString: Units.getUnitSymbol(unit)
|
|
189
226
|
}
|
|
190
227
|
}, _.get(variable.chartjs, 'yAxis', {})))
|
|
191
228
|
// Alternate axes by default
|
|
@@ -276,6 +313,7 @@ export default {
|
|
|
276
313
|
// Setup the graph
|
|
277
314
|
this.setupAvailableTimes()
|
|
278
315
|
this.setupTimeTicks()
|
|
316
|
+
this.setupAvailableRunTimes()
|
|
279
317
|
this.setupAvailableDatasets()
|
|
280
318
|
this.setupAvailableYAxes()
|
|
281
319
|
|
|
@@ -381,6 +419,14 @@ export default {
|
|
|
381
419
|
onUpdateSpan (span) {
|
|
382
420
|
this.$store.set('timeseries.span', span)
|
|
383
421
|
},
|
|
422
|
+
onUpdateRun (runTime) {
|
|
423
|
+
this.runTime = runTime
|
|
424
|
+
// Update tooltip action
|
|
425
|
+
const action = _.find(this.actions, { id: 'run-options' })
|
|
426
|
+
action.tooltip = this.$t('KTimeSeries.RUN') + ' (' + Time.format(this.getSelectedRunTime(), 'date.short') +
|
|
427
|
+
' - ' + Time.format(this.getSelectedRunTime(), 'time.short') + ')'
|
|
428
|
+
this.setupGraph()
|
|
429
|
+
},
|
|
384
430
|
updateProbedLocationHighlight () {
|
|
385
431
|
if (!this.probedLocation) return
|
|
386
432
|
const windDirection = (this.kActivity.selectedLevel ? `windDirection-${this.kActivity.selectedLevel}` : 'windDirection')
|
|
@@ -397,6 +443,20 @@ export default {
|
|
|
397
443
|
onCenterOn () {
|
|
398
444
|
this.kActivity.centerOnSelection()
|
|
399
445
|
},
|
|
446
|
+
onExportSeries () {
|
|
447
|
+
const json = this.times.map(time => {
|
|
448
|
+
const row = {
|
|
449
|
+
[this.$t('KTimeSeries.TIME_LABEL')]: time.toISOString()
|
|
450
|
+
}
|
|
451
|
+
this.datasets.forEach(dataset => {
|
|
452
|
+
const value = _.find(dataset.data, item => item.x.toISOString() === time.toISOString())
|
|
453
|
+
row[dataset.label] = value ? value.y : null
|
|
454
|
+
})
|
|
455
|
+
return row
|
|
456
|
+
})
|
|
457
|
+
const csv = Papa.unparse(json)
|
|
458
|
+
downloadAsBlob(csv, this.$t('KTimeSeries.SERIES_EXPORT_FILE'), 'text/csv;charset=utf-8;')
|
|
459
|
+
},
|
|
400
460
|
updateProbedLocationName () {
|
|
401
461
|
this.probedLocationName = ''
|
|
402
462
|
if (!this.probedLocation) return
|
|
@@ -420,9 +480,10 @@ export default {
|
|
|
420
480
|
option.default = true
|
|
421
481
|
}
|
|
422
482
|
})
|
|
423
|
-
// Registers the actions
|
|
483
|
+
// Registers the base actions
|
|
424
484
|
this.actions = [
|
|
425
485
|
{ id: 'center-view', icon: 'las la-eye', tooltip: 'KTimeSeries.CENTER_ON', handler: this.onCenterOn },
|
|
486
|
+
{ id: 'export-feature', icon: 'las la-file-download', tooltip: this.$t('KTimeSeries.EXPORT_SERIES'), handler: this.onExportSeries },
|
|
426
487
|
{
|
|
427
488
|
component: 'input/KOptionsChooser',
|
|
428
489
|
id: 'timespan-options',
|
|
@@ -432,6 +493,8 @@ export default {
|
|
|
432
493
|
on: { event: 'option-chosen', listener: this.onUpdateSpan }
|
|
433
494
|
}
|
|
434
495
|
]
|
|
496
|
+
// Clear previous run timle setup if any
|
|
497
|
+
this.runTime = null
|
|
435
498
|
// Then manage selection
|
|
436
499
|
this.kActivity.addSelectionHighlight('time-series')
|
|
437
500
|
this.kActivity.centerOnSelection()
|
|
@@ -459,8 +522,28 @@ export default {
|
|
|
459
522
|
(name ? ` (${name})` : ` (${longitude.toFixed(2)}°, ${latitude.toFixed(2)}°)`))
|
|
460
523
|
}
|
|
461
524
|
this.updateProbedLocationName()
|
|
462
|
-
this.setupGraph()
|
|
525
|
+
await this.setupGraph()
|
|
463
526
|
this.updateProbedLocationHighlight()
|
|
527
|
+
|
|
528
|
+
// When forecast data are available allow to select wich run to use
|
|
529
|
+
if (this.runTimes && (this.runTimes.length > 1)) {
|
|
530
|
+
// Select latest runTime as default option
|
|
531
|
+
const runOptions = this.runTimes.map(runTime => ({
|
|
532
|
+
label: Time.format(runTime, 'date.short') + ' - ' + Time.format(runTime, 'time.short'),
|
|
533
|
+
value: runTime
|
|
534
|
+
}))
|
|
535
|
+
_.last(runOptions).default = true
|
|
536
|
+
// Registers the action
|
|
537
|
+
this.actions.push({
|
|
538
|
+
component: 'input/KOptionsChooser',
|
|
539
|
+
id: 'run-options',
|
|
540
|
+
icon: 'las la-clock',
|
|
541
|
+
tooltip: this.$t('KTimeSeries.RUN') + ' (' + Time.format(this.getSelectedRunTime(), 'date.short') +
|
|
542
|
+
' - ' + Time.format(this.getSelectedRunTime(), 'time.short') + ')',
|
|
543
|
+
options: runOptions,
|
|
544
|
+
on: { event: 'option-chosen', listener: this.onUpdateRun }
|
|
545
|
+
})
|
|
546
|
+
}
|
|
464
547
|
}
|
|
465
548
|
},
|
|
466
549
|
created () {
|
|
@@ -11,7 +11,11 @@
|
|
|
11
11
|
"ALERTS_LIMIT": "Too much alerts to display all of them",
|
|
12
12
|
"FILE_IMPORT_ERROR": "File import has failed",
|
|
13
13
|
"CANNOT_CHECK_ALERT_MISSING_SERVICE": "Last check failed due to unavailable service",
|
|
14
|
-
"CANNOT_CHECK_ALERT_MISSING_DATA": "Last check failed due to unavailable data"
|
|
14
|
+
"CANNOT_CHECK_ALERT_MISSING_DATA": "Last check failed due to unavailable data",
|
|
15
|
+
"INVALID_GEOJSON_FILE": "{{file}} is not a valid GeoJSON file",
|
|
16
|
+
"INVALID_GEOJSON_CRS": "{{file}} has an unsupported Coordinates Reference System (CRS)",
|
|
17
|
+
"INVALID_GPX_FILE": "{{file}} is not a valid GPX file",
|
|
18
|
+
"INVALID_KML_FILE": "{{file}} is not a valid KML file"
|
|
15
19
|
},
|
|
16
20
|
"mixins": {
|
|
17
21
|
"navigator": {
|
|
@@ -21,7 +25,7 @@
|
|
|
21
25
|
"IMPORTED_DATA_NAME": "My data"
|
|
22
26
|
},
|
|
23
27
|
"legend": {
|
|
24
|
-
"CONVERT_UNITS": "
|
|
28
|
+
"CONVERT_UNITS": "Click to change unit"
|
|
25
29
|
},
|
|
26
30
|
"activity": {
|
|
27
31
|
"ADD_LAYER": "Add a new layer",
|
|
@@ -65,7 +69,8 @@
|
|
|
65
69
|
"SYNCHRONIZE_TIMELINE_LABEL": "Synchronize with timeline",
|
|
66
70
|
"TOOLS": "Tools",
|
|
67
71
|
"SAVE_LAYER_EDITION_CHANGES": "Save edition changes",
|
|
68
|
-
"DISCARD_LAYER_EDITION_CHANGES": "Discard edition changes"
|
|
72
|
+
"DISCARD_LAYER_EDITION_CHANGES": "Discard edition changes",
|
|
73
|
+
"CAPTURE_VIEW": "Capture the view"
|
|
69
74
|
},
|
|
70
75
|
"timeseries": {
|
|
71
76
|
"FORECAST_PROBE": "Forecast"
|
|
@@ -202,21 +207,6 @@
|
|
|
202
207
|
"LAYER_CATEGORY_ICON_FIELD_LABEL": "Select an icon for this category",
|
|
203
208
|
"LAYER_CATEGORY_LAYERS_FIELD_LABEL": "Select the layers in this category",
|
|
204
209
|
"LAYER_CATEGORY_EXCLUSIVE_FIELD_LABEL": "Make selection exclusive within this category",
|
|
205
|
-
"UPDATE_SETTINGS_TITLE": "Your settings",
|
|
206
|
-
"TIME_FORMAT_SETTINGS": "Time/Date format",
|
|
207
|
-
"TIME_FORMAT_SHORT_TIME_FIELD_LABEL": "Short time format",
|
|
208
|
-
"TIME_FORMAT_SHORT_TIME_FIELD_HELPER": "<a target='_blank' href='https://momentjs.com/docs/#/displaying/format/'>🛈</a>",
|
|
209
|
-
"TIME_FORMAT_LONG_TIME_FIELD_LABEL": "Long time format",
|
|
210
|
-
"TIME_FORMAT_LONG_TIME_FIELD_HELPER": "<a target='_blank' href='https://momentjs.com/docs/#/displaying/format/'>🛈</a>",
|
|
211
|
-
"TIME_FORMAT_SHORT_DATE_FIELD_LABEL": "Short date format",
|
|
212
|
-
"TIME_FORMAT_SHORT_DATE_FIELD_HELPER": "<a target='_blank' href='https://momentjs.com/docs/#/displaying/format/'>🛈</a>",
|
|
213
|
-
"TIME_FORMAT_LONG_DATE_FIELD_LABEL": "Long date format",
|
|
214
|
-
"TIME_FORMAT_LONG_DATE_FIELD_HELPER": "<a target='_blank' href='https://momentjs.com/docs/#/displaying/format/'>🛈</a>",
|
|
215
|
-
"TIME_FORMAT_SHORT_YEAR_FIELD_LABEL": "Short year format",
|
|
216
|
-
"TIME_FORMAT_SHORT_YEAR_FIELD_HELPER": "<a target='_blank' href='https://momentjs.com/docs/#/displaying/format/'>🛈</a>",
|
|
217
|
-
"TIME_FORMAT_LONG_YEAR_FIELD_LABEL": "Long year format",
|
|
218
|
-
"TIME_FORMAT_LONG_YEAR_FIELD_HELPER": "<a target='_blank' href='https://momentjs.com/docs/#/displaying/format/'>🛈</a>",
|
|
219
|
-
"TIME_FORMAT_UTC_FIELD_LABEL": "UTC time display mode",
|
|
220
210
|
"MAP_SETTINGS": "Map parameters",
|
|
221
211
|
"RESTORE_VIEW_FIELD_LABEL": "Save current extent",
|
|
222
212
|
"RESTORE_LAYERS_FIELD_LABEL": "Save active layers",
|
|
@@ -224,6 +214,7 @@
|
|
|
224
214
|
"LOCATION_FORMAT_HELPER": "<a target='_blank' href='https://github.com/nerik/formatcoords#formatting'>🛈</a>",
|
|
225
215
|
"TIMELINE_SETTINGS": "Timeline parameters",
|
|
226
216
|
"TIMELINE_STEP": "Timeline step (in minutes)",
|
|
217
|
+
"TIMELINE_INTERVAL": "Real-time data refresh update interval",
|
|
227
218
|
"TIMESERIES_SETTINGS": "Timeseries parameters",
|
|
228
219
|
"TIMESERIES_SPAN": "Timeseries span (in hours)"
|
|
229
220
|
},
|
|
@@ -244,6 +235,13 @@
|
|
|
244
235
|
"COPY_LOCATION_LABEL": "Copy the coordinates in your clipboard using this button.",
|
|
245
236
|
"LOCATION_TRACKING_LABEL": "Drag the screen to display the coordinates of its center and release to keep track of it.",
|
|
246
237
|
"TRACK_BACK_LABEL": "Then stop tracking by going back to the actions.",
|
|
238
|
+
"MEASURE_LABEL": "Activate measure tools using this button.",
|
|
239
|
+
"MEASURE_DISTANCE_LABEL": "Measure a distance using this button.",
|
|
240
|
+
"MEASURE_DISTANCE_DETAILS_LABEL": "Draw the line segment(s) you'd like to measure on the map and hover any elements to get measure information.",
|
|
241
|
+
"MEASURE_AREA_LABEL": "Measure an area using this button.",
|
|
242
|
+
"MEASURE_AREA_DETAILS_LABEL": "Draw the polygons(s) you'd like to measure on the map and hover any elements to get measure information.",
|
|
243
|
+
"CLEAR_MEASURE_LABEL": "Clear your current measurements using this button.",
|
|
244
|
+
"MEASURE_BACK_LABEL": "Then stop measuring by going back to the actions.",
|
|
247
245
|
"TOGGLE_VR_LABEL": "Switch to Virtual Reality (VR) mode with this button.",
|
|
248
246
|
"TOGGLE_FULLSCREEN_LABEL": "Switch to fullscreen mode with this button.",
|
|
249
247
|
"TOGGLE_CATALOG_LABEL": "Open the catalog with this button."
|
|
@@ -359,13 +357,19 @@
|
|
|
359
357
|
"KTimeSeries": {
|
|
360
358
|
"NO_DATA_AVAILABLE": "No data available",
|
|
361
359
|
"CENTER_ON": "Center the view on the probed location",
|
|
362
|
-
"SPAN": "Timeseries span"
|
|
360
|
+
"SPAN": "Timeseries span",
|
|
361
|
+
"RUN": "Forecast run",
|
|
362
|
+
"TIME_LABEL": "Time",
|
|
363
|
+
"EXPORT_SERIES": "Export data",
|
|
364
|
+
"SERIES_EXPORT_FILE": "Series.csv"
|
|
363
365
|
},
|
|
364
366
|
"KCatalogPanel": {
|
|
365
367
|
"BASE_LAYERS": "Base Layers",
|
|
366
368
|
"TERRAIN_LAYERS": "Terrain layers",
|
|
367
369
|
"OVERLAY_LAYERS": "My layers",
|
|
368
370
|
"MEASURE_LAYERS": "Measure layers",
|
|
371
|
+
"INFRASTRUCTURE_LAYERS": "Infrastructures",
|
|
372
|
+
"ADMINISTRATIVE_LAYERS": "Administrative",
|
|
369
373
|
"METEO_LAYERS": "Meteo forecasts",
|
|
370
374
|
"BUSINESS_LAYERS": "Business layers",
|
|
371
375
|
"CAPTURED_LAYERS": "Captured views",
|
|
@@ -410,9 +414,10 @@
|
|
|
410
414
|
},
|
|
411
415
|
"KLayerStyleForm": {
|
|
412
416
|
"BASE": "Base properties",
|
|
413
|
-
"DEFAULT_VISIBILITY": "
|
|
417
|
+
"DEFAULT_VISIBILITY": "Visible by default",
|
|
414
418
|
"MIN_ZOOM": "Visible from level",
|
|
415
419
|
"MAX_ZOOM": "Visible until level",
|
|
420
|
+
"SELECTABLE": "Selectable",
|
|
416
421
|
"LAYER_OPACITY": "Transparent layer",
|
|
417
422
|
"OPACITY": "Opacity",
|
|
418
423
|
"POINTS": "Markers",
|
|
@@ -549,5 +554,31 @@
|
|
|
549
554
|
"EDIT_PROPERTIES": "Edit feature properties",
|
|
550
555
|
"DRAG_FEATURES": "Move features",
|
|
551
556
|
"REMOVE_FEATURES": "Remove features"
|
|
557
|
+
},
|
|
558
|
+
"KCaptureToolbar": {
|
|
559
|
+
"SD_LABEL": "Standard Definition",
|
|
560
|
+
"SD_DESCRIPTION": "4:3, 640 x 480",
|
|
561
|
+
"HD_LABEL": "High Definition",
|
|
562
|
+
"HD_DESCRIPTION": "16:9, 1280 x 720",
|
|
563
|
+
"FHD_LABEL": "Full HD",
|
|
564
|
+
"FHD_DESCRIPTION": "16:9, 1920 x 1080",
|
|
565
|
+
"QHD_LABEL": "Quad HD",
|
|
566
|
+
"QHD_DESCRIPTION": "16:9, 2560 x 1440",
|
|
567
|
+
"2K_LABEL": "2K",
|
|
568
|
+
"2K_DESCRIPTION": "1:1.77, 2048 x 1080",
|
|
569
|
+
"4K_LABEL": "4K or Ultra HD",
|
|
570
|
+
"4K_DESCRIPTION": "1:1.9, 3840 x 2160",
|
|
571
|
+
"8K_LABEL": "8K or Full Ultra HD",
|
|
572
|
+
"8K_DESCRIPTION": "16∶9, 7680 x 4320",
|
|
573
|
+
"CAPTURE_ACTION": "Capture view",
|
|
574
|
+
"CAPTURING_VIEW": "Waiting for capturing view"
|
|
575
|
+
},
|
|
576
|
+
"KMeasureTool": {
|
|
577
|
+
"TOOL_BUTTON_LABEL": "Display the measure tool",
|
|
578
|
+
"CLEAR": "Clear all measurements",
|
|
579
|
+
"MEASURE_DISTANCE": "Measure a distance",
|
|
580
|
+
"MEASURE_AREA": "Measure an area",
|
|
581
|
+
"DISPLAY_MEASURE_VALUE": "Display measure values",
|
|
582
|
+
"CLICK_TO_CHANGE_UNIT": "Click to change unit"
|
|
552
583
|
}
|
|
553
584
|
}
|