@kalisio/kdk 1.5.0 → 1.7.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.
Files changed (487) hide show
  1. package/.nyc_output/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
  2. package/.nyc_output/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
  3. package/.nyc_output/{058fc679-d60a-4501-ac04-71171e5200b8.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
  4. package/.nyc_output/{8b1830fa-932e-4a61-9837-4a5b18f83ea9.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
  5. package/.nyc_output/{afd2d144-3570-4858-b94a-b523dbd023dd.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
  6. package/.nyc_output/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
  7. package/.nyc_output/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
  8. package/.nyc_output/processinfo/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
  9. package/.nyc_output/processinfo/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
  10. package/.nyc_output/processinfo/27401f21-8ccf-42fa-8230-4232189d86b3.json +1 -0
  11. package/.nyc_output/processinfo/52278ef5-c337-4724-97be-e2e4416847c5.json +1 -0
  12. package/.nyc_output/processinfo/5dd49b8a-4c84-42f9-a3d5-712247a84775.json +1 -0
  13. package/.nyc_output/processinfo/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
  14. package/.nyc_output/processinfo/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
  15. package/.nyc_output/processinfo/index.json +1 -1
  16. package/.travis.test.sh +1 -1
  17. package/CHANGELOG.md +107 -11
  18. package/coverage/core/api/application.js.html +323 -245
  19. package/coverage/core/api/authentication.js.html +1 -1
  20. package/coverage/core/api/db.js.html +108 -108
  21. package/coverage/core/api/hooks/hooks.account.js.html +1 -1
  22. package/coverage/core/api/hooks/hooks.authentication.js.html +1 -1
  23. package/coverage/core/api/hooks/hooks.authorisations.js.html +21 -6
  24. package/coverage/core/api/hooks/hooks.devices.js.html +1 -1
  25. package/coverage/core/api/hooks/hooks.groups.js.html +1 -1
  26. package/coverage/core/api/hooks/hooks.logger.js.html +1 -1
  27. package/coverage/core/api/hooks/hooks.model.js.html +1 -1
  28. package/coverage/core/api/hooks/hooks.organisations.js.html +1 -1
  29. package/coverage/core/api/hooks/hooks.pusher.js.html +1 -1
  30. package/coverage/core/api/hooks/hooks.query.js.html +114 -48
  31. package/coverage/core/api/hooks/hooks.service.js.html +1 -1
  32. package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
  33. package/coverage/core/api/hooks/hooks.tags.js.html +1 -1
  34. package/coverage/core/api/hooks/hooks.users.js.html +1 -1
  35. package/coverage/core/api/hooks/index.html +12 -12
  36. package/coverage/core/api/hooks/index.js.html +1 -1
  37. package/coverage/core/api/index.html +34 -34
  38. package/coverage/core/api/index.js.html +26 -26
  39. package/coverage/core/api/marshall.js.html +1 -1
  40. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  41. package/coverage/core/api/models/index.html +1 -1
  42. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  43. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  44. package/coverage/core/api/models/users.model.mongodb.js.html +1 -1
  45. package/coverage/core/api/oauth2-handler.js.html +1 -1
  46. package/coverage/core/api/oauth2-verifier.js.html +1 -1
  47. package/coverage/core/api/services/account/account.hooks.js.html +1 -1
  48. package/coverage/core/api/services/account/account.service.js.html +1 -1
  49. package/coverage/core/api/services/account/index.html +1 -1
  50. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  51. package/coverage/core/api/services/authorisations/authorisations.service.js.html +31 -7
  52. package/coverage/core/api/services/authorisations/index.html +9 -9
  53. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  54. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  55. package/coverage/core/api/services/databases/index.html +1 -1
  56. package/coverage/core/api/services/devices/devices.hooks.js.html +1 -1
  57. package/coverage/core/api/services/devices/devices.service.js.html +1 -1
  58. package/coverage/core/api/services/devices/index.html +1 -1
  59. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  60. package/coverage/core/api/services/groups/index.html +1 -1
  61. package/coverage/core/api/services/index.html +11 -11
  62. package/coverage/core/api/services/index.js.html +66 -66
  63. package/coverage/core/api/services/mailer/index.html +1 -1
  64. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  65. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  66. package/coverage/core/api/services/organisations/index.html +1 -1
  67. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  68. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  69. package/coverage/core/api/services/pusher/index.html +1 -1
  70. package/coverage/core/api/services/pusher/pusher.channels.js.html +1 -1
  71. package/coverage/core/api/services/pusher/pusher.hooks.js.html +1 -1
  72. package/coverage/core/api/services/pusher/pusher.service.js.html +1 -1
  73. package/coverage/core/api/services/storage/index.html +1 -1
  74. package/coverage/core/api/services/storage/storage.hooks.js.html +1 -1
  75. package/coverage/core/api/services/tags/index.html +1 -1
  76. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  77. package/coverage/core/api/services/users/index.html +1 -1
  78. package/coverage/core/api/services/users/users.hooks.js.html +1 -1
  79. package/coverage/core/common/errors.js.html +1 -1
  80. package/coverage/core/common/index.html +7 -7
  81. package/coverage/core/common/index.js.html +1 -1
  82. package/coverage/core/common/permissions.js.html +81 -51
  83. package/coverage/index.html +39 -39
  84. package/coverage/lcov-report/core/api/application.js.html +323 -245
  85. package/coverage/lcov-report/core/api/authentication.js.html +1 -1
  86. package/coverage/lcov-report/core/api/db.js.html +108 -108
  87. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +1 -1
  88. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +1 -1
  89. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +21 -6
  90. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +1 -1
  91. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +1 -1
  92. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +1 -1
  93. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +1 -1
  94. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +1 -1
  95. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +1 -1
  96. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +114 -48
  97. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
  98. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
  99. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +1 -1
  100. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +1 -1
  101. package/coverage/lcov-report/core/api/hooks/index.html +12 -12
  102. package/coverage/lcov-report/core/api/hooks/index.js.html +1 -1
  103. package/coverage/lcov-report/core/api/index.html +34 -34
  104. package/coverage/lcov-report/core/api/index.js.html +26 -26
  105. package/coverage/lcov-report/core/api/marshall.js.html +1 -1
  106. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  107. package/coverage/lcov-report/core/api/models/index.html +1 -1
  108. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  109. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  110. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +1 -1
  111. package/coverage/lcov-report/core/api/oauth2-handler.js.html +1 -1
  112. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +1 -1
  113. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
  114. package/coverage/lcov-report/core/api/services/account/account.service.js.html +1 -1
  115. package/coverage/lcov-report/core/api/services/account/index.html +1 -1
  116. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
  117. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +31 -7
  118. package/coverage/lcov-report/core/api/services/authorisations/index.html +9 -9
  119. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  120. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  121. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  122. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +1 -1
  123. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +1 -1
  124. package/coverage/lcov-report/core/api/services/devices/index.html +1 -1
  125. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  126. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  127. package/coverage/lcov-report/core/api/services/index.html +11 -11
  128. package/coverage/lcov-report/core/api/services/index.js.html +66 -66
  129. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  130. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  131. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  132. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  133. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  134. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  135. package/coverage/lcov-report/core/api/services/pusher/index.html +1 -1
  136. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +1 -1
  137. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +1 -1
  138. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +1 -1
  139. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  140. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +1 -1
  141. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  142. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  143. package/coverage/lcov-report/core/api/services/users/index.html +1 -1
  144. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +1 -1
  145. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  146. package/coverage/lcov-report/core/common/index.html +7 -7
  147. package/coverage/lcov-report/core/common/index.js.html +1 -1
  148. package/coverage/lcov-report/core/common/permissions.js.html +81 -51
  149. package/coverage/lcov-report/index.html +39 -39
  150. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  151. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +1 -1
  152. package/coverage/lcov-report/map/api/hooks/index.html +1 -1
  153. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  154. package/coverage/lcov-report/map/api/index.html +1 -1
  155. package/coverage/lcov-report/map/api/index.js.html +1 -1
  156. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  157. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  158. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  159. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +14 -5
  160. package/coverage/lcov-report/map/api/models/index.html +7 -7
  161. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  162. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  163. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  164. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  165. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  167. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  168. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
  169. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  170. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  171. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  172. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  173. package/coverage/lcov-report/map/api/services/index.html +1 -1
  174. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  175. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  176. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  177. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  178. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  179. package/coverage/lcov-report/map/common/index.html +1 -1
  180. package/coverage/lcov-report/map/common/index.js.html +1 -1
  181. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  182. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  183. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  184. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  185. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  186. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  187. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  188. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  189. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  190. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  191. package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
  192. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  193. package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
  194. package/coverage/lcov.info +948 -769
  195. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  196. package/coverage/map/api/hooks/hooks.query.js.html +1 -1
  197. package/coverage/map/api/hooks/index.html +1 -1
  198. package/coverage/map/api/hooks/index.js.html +1 -1
  199. package/coverage/map/api/index.html +1 -1
  200. package/coverage/map/api/index.js.html +1 -1
  201. package/coverage/map/api/marshall.js.html +1 -1
  202. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  203. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  204. package/coverage/map/api/models/features.model.mongodb.js.html +14 -5
  205. package/coverage/map/api/models/index.html +7 -7
  206. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  207. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  208. package/coverage/map/api/services/alerts/index.html +1 -1
  209. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  210. package/coverage/map/api/services/catalog/index.html +1 -1
  211. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  212. package/coverage/map/api/services/daptiles/index.html +1 -1
  213. package/coverage/map/api/services/features/features.hooks.js.html +1 -1
  214. package/coverage/map/api/services/features/index.html +1 -1
  215. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  216. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  217. package/coverage/map/api/services/geocoder/index.html +1 -1
  218. package/coverage/map/api/services/index.html +1 -1
  219. package/coverage/map/api/services/index.js.html +1 -1
  220. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  221. package/coverage/map/common/errors.js.html +1 -1
  222. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  223. package/coverage/map/common/grid.js.html +1 -1
  224. package/coverage/map/common/index.html +1 -1
  225. package/coverage/map/common/index.js.html +1 -1
  226. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  227. package/coverage/map/common/moment-utils.js.html +1 -1
  228. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  229. package/coverage/map/common/opendap-utils.js.html +1 -1
  230. package/coverage/map/common/permissions.js.html +1 -1
  231. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  232. package/coverage/map/common/tms-utils.js.html +1 -1
  233. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  234. package/coverage/map/common/wcs-utils.js.html +1 -1
  235. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  236. package/coverage/map/common/wfs-utils.js.html +1 -1
  237. package/coverage/map/common/wms-utils.js.html +1 -1
  238. package/coverage/map/common/wmts-utils.js.html +1 -1
  239. package/extras/tours/map/catalog-panel.js +61 -10
  240. package/extras/tours/map/create-view.js +25 -0
  241. package/extras/tours/map/fab.js +10 -1
  242. package/extras/tours/map/navigation-bar.js +56 -10
  243. package/lib/core/api/application.js +44 -10
  244. package/lib/core/api/application.js.map +1 -1
  245. package/lib/core/api/hooks/hooks.authorisations.js +8 -1
  246. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  247. package/lib/core/api/hooks/hooks.query.js +135 -100
  248. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  249. package/lib/core/api/services/authorisations/authorisations.service.js +13 -1
  250. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  251. package/lib/core/api/services/pusher/pusher.service.js +40 -16
  252. package/lib/core/api/services/pusher/pusher.service.js.map +1 -1
  253. package/lib/core/client/components/chart/KChart.vue +115 -0
  254. package/lib/core/client/components/chart/KStatsChart.vue +76 -0
  255. package/lib/core/client/components/chart/index.js +20 -0
  256. package/lib/core/client/components/chart/index.js.map +1 -0
  257. package/lib/core/client/components/collection/KColumn.vue +29 -28
  258. package/lib/core/client/components/collection/KFilter.vue +103 -72
  259. package/lib/core/client/components/collection/KHistoryEntry.vue +1 -1
  260. package/lib/core/client/components/collection/KItem.vue +4 -4
  261. package/lib/core/client/components/editor/KModalEditor.vue +3 -4
  262. package/lib/core/client/components/editor/KSettingsEditor.vue +6 -2
  263. package/lib/core/client/components/form/KChipsField.vue +4 -4
  264. package/lib/core/client/components/form/KFileField.vue +13 -6
  265. package/lib/core/client/components/form/KRoleField.vue +5 -2
  266. package/lib/core/client/components/form/KTextField.vue +12 -2
  267. package/lib/core/client/components/form/KUnitField.vue +57 -0
  268. package/lib/core/client/components/form/KUrlField.vue +1 -1
  269. package/lib/core/client/components/form/KView.vue +1 -1
  270. package/lib/core/client/components/frame/KAction.vue +41 -7
  271. package/lib/core/client/components/frame/KBlock.vue +7 -7
  272. package/lib/core/client/components/frame/KContent.vue +1 -1
  273. package/lib/core/client/components/frame/KModal.vue +66 -20
  274. package/lib/core/client/components/frame/KOpener.vue +1 -1
  275. package/lib/core/client/components/frame/KPanel.vue +8 -7
  276. package/lib/core/client/components/frame/KPopupAction.vue +6 -0
  277. package/lib/core/client/components/frame/KScreen.vue +1 -1
  278. package/lib/core/client/components/frame/KScrollArea.vue +65 -0
  279. package/lib/core/client/components/frame/KStamp.vue +4 -2
  280. package/lib/core/client/components/frame/index.js +6 -6
  281. package/lib/core/client/components/frame/index.js.map +1 -1
  282. package/lib/core/client/components/input/KColorChooser.vue +3 -5
  283. package/lib/core/client/components/input/KIconChooser.vue +41 -40
  284. package/lib/core/client/components/input/KPalette.vue +1 -1
  285. package/lib/core/client/components/input/index.js +14 -4
  286. package/lib/core/client/components/input/index.js.map +1 -1
  287. package/lib/core/client/components/layout/KAbout.vue +47 -49
  288. package/lib/core/client/components/layout/KFab.vue +1 -1
  289. package/lib/core/client/components/layout/KLayout.vue +10 -2
  290. package/lib/core/client/components/layout/KPage.vue +19 -18
  291. package/lib/core/client/components/layout/KTour.vue +5 -3
  292. package/lib/core/client/components/layout/KWindow.vue +211 -59
  293. package/lib/core/client/components/media/KMediaBrowser.vue +6 -6
  294. package/lib/core/client/components/menu/KMenu.vue +13 -5
  295. package/lib/core/client/components/menu/KRadialFab.vue +22 -24
  296. package/lib/core/client/components/menu/KRadialFabItem.vue +17 -18
  297. package/lib/core/client/components/team/KAddMember.vue +1 -1
  298. package/lib/core/client/components/team/KChangeRole.vue +11 -14
  299. package/lib/core/client/components/team/KGroupCard.vue +12 -5
  300. package/lib/core/client/components/team/KJoinGroup.vue +22 -22
  301. package/lib/core/client/components/team/KMemberCard.vue +19 -4
  302. package/lib/core/client/components/time/KAbsoluteTimeRange.vue +190 -0
  303. package/lib/core/client/components/time/KRelativeTimeRanges.vue +192 -0
  304. package/lib/core/client/components/time/index.js +20 -0
  305. package/lib/core/client/components/time/index.js.map +1 -0
  306. package/lib/core/client/components/viewer/KModalViewer.vue +10 -9
  307. package/lib/core/client/i18n/core_en.json +99 -17
  308. package/lib/core/client/i18n/core_fr.json +94 -18
  309. package/lib/core/client/index.js +16 -3
  310. package/lib/core/client/index.js.map +1 -1
  311. package/lib/core/client/mixins/mixin.base-collection.js +11 -1
  312. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  313. package/lib/core/client/mixins/mixin.base-widget.js +26 -12
  314. package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
  315. package/lib/core/client/reader.js +46 -15
  316. package/lib/core/client/reader.js.map +1 -1
  317. package/lib/core/client/readers/reader.csv.js +33 -22
  318. package/lib/core/client/readers/reader.csv.js.map +1 -1
  319. package/lib/core/client/readers/reader.json.js +31 -20
  320. package/lib/core/client/readers/reader.json.js.map +1 -1
  321. package/lib/core/client/services/index.js +16 -4
  322. package/lib/core/client/services/index.js.map +1 -1
  323. package/lib/core/client/services/local-settings.service.js +10 -4
  324. package/lib/core/client/services/local-settings.service.js.map +1 -1
  325. package/lib/core/client/time.js +29 -18
  326. package/lib/core/client/time.js.map +1 -1
  327. package/lib/core/client/units.js +207 -0
  328. package/lib/core/client/units.js.map +1 -0
  329. package/lib/core/client/utils.js +11 -0
  330. package/lib/core/client/utils.js.map +1 -1
  331. package/lib/core/common/permissions.js +44 -34
  332. package/lib/core/common/permissions.js.map +1 -1
  333. package/lib/core/common/schemas/settings.update.json +86 -4
  334. package/lib/map/api/hooks/hooks.catalog.js +20 -0
  335. package/lib/map/api/hooks/hooks.catalog.js.map +1 -1
  336. package/lib/map/api/models/catalog.model.mongodb.js +6 -1
  337. package/lib/map/api/models/catalog.model.mongodb.js.map +1 -1
  338. package/lib/map/api/models/features.model.mongodb.js +8 -0
  339. package/lib/map/api/models/features.model.mongodb.js.map +1 -1
  340. package/lib/map/api/services/catalog/catalog.hooks.js +3 -1
  341. package/lib/map/api/services/catalog/catalog.hooks.js.map +1 -1
  342. package/lib/map/client/components/KCaptureToolbar.vue +2 -7
  343. package/lib/map/client/components/KColorLegend.vue +38 -25
  344. package/lib/map/client/components/KFeaturesChart.vue +84 -114
  345. package/lib/map/client/components/KFeaturesFilter.vue +37 -38
  346. package/lib/map/client/components/KFeaturesTable.vue +15 -16
  347. package/lib/map/client/components/KLayerStyleEditor.vue +1 -1
  348. package/lib/map/client/components/KLayerStyleForm.vue +123 -51
  349. package/lib/map/client/components/KLevelSlider.vue +30 -29
  350. package/lib/map/client/components/KLocationMap.vue +2 -2
  351. package/lib/map/client/components/KMeasureTool.vue +49 -28
  352. package/lib/map/client/components/KPositionIndicator.vue +4 -4
  353. package/lib/map/client/components/KTimeline.vue +30 -35
  354. package/lib/map/client/components/KTimezoneMap.vue +156 -0
  355. package/lib/map/client/components/KUrlLegend.vue +11 -10
  356. package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
  357. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +1 -1
  358. package/lib/map/client/components/catalog/KCatalogLayersPanel.vue +56 -0
  359. package/lib/map/client/components/catalog/KCreateView.vue +91 -0
  360. package/lib/map/client/components/catalog/KLayerCategories.vue +5 -3
  361. package/lib/map/client/components/catalog/{KCatalog.vue → KLayersPanel.vue} +23 -22
  362. package/lib/map/client/components/catalog/KLayersSelector.vue +3 -3
  363. package/lib/map/client/components/catalog/KUserLayersPanel.vue +40 -0
  364. package/lib/map/client/components/catalog/KViewSelector.vue +46 -0
  365. package/lib/map/client/components/catalog/KViewsPanel.vue +110 -0
  366. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +5 -14
  367. package/lib/map/client/components/form/KTimezoneField.vue +135 -0
  368. package/lib/map/client/components/widget/KElevationProfile.vue +488 -0
  369. package/lib/map/client/components/widget/KInformationBox.vue +53 -37
  370. package/lib/map/client/components/widget/KMapillaryViewer.vue +26 -16
  371. package/lib/map/client/components/widget/KTimeSeries.vue +283 -358
  372. package/lib/map/client/i18n/map_en.json +73 -56
  373. package/lib/map/client/i18n/map_fr.json +75 -58
  374. package/lib/map/client/init.js +4 -3
  375. package/lib/map/client/init.js.map +1 -1
  376. package/lib/map/client/leaflet/GradientPath.js +40 -19
  377. package/lib/map/client/leaflet/GradientPath.js.map +1 -1
  378. package/lib/map/client/leaflet/TiledFeatureLayer.js +527 -93
  379. package/lib/map/client/leaflet/TiledFeatureLayer.js.map +1 -1
  380. package/lib/map/client/leaflet/TiledMeshLayer.js +58 -35
  381. package/lib/map/client/leaflet/TiledMeshLayer.js.map +1 -1
  382. package/lib/map/client/leaflet/utils.js +44 -3
  383. package/lib/map/client/leaflet/utils.js.map +1 -1
  384. package/lib/map/client/mixins/globe/mixin.base-globe.js +16 -1
  385. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  386. package/lib/map/client/mixins/globe/mixin.file-layers.js +12 -2
  387. package/lib/map/client/mixins/globe/mixin.file-layers.js.map +1 -1
  388. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +23 -27
  389. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  390. package/lib/map/client/mixins/globe/mixin.popup.js +7 -3
  391. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  392. package/lib/map/client/mixins/globe/mixin.style.js +8 -4
  393. package/lib/map/client/mixins/globe/mixin.style.js.map +1 -1
  394. package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -3
  395. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  396. package/lib/map/client/mixins/index.js +23 -18
  397. package/lib/map/client/mixins/index.js.map +1 -1
  398. package/lib/map/client/mixins/map/mixin.base-map.js +32 -8
  399. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  400. package/lib/map/client/mixins/map/mixin.edit-layers.js +8 -4
  401. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  402. package/lib/map/client/mixins/map/mixin.file-layers.js +13 -5
  403. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  404. package/lib/map/client/mixins/map/mixin.geojson-layers.js +65 -14
  405. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  406. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +6 -1
  407. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  408. package/lib/map/client/mixins/map/mixin.popup.js +4 -2
  409. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  410. package/lib/map/client/mixins/map/mixin.style.js +9 -5
  411. package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
  412. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +4 -11
  413. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  414. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +0 -11
  415. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  416. package/lib/map/client/mixins/map/mixin.tooltip.js +4 -2
  417. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  418. package/lib/map/client/mixins/mixin.activity.js +150 -150
  419. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  420. package/lib/map/client/mixins/mixin.catalog-panel.js +36 -0
  421. package/lib/map/client/mixins/mixin.catalog-panel.js.map +1 -0
  422. package/lib/map/client/mixins/mixin.feature-selection.js +17 -8
  423. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  424. package/lib/map/client/mixins/mixin.feature-service.js +36 -16
  425. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  426. package/lib/map/client/mixins/mixin.infobox.js +1 -1
  427. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  428. package/lib/map/client/mixins/mixin.levels.js +26 -12
  429. package/lib/map/client/mixins/mixin.levels.js.map +1 -1
  430. package/lib/map/client/mixins/mixin.style.js +1 -0
  431. package/lib/map/client/mixins/mixin.style.js.map +1 -1
  432. package/lib/map/client/mixins/mixin.weacast.js +22 -28
  433. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  434. package/lib/map/client/pixi-utils.js +8 -177
  435. package/lib/map/client/pixi-utils.js.map +1 -1
  436. package/lib/map/client/readers/index.js +12 -0
  437. package/lib/map/client/readers/index.js.map +1 -1
  438. package/lib/map/client/readers/reader.geojson.js +62 -34
  439. package/lib/map/client/readers/reader.geojson.js.map +1 -1
  440. package/lib/map/client/readers/reader.gpx.js +32 -21
  441. package/lib/map/client/readers/reader.gpx.js.map +1 -1
  442. package/lib/map/client/readers/reader.kml.js +32 -21
  443. package/lib/map/client/readers/reader.kml.js.map +1 -1
  444. package/lib/map/client/readers/reader.shp.js +116 -0
  445. package/lib/map/client/readers/reader.shp.js.map +1 -0
  446. package/lib/map/client/utils.js +1 -8
  447. package/lib/map/client/utils.js.map +1 -1
  448. package/lib/map/common/grid.js +131 -0
  449. package/lib/map/common/grid.js.map +1 -1
  450. package/lib/map/common/index.js +22 -11
  451. package/lib/map/common/index.js.map +1 -1
  452. package/lib/map/common/meteo-model-grid-source.js +5 -2
  453. package/lib/map/common/meteo-model-grid-source.js.map +1 -1
  454. package/lib/map/common/time-based-grid-source.js +5 -2
  455. package/lib/map/common/time-based-grid-source.js.map +1 -1
  456. package/lib/test/client/core/account.js +1 -1
  457. package/lib/test/client/core/account.js.map +1 -1
  458. package/lib/test/client/core/collection.js +31 -13
  459. package/lib/test/client/core/collection.js.map +1 -1
  460. package/lib/test/client/core/layout.js +137 -49
  461. package/lib/test/client/core/layout.js.map +1 -1
  462. package/lib/test/client/core/screens.js +1 -1
  463. package/lib/test/client/core/screens.js.map +1 -1
  464. package/lib/test/client/core/utils.js +89 -22
  465. package/lib/test/client/core/utils.js.map +1 -1
  466. package/lib/test/client/map/catalog.js +134 -41
  467. package/lib/test/client/map/catalog.js.map +1 -1
  468. package/lib/test/client/map/controls.js +7 -4
  469. package/lib/test/client/map/controls.js.map +1 -1
  470. package/lib/test/client/map/index.js +12 -0
  471. package/lib/test/client/map/index.js.map +1 -1
  472. package/lib/test/client/map/utils.js +67 -0
  473. package/lib/test/client/map/utils.js.map +1 -0
  474. package/package.json +5 -6
  475. package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +0 -1
  476. package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +0 -1
  477. package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +0 -1
  478. package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +0 -1
  479. package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +0 -1
  480. package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +0 -1
  481. package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +0 -1
  482. package/extras/tours/map/favorite-views.js +0 -53
  483. package/lib/core/client/components/frame/KChart.vue +0 -60
  484. package/lib/core/client/components/input/KCodeInput.vue +0 -50
  485. package/lib/core/client/components/input/KTimeRangeChooser.vue +0 -109
  486. package/lib/core/client/components/time/KTimeRange.vue +0 -144
  487. package/lib/map/client/components/KFavoriteViews.vue +0 -217
@@ -15,6 +15,12 @@ var _i18next2 = _interopRequireDefault(_i18next);
15
15
 
16
16
  var _events = require('./events');
17
17
 
18
+ var _quasar = require('quasar');
19
+
20
+ var _lodash = require('lodash');
21
+
22
+ var _lodash2 = _interopRequireDefault(_lodash);
23
+
18
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
25
 
20
26
  function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
@@ -24,27 +30,52 @@ const Reader = exports.Reader = {
24
30
  readers: {},
25
31
  register(mimeType, reader) {
26
32
  this.readers[mimeType] = reader;
33
+ reader.mimeType = mimeType;
34
+ },
35
+ filter(filelist) {
36
+ const acceptedFiles = [];
37
+ const additionnalFiles = [];
38
+ // iterate though the files and sort the files
39
+ for (let i = 0; i < filelist.length; ++i) {
40
+ const file = filelist[i];
41
+ const fileExt = _path2.default.extname(file.name);
42
+ let reader = this.readers[fileExt];
43
+ if (reader) {
44
+ acceptedFiles.push({ reader: fileExt, name: file.name, files: [file] });
45
+ } else {
46
+ reader = _lodash2.default.find(this.readers, reader => reader.getAdditionalFiles().includes(fileExt));
47
+ if (reader) {
48
+ additionnalFiles.push({ reader: reader.mimeType, file });
49
+ } else {
50
+ const error = { message: _i18next2.default.t('errors.UNSUPPORTED_FILE_FORMAT', { file: file.name }) };
51
+ _events.Events.$emit('error', error);
52
+ }
53
+ }
54
+ }
55
+ // process the additional files
56
+ _lodash2.default.forEach(additionnalFiles, additionnalFile => {
57
+ const group = _lodash2.default.find(acceptedFiles, acceptedFile => acceptedFile.reader === additionnalFile.reader);
58
+ if (group) group.files.push(additionnalFile.file);else {
59
+ const error = { message: _i18next2.default.t('errors.UNSUPPORTED_FILE_FORMAT', { file: additionnalFile.name }) };
60
+ _events.Events.$emit('error', error);
61
+ }
62
+ });
63
+ return acceptedFiles;
27
64
  },
28
65
  read(file, options) {
29
66
  var _this = this;
30
67
 
31
68
  return _asyncToGenerator(function* () {
32
- const fileExtension = _path2.default.extname(file.name);
33
- const reader = _this.readers[fileExtension];
34
- if (reader) {
35
- try {
36
- const content = yield reader(file, options);
37
- return content;
38
- } catch (error) {
39
- _events.Events.$emit('error', error);
40
- throw error;
41
- }
69
+ const reader = _this.readers[file.reader];
70
+ _quasar.Loading.show({ message: _i18next2.default.t('reader.READING_FILE', { file: file.name }) });
71
+ try {
72
+ const content = yield reader.read(file.files, options);
73
+ _quasar.Loading.hide();
74
+ return content;
75
+ } catch (error) {
76
+ _quasar.Loading.hide();
77
+ _events.Events.$emit('error', error);
42
78
  }
43
- const error = {
44
- message: _i18next2.default.t('errors.UNSUPPORTED_FILE_FORMAT', { file: file.name })
45
- };
46
- _events.Events.$emit('error', error);
47
- throw new Error(error);
48
79
  })();
49
80
  },
50
81
  getSupportedFormats() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../core/client/reader.js"],"names":["Reader","readers","register","mimeType","reader","read","file","options","fileExtension","path","extname","name","content","error","Events","$emit","message","i18next","t","Error","getSupportedFormats","Object","keys"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;;;AAEA;AACO,MAAMA,0BAAS;AACpBC,WAAS,EADW;AAEpBC,WAAUC,QAAV,EAAoBC,MAApB,EAA4B;AAC1B,SAAKH,OAAL,CAAaE,QAAb,IAAyBC,MAAzB;AACD,GAJmB;AAKdC,MAAN,CAAYC,IAAZ,EAAkBC,OAAlB,EAA2B;AAAA;;AAAA;AACzB,YAAMC,gBAAgBC,eAAKC,OAAL,CAAaJ,KAAKK,IAAlB,CAAtB;AACA,YAAMP,SAAS,MAAKH,OAAL,CAAaO,aAAb,CAAf;AACA,UAAIJ,MAAJ,EAAY;AACV,YAAI;AACF,gBAAMQ,UAAU,MAAMR,OAAOE,IAAP,EAAaC,OAAb,CAAtB;AACA,iBAAOK,OAAP;AACD,SAHD,CAGE,OAAOC,KAAP,EAAc;AACdC,yBAAOC,KAAP,CAAa,OAAb,EAAsBF,KAAtB;AACA,gBAAMA,KAAN;AACD;AACF;AACD,YAAMA,QAAQ;AACZG,iBAASC,kBAAQC,CAAR,CAAU,gCAAV,EAA4C,EAAEZ,MAAMA,KAAKK,IAAb,EAA5C;AADG,OAAd;AAGAG,qBAAOC,KAAP,CAAa,OAAb,EAAsBF,KAAtB;AACA,YAAM,IAAIM,KAAJ,CAAUN,KAAV,CAAN;AAhByB;AAiB1B,GAtBmB;AAuBpBO,wBAAuB;AACrB,WAAOC,OAAOC,IAAP,CAAY,KAAKrB,OAAjB,CAAP;AACD;AAzBmB,CAAf","file":"reader.js","sourcesContent":["import path from 'path'\r\nimport i18next from 'i18next'\r\nimport { Events } from './events'\r\n\r\n// Export singleton\r\nexport const Reader = {\r\n readers: {},\r\n register (mimeType, reader) {\r\n this.readers[mimeType] = reader\r\n },\r\n async read (file, options) {\r\n const fileExtension = path.extname(file.name)\r\n const reader = this.readers[fileExtension]\r\n if (reader) {\r\n try {\r\n const content = await reader(file, options)\r\n return content\r\n } catch (error) {\r\n Events.$emit('error', error)\r\n throw error\r\n }\r\n }\r\n const error = {\r\n message: i18next.t('errors.UNSUPPORTED_FILE_FORMAT', { file: file.name })\r\n }\r\n Events.$emit('error', error)\r\n throw new Error(error)\r\n },\r\n getSupportedFormats () {\r\n return Object.keys(this.readers)\r\n }\r\n}\n"]}
1
+ {"version":3,"sources":["../../../core/client/reader.js"],"names":["Reader","readers","register","mimeType","reader","filter","filelist","acceptedFiles","additionnalFiles","i","length","file","fileExt","path","extname","name","push","files","_","find","getAdditionalFiles","includes","error","message","i18next","t","Events","$emit","forEach","additionnalFile","group","acceptedFile","read","options","Loading","show","content","hide","getSupportedFormats","Object","keys"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;AACA;;AACA;;;;;;;;AAEA;AACO,MAAMA,0BAAS;AACpBC,WAAS,EADW;AAEpBC,WAAUC,QAAV,EAAoBC,MAApB,EAA4B;AAC1B,SAAKH,OAAL,CAAaE,QAAb,IAAyBC,MAAzB;AACAA,WAAOD,QAAP,GAAkBA,QAAlB;AACD,GALmB;AAMpBE,SAAQC,QAAR,EAAkB;AAChB,UAAMC,gBAAgB,EAAtB;AACA,UAAMC,mBAAmB,EAAzB;AACA;AACA,SAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAIH,SAASI,MAA7B,EAAqC,EAAED,CAAvC,EAA0C;AACxC,YAAME,OAAOL,SAASG,CAAT,CAAb;AACA,YAAMG,UAAUC,eAAKC,OAAL,CAAaH,KAAKI,IAAlB,CAAhB;AACA,UAAIX,SAAS,KAAKH,OAAL,CAAaW,OAAb,CAAb;AACA,UAAIR,MAAJ,EAAY;AACVG,sBAAcS,IAAd,CAAmB,EAAEZ,QAAQQ,OAAV,EAAmBG,MAAMJ,KAAKI,IAA9B,EAAoCE,OAAO,CAACN,IAAD,CAA3C,EAAnB;AACD,OAFD,MAEO;AACLP,iBAASc,iBAAEC,IAAF,CAAO,KAAKlB,OAAZ,EAAqBG,UAAUA,OAAOgB,kBAAP,GAA4BC,QAA5B,CAAqCT,OAArC,CAA/B,CAAT;AACA,YAAIR,MAAJ,EAAY;AACVI,2BAAiBQ,IAAjB,CAAsB,EAAEZ,QAAQA,OAAOD,QAAjB,EAA2BQ,IAA3B,EAAtB;AACD,SAFD,MAEO;AACL,gBAAMW,QAAQ,EAAEC,SAASC,kBAAQC,CAAR,CAAU,gCAAV,EAA4C,EAAEd,MAAMA,KAAKI,IAAb,EAA5C,CAAX,EAAd;AACAW,yBAAOC,KAAP,CAAa,OAAb,EAAsBL,KAAtB;AACD;AACF;AACF;AACD;AACAJ,qBAAEU,OAAF,CAAUpB,gBAAV,EAA4BqB,mBAAmB;AAC7C,YAAMC,QAAQZ,iBAAEC,IAAF,CAAOZ,aAAP,EAAsBwB,gBAAgBA,aAAa3B,MAAb,KAAwByB,gBAAgBzB,MAA9E,CAAd;AACA,UAAI0B,KAAJ,EAAWA,MAAMb,KAAN,CAAYD,IAAZ,CAAiBa,gBAAgBlB,IAAjC,EAAX,KACK;AACH,cAAMW,QAAQ,EAAEC,SAASC,kBAAQC,CAAR,CAAU,gCAAV,EAA4C,EAAEd,MAAMkB,gBAAgBd,IAAxB,EAA5C,CAAX,EAAd;AACAW,uBAAOC,KAAP,CAAa,OAAb,EAAsBL,KAAtB;AACD;AACF,KAPD;AAQA,WAAOf,aAAP;AACD,GApCmB;AAqCdyB,MAAN,CAAYrB,IAAZ,EAAkBsB,OAAlB,EAA2B;AAAA;;AAAA;AACzB,YAAM7B,SAAS,MAAKH,OAAL,CAAaU,KAAKP,MAAlB,CAAf;AACA8B,sBAAQC,IAAR,CAAa,EAAEZ,SAASC,kBAAQC,CAAR,CAAU,qBAAV,EAAiC,EAAEd,MAAMA,KAAKI,IAAb,EAAjC,CAAX,EAAb;AACA,UAAI;AACF,cAAMqB,UAAU,MAAMhC,OAAO4B,IAAP,CAAYrB,KAAKM,KAAjB,EAAwBgB,OAAxB,CAAtB;AACAC,wBAAQG,IAAR;AACA,eAAOD,OAAP;AACD,OAJD,CAIE,OAAOd,KAAP,EAAc;AACdY,wBAAQG,IAAR;AACAX,uBAAOC,KAAP,CAAa,OAAb,EAAsBL,KAAtB;AACD;AAVwB;AAW1B,GAhDmB;AAiDpBgB,wBAAuB;AACrB,WAAOC,OAAOC,IAAP,CAAY,KAAKvC,OAAjB,CAAP;AACD;AAnDmB,CAAf","file":"reader.js","sourcesContent":["import path from 'path'\r\nimport i18next from 'i18next'\r\nimport { Events } from './events'\r\nimport { Loading } from 'quasar'\r\nimport _ from 'lodash'\r\n\r\n// Export singleton\r\nexport const Reader = {\r\n readers: {},\r\n register (mimeType, reader) {\r\n this.readers[mimeType] = reader\r\n reader.mimeType = mimeType\r\n },\r\n filter (filelist) {\r\n const acceptedFiles = []\r\n const additionnalFiles = []\r\n // iterate though the files and sort the files\r\n for (let i = 0; i < filelist.length; ++i) {\r\n const file = filelist[i]\r\n const fileExt = path.extname(file.name)\r\n let reader = this.readers[fileExt]\r\n if (reader) {\r\n acceptedFiles.push({ reader: fileExt, name: file.name, files: [file] })\r\n } else {\r\n reader = _.find(this.readers, reader => reader.getAdditionalFiles().includes(fileExt))\r\n if (reader) {\r\n additionnalFiles.push({ reader: reader.mimeType, file })\r\n } else {\r\n const error = { message: i18next.t('errors.UNSUPPORTED_FILE_FORMAT', { file: file.name }) }\r\n Events.$emit('error', error)\r\n }\r\n }\r\n }\r\n // process the additional files\r\n _.forEach(additionnalFiles, additionnalFile => {\r\n const group = _.find(acceptedFiles, acceptedFile => acceptedFile.reader === additionnalFile.reader)\r\n if (group) group.files.push(additionnalFile.file)\r\n else {\r\n const error = { message: i18next.t('errors.UNSUPPORTED_FILE_FORMAT', { file: additionnalFile.name }) }\r\n Events.$emit('error', error)\r\n }\r\n })\r\n return acceptedFiles\r\n },\r\n async read (file, options) {\r\n const reader = this.readers[file.reader]\r\n Loading.show({ message: i18next.t('reader.READING_FILE', { file: file.name }) })\r\n try {\r\n const content = await reader.read(file.files, options)\r\n Loading.hide()\r\n return content\r\n } catch (error) {\r\n Loading.hide()\r\n Events.$emit('error', error)\r\n }\r\n },\r\n getSupportedFormats () {\r\n return Object.keys(this.readers)\r\n }\r\n}\r\n"]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.readCSV = readCSV;
6
+ exports.CSVReader = undefined;
7
7
 
8
8
  var _loglevel = require('loglevel');
9
9
 
@@ -19,25 +19,36 @@ var _papaparse2 = _interopRequireDefault(_papaparse);
19
19
 
20
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
21
 
22
- function readCSV(file, options) {
23
- return new Promise((resolve, reject) => {
24
- const reader = new FileReader();
25
- reader.onloadend = () => {
26
- let content = reader.result;
27
- const papaParseOptions = Object.assign({ skipEmptyLines: true }, options);
28
- content = _papaparse2.default.parse(content, papaParseOptions);
29
- if (content.errors.length > 0) {
30
- _loglevel2.default.debug(content.errors);
31
- reject(new Error(_i18next2.default.t('errors.INVALID_CSV_FILE', { file: file.name }), { errors: content.errors }));
32
- return;
33
- }
34
- resolve(content);
35
- };
36
- reader.onerror = error => {
37
- _loglevel2.default.debug(error);
38
- reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
39
- };
40
- reader.readAsText(file);
41
- });
42
- }
22
+ const CSVReader = exports.CSVReader = {
23
+ read(files, options) {
24
+ if (files.length !== 1) {
25
+ _loglevel2.default.debug('invlaid \'fields\' arguments');
26
+ return;
27
+ }
28
+ const file = files[0];
29
+ _loglevel2.default.debug(`reading CSV file ${file.name}`);
30
+ return new Promise((resolve, reject) => {
31
+ const reader = new FileReader();
32
+ reader.onloadend = () => {
33
+ let content = reader.result;
34
+ const papaParseOptions = Object.assign({ skipEmptyLines: true }, options);
35
+ content = _papaparse2.default.parse(content, papaParseOptions);
36
+ if (content.errors.length > 0) {
37
+ _loglevel2.default.debug(content.errors);
38
+ reject(new Error(_i18next2.default.t('errors.INVALID_CSV_FILE', { file: file.name }), { errors: content.errors }));
39
+ return;
40
+ }
41
+ resolve(content);
42
+ };
43
+ reader.onerror = error => {
44
+ _loglevel2.default.debug(error);
45
+ reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }));
46
+ };
47
+ reader.readAsText(file);
48
+ });
49
+ },
50
+ getAdditionalFiles() {
51
+ return [];
52
+ }
53
+ };
43
54
  //# sourceMappingURL=reader.csv.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../core/client/readers/reader.csv.js"],"names":["readCSV","file","options","Promise","resolve","reject","reader","FileReader","onloadend","content","result","papaParseOptions","Object","assign","skipEmptyLines","Papa","parse","errors","length","logger","debug","Error","i18next","t","name","onerror","error","readAsText"],"mappings":";;;;;QAIgBA,O,GAAAA,O;;AAJhB;;;;AACA;;;;AACA;;;;;;AAEO,SAASA,OAAT,CAAkBC,IAAlB,EAAwBC,OAAxB,EAAiC;AACtC,SAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,UAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,WAAOE,SAAP,GAAmB,MAAM;AACvB,UAAIC,UAAUH,OAAOI,MAArB;AACA,YAAMC,mBAAmBC,OAAOC,MAAP,CAAc,EAAEC,gBAAgB,IAAlB,EAAd,EAAwCZ,OAAxC,CAAzB;AACAO,gBAAUM,oBAAKC,KAAL,CAAWP,OAAX,EAAoBE,gBAApB,CAAV;AACA,UAAIF,QAAQQ,MAAR,CAAeC,MAAf,GAAwB,CAA5B,EAA+B;AAC7BC,2BAAOC,KAAP,CAAaX,QAAQQ,MAArB;AACAZ,eAAO,IAAIgB,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEtB,MAAMA,KAAKuB,IAAb,EAArC,CAAV,EAAqE,EAAEP,QAAQR,QAAQQ,MAAlB,EAArE,CAAP;AACA;AACD;AACDb,cAAQK,OAAR;AACD,KAVD;AAWAH,WAAOmB,OAAP,GAAkBC,KAAD,IAAW;AAC1BP,yBAAOC,KAAP,CAAaM,KAAb;AACArB,aAAO,IAAIgB,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEtB,MAAMA,KAAKuB,IAAb,EAArC,CAAV,EAAqE,EAAEP,QAAQS,KAAV,EAArE,CAAP;AACD,KAHD;AAIApB,WAAOqB,UAAP,CAAkB1B,IAAlB;AACD,GAlBM,CAAP;AAmBD","file":"reader.csv.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport Papa from 'papaparse'\r\n\r\nexport function readCSV (file, options) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n const papaParseOptions = Object.assign({ skipEmptyLines: true }, options)\r\n content = Papa.parse(content, papaParseOptions)\r\n if (content.errors.length > 0) {\r\n logger.debug(content.errors)\r\n reject(new Error(i18next.t('errors.INVALID_CSV_FILE', { file: file.name }), { errors: content.errors }))\r\n return\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\n }\r\n reader.readAsText(file)\r\n })\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../core/client/readers/reader.csv.js"],"names":["CSVReader","read","files","options","length","logger","debug","file","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","papaParseOptions","Object","assign","skipEmptyLines","Papa","parse","errors","Error","i18next","t","onerror","error","readAsText","getAdditionalFiles"],"mappings":";;;;;;;AAAA;;;;AACA;;;;AACA;;;;;;AAEO,MAAMA,gCAAY;AACvBC,OAAMC,KAAN,EAAaC,OAAb,EAAsB;AACpB,QAAID,MAAME,MAAN,KAAiB,CAArB,EAAwB;AACtBC,yBAAOC,KAAP,CAAa,8BAAb;AACA;AACD;AACD,UAAMC,OAAOL,MAAM,CAAN,CAAb;AACAG,uBAAOC,KAAP,CAAc,oBAAmBC,KAAKC,IAAK,EAA3C;AACA,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,aAAOE,SAAP,GAAmB,MAAM;AACvB,YAAIC,UAAUH,OAAOI,MAArB;AACA,cAAMC,mBAAmBC,OAAOC,MAAP,CAAc,EAAEC,gBAAgB,IAAlB,EAAd,EAAwCjB,OAAxC,CAAzB;AACAY,kBAAUM,oBAAKC,KAAL,CAAWP,OAAX,EAAoBE,gBAApB,CAAV;AACA,YAAIF,QAAQQ,MAAR,CAAenB,MAAf,GAAwB,CAA5B,EAA+B;AAC7BC,6BAAOC,KAAP,CAAaS,QAAQQ,MAArB;AACAZ,iBAAO,IAAIa,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEnB,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQR,QAAQQ,MAAlB,EAArE,CAAP;AACA;AACD;AACDb,gBAAQK,OAAR;AACD,OAVD;AAWAH,aAAOe,OAAP,GAAkBC,KAAD,IAAW;AAC1BvB,2BAAOC,KAAP,CAAasB,KAAb;AACAjB,eAAO,IAAIa,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEnB,MAAMA,KAAKC,IAAb,EAArC,CAAV,EAAqE,EAAEe,QAAQK,KAAV,EAArE,CAAP;AACD,OAHD;AAIAhB,aAAOiB,UAAP,CAAkBtB,IAAlB;AACD,KAlBM,CAAP;AAmBD,GA3BsB;AA4BvBuB,uBAAsB;AACpB,WAAO,EAAP;AACD;AA9BsB,CAAlB","file":"reader.csv.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\nimport Papa from 'papaparse'\r\n\r\nexport const CSVReader = {\r\n read (files, options) {\r\n if (files.length !== 1) {\r\n logger.debug('invlaid \\'fields\\' arguments')\r\n return\r\n }\r\n const file = files[0]\r\n logger.debug(`reading CSV file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n const papaParseOptions = Object.assign({ skipEmptyLines: true }, options)\r\n content = Papa.parse(content, papaParseOptions)\r\n if (content.errors.length > 0) {\r\n logger.debug(content.errors)\r\n reject(new Error(i18next.t('errors.INVALID_CSV_FILE', { file: file.name }), { errors: content.errors }))\r\n return\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file: file.name }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n },\r\n getAdditionalFiles () {\r\n return []\r\n }\r\n}\r\n"]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.readJSON = readJSON;
6
+ exports.JSONReader = undefined;
7
7
 
8
8
  var _loglevel = require('loglevel');
9
9
 
@@ -15,24 +15,35 @@ var _i18next2 = _interopRequireDefault(_i18next);
15
15
 
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
- function readJSON(file, options) {
19
- return new Promise((resolve, reject) => {
20
- const reader = new FileReader();
21
- reader.onloadend = () => {
22
- let content = reader.result;
23
- try {
24
- content = JSON.parse(content);
25
- } catch (error) {
18
+ const JSONReader = exports.JSONReader = {
19
+ read(files, options) {
20
+ if (files.length !== 1) {
21
+ _loglevel2.default.debug('invlaid \'fields\' arguments');
22
+ return;
23
+ }
24
+ const file = files[0];
25
+ _loglevel2.default.debug(`reading JSON file ${file.name}`);
26
+ return new Promise((resolve, reject) => {
27
+ const reader = new FileReader();
28
+ reader.onloadend = () => {
29
+ let content = reader.result;
30
+ try {
31
+ content = JSON.parse(content);
32
+ } catch (error) {
33
+ _loglevel2.default.debug(error);
34
+ reject(new Error(_i18next2.default.t('errors.INVALID_JSON_FILE', { file }), { errors: error }));
35
+ }
36
+ resolve(content);
37
+ };
38
+ reader.onerror = error => {
26
39
  _loglevel2.default.debug(error);
27
- reject(new Error(_i18next2.default.t('errors.INVALID_JSON_FILE', { file }), { errors: error }));
28
- }
29
- resolve(content);
30
- };
31
- reader.onerror = error => {
32
- _loglevel2.default.debug(error);
33
- reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file }), { errors: error }));
34
- };
35
- reader.readAsText(file);
36
- });
37
- }
40
+ reject(new Error(_i18next2.default.t('errors.CANNOT_READ_FILE', { file }), { errors: error }));
41
+ };
42
+ reader.readAsText(file);
43
+ });
44
+ },
45
+ getAdditionalFiles() {
46
+ return [];
47
+ }
48
+ };
38
49
  //# sourceMappingURL=reader.json.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../core/client/readers/reader.json.js"],"names":["readJSON","file","options","Promise","resolve","reject","reader","FileReader","onloadend","content","result","JSON","parse","error","logger","debug","Error","i18next","t","errors","onerror","readAsText"],"mappings":";;;;;QAGgBA,Q,GAAAA,Q;;AAHhB;;;;AACA;;;;;;AAEO,SAASA,QAAT,CAAmBC,IAAnB,EAAyBC,OAAzB,EAAkC;AACvC,SAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,UAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,WAAOE,SAAP,GAAmB,MAAM;AACvB,UAAIC,UAAUH,OAAOI,MAArB;AACA,UAAI;AACFD,kBAAUE,KAAKC,KAAL,CAAWH,OAAX,CAAV;AACD,OAFD,CAEE,OAAOI,KAAP,EAAc;AACdC,2BAAOC,KAAP,CAAaF,KAAb;AACAR,eAAO,IAAIW,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,0BAAV,EAAsC,EAAEjB,IAAF,EAAtC,CAAV,EAA2D,EAAEkB,QAAQN,KAAV,EAA3D,CAAP;AACD;AACDT,cAAQK,OAAR;AACD,KATD;AAUAH,WAAOc,OAAP,GAAkBP,KAAD,IAAW;AAC1BC,yBAAOC,KAAP,CAAaF,KAAb;AACAR,aAAO,IAAIW,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEjB,IAAF,EAArC,CAAV,EAA0D,EAAEkB,QAAQN,KAAV,EAA1D,CAAP;AACD,KAHD;AAIAP,WAAOe,UAAP,CAAkBpB,IAAlB;AACD,GAjBM,CAAP;AAkBD","file":"reader.json.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\n\r\nexport function readJSON (file, options) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = JSON.parse(content)\r\n } catch (error) {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.INVALID_JSON_FILE', { file }), { errors: error }))\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../core/client/readers/reader.json.js"],"names":["JSONReader","read","files","options","length","logger","debug","file","name","Promise","resolve","reject","reader","FileReader","onloadend","content","result","JSON","parse","error","Error","i18next","t","errors","onerror","readAsText","getAdditionalFiles"],"mappings":";;;;;;;AAAA;;;;AACA;;;;;;AAEO,MAAMA,kCAAa;AACxBC,OAAMC,KAAN,EAAaC,OAAb,EAAsB;AACpB,QAAID,MAAME,MAAN,KAAiB,CAArB,EAAwB;AACtBC,yBAAOC,KAAP,CAAa,8BAAb;AACA;AACD;AACD,UAAMC,OAAOL,MAAM,CAAN,CAAb;AACAG,uBAAOC,KAAP,CAAc,qBAAoBC,KAAKC,IAAK,EAA5C;AACA,WAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACtC,YAAMC,SAAS,IAAIC,UAAJ,EAAf;AACAD,aAAOE,SAAP,GAAmB,MAAM;AACvB,YAAIC,UAAUH,OAAOI,MAArB;AACA,YAAI;AACFD,oBAAUE,KAAKC,KAAL,CAAWH,OAAX,CAAV;AACD,SAFD,CAEE,OAAOI,KAAP,EAAc;AACdd,6BAAOC,KAAP,CAAaa,KAAb;AACAR,iBAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,0BAAV,EAAsC,EAAEf,IAAF,EAAtC,CAAV,EAA2D,EAAEgB,QAAQJ,KAAV,EAA3D,CAAP;AACD;AACDT,gBAAQK,OAAR;AACD,OATD;AAUAH,aAAOY,OAAP,GAAkBL,KAAD,IAAW;AAC1Bd,2BAAOC,KAAP,CAAaa,KAAb;AACAR,eAAO,IAAIS,KAAJ,CAAUC,kBAAQC,CAAR,CAAU,yBAAV,EAAqC,EAAEf,IAAF,EAArC,CAAV,EAA0D,EAAEgB,QAAQJ,KAAV,EAA1D,CAAP;AACD,OAHD;AAIAP,aAAOa,UAAP,CAAkBlB,IAAlB;AACD,KAjBM,CAAP;AAkBD,GA1BuB;AA2BxBmB,uBAAsB;AACpB,WAAO,EAAP;AACD;AA7BuB,CAAnB","file":"reader.json.js","sourcesContent":["import logger from 'loglevel'\r\nimport i18next from 'i18next'\r\n\r\nexport const JSONReader = {\r\n read (files, options) {\r\n if (files.length !== 1) {\r\n logger.debug('invlaid \\'fields\\' arguments')\r\n return\r\n }\r\n const file = files[0]\r\n logger.debug(`reading JSON file ${file.name}`)\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.onloadend = () => {\r\n let content = reader.result\r\n try {\r\n content = JSON.parse(content)\r\n } catch (error) {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.INVALID_JSON_FILE', { file }), { errors: error }))\r\n }\r\n resolve(content)\r\n }\r\n reader.onerror = (error) => {\r\n logger.debug(error)\r\n reject(new Error(i18next.t('errors.CANNOT_READ_FILE', { file }), { errors: error }))\r\n }\r\n reader.readAsText(file)\r\n })\r\n },\r\n getAdditionalFiles () {\r\n return []\r\n }\r\n}\r\n"]}
@@ -6,6 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.LocalSettingsService = undefined;
7
7
  exports.default = init;
8
8
 
9
+ var _lodash = require('lodash');
10
+
11
+ var _lodash2 = _interopRequireDefault(_lodash);
12
+
9
13
  var _localSettings = require('./local-settings.service');
10
14
 
11
15
  var _localSettings2 = _interopRequireDefault(_localSettings);
@@ -32,7 +36,7 @@ function init() {
32
36
  api.declareService('devices');
33
37
 
34
38
  // Setup service for settings edition
35
- api.createService('settings', Object.assign({
39
+ api.createService('settings', _lodash2.default.merge(_config2.default.settings || {}, {
36
40
  service: _localSettings2.default,
37
41
  propertyMapping: {
38
42
  shortTime: 'time.format.time.short',
@@ -41,13 +45,21 @@ function init() {
41
45
  longDate: 'time.format.date.long',
42
46
  shortYear: 'time.format.year.short',
43
47
  longYear: 'time.format.year.long',
44
- utc: 'time.format.utc',
48
+ timezone: 'time.format.timezone',
45
49
  timelineStep: 'time.step',
50
+ timelineInterval: 'time.interval',
46
51
  timeseriesSpan: 'timeseries.span',
47
52
  location: 'locationFormat',
48
53
  restoreView: 'restore.view',
49
- restoreLayers: 'restore.layers'
54
+ restoreLayers: 'restore.layers',
55
+ defaultLength: 'units.default.length',
56
+ defaultAltitude: 'units.default.altitude',
57
+ defaultArea: 'units.default.area',
58
+ defaultVelocity: 'units.default.velocity',
59
+ defaultTemperature: 'units.default.temperature',
60
+ defaultAngle: 'units.default.angle',
61
+ defaultPrecision: 'units.default.precision'
50
62
  }
51
- }, _config2.default.settings || {})); // Default options can be overriden from app config
63
+ })); // Default options can be overriden from app config
52
64
  }
53
65
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../core/client/services/index.js"],"names":["init","LocalSettingsService","api","declareService","context","createService","Object","assign","service","propertyMapping","shortTime","longTime","shortDate","longDate","shortYear","longYear","utc","timelineStep","timeseriesSpan","location","restoreView","restoreLayers","config","settings"],"mappings":";;;;;;kBAKwBA,I;;AALxB;;;;AACA;;;;;;QAESC,oB,GAAAA,uB;AAEM,SAASD,IAAT,GAAiB;AAC9B,QAAME,MAAM,IAAZ;;AAEA;AACAA,MAAIC,cAAJ,CAAmB,OAAnB;AACAD,MAAIC,cAAJ,CAAmB,gBAAnB;AACAD,MAAIC,cAAJ,CAAmB,MAAnB,EAA2B,EAAEC,SAAS,IAAX,EAA3B;AACAF,MAAIC,cAAJ,CAAmB,eAAnB;AACAD,MAAIC,cAAJ,CAAmB,SAAnB,EAA8B,EAAEC,SAAS,IAAX,EAA9B;AACAF,MAAIC,cAAJ,CAAmB,QAAnB,EAA6B,EAAEC,SAAS,IAAX,EAA7B;AACAF,MAAIC,cAAJ,CAAmB,SAAnB,EAA8B,EAAEC,SAAS,IAAX,EAA9B;AACAF,MAAIC,cAAJ,CAAmB,SAAnB;AACAD,MAAIC,cAAJ,CAAmB,SAAnB;;AAEA;AACAD,MAAIG,aAAJ,CAAkB,UAAlB,EAA8BC,OAAOC,MAAP,CAAc;AAC1CC,aAASP,uBADiC;AAE1CQ,qBAAiB;AACfC,iBAAW,wBADI;AAEfC,gBAAU,uBAFK;AAGfC,iBAAW,wBAHI;AAIfC,gBAAU,uBAJK;AAKfC,iBAAW,wBALI;AAMfC,gBAAU,uBANK;AAOfC,WAAK,iBAPU;AAQfC,oBAAc,WARC;AASfC,sBAAgB,iBATD;AAUfC,gBAAU,gBAVK;AAWfC,mBAAa,cAXE;AAYfC,qBAAe;AAZA;AAFyB,GAAd,EAgB3BC,iBAAOC,QAAP,IAAmB,EAhBQ,CAA9B,EAf8B,CA+BH;AAC5B","file":"index.js","sourcesContent":["import LocalSettingsService from './local-settings.service'\r\nimport config from 'config'\r\n\r\nexport { LocalSettingsService }\r\n\r\nexport default function init () {\r\n const api = this\r\n\r\n // Declare the built-in services, others are optional\r\n api.declareService('users')\r\n api.declareService('authorisations')\r\n api.declareService('tags', { context: true })\r\n api.declareService('organisations')\r\n api.declareService('members', { context: true })\r\n api.declareService('groups', { context: true })\r\n api.declareService('storage', { context: true })\r\n api.declareService('account')\r\n api.declareService('devices')\r\n\r\n // Setup service for settings edition\r\n api.createService('settings', Object.assign({\r\n service: LocalSettingsService,\r\n propertyMapping: {\r\n shortTime: 'time.format.time.short',\r\n longTime: 'time.format.time.long',\r\n shortDate: 'time.format.date.short',\r\n longDate: 'time.format.date.long',\r\n shortYear: 'time.format.year.short',\r\n longYear: 'time.format.year.long',\r\n utc: 'time.format.utc',\r\n timelineStep: 'time.step',\r\n timeseriesSpan: 'timeseries.span',\r\n location: 'locationFormat',\r\n restoreView: 'restore.view',\r\n restoreLayers: 'restore.layers'\r\n }\r\n }, config.settings || {})) // Default options can be overriden from app config\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../core/client/services/index.js"],"names":["init","LocalSettingsService","api","declareService","context","createService","_","merge","config","settings","service","propertyMapping","shortTime","longTime","shortDate","longDate","shortYear","longYear","timezone","timelineStep","timelineInterval","timeseriesSpan","location","restoreView","restoreLayers","defaultLength","defaultAltitude","defaultArea","defaultVelocity","defaultTemperature","defaultAngle","defaultPrecision"],"mappings":";;;;;;kBAMwBA,I;;AANxB;;;;AACA;;;;AACA;;;;;;QAESC,oB,GAAAA,uB;AAEM,SAASD,IAAT,GAAiB;AAC9B,QAAME,MAAM,IAAZ;;AAEA;AACAA,MAAIC,cAAJ,CAAmB,OAAnB;AACAD,MAAIC,cAAJ,CAAmB,gBAAnB;AACAD,MAAIC,cAAJ,CAAmB,MAAnB,EAA2B,EAAEC,SAAS,IAAX,EAA3B;AACAF,MAAIC,cAAJ,CAAmB,eAAnB;AACAD,MAAIC,cAAJ,CAAmB,SAAnB,EAA8B,EAAEC,SAAS,IAAX,EAA9B;AACAF,MAAIC,cAAJ,CAAmB,QAAnB,EAA6B,EAAEC,SAAS,IAAX,EAA7B;AACAF,MAAIC,cAAJ,CAAmB,SAAnB,EAA8B,EAAEC,SAAS,IAAX,EAA9B;AACAF,MAAIC,cAAJ,CAAmB,SAAnB;AACAD,MAAIC,cAAJ,CAAmB,SAAnB;;AAEA;AACAD,MAAIG,aAAJ,CAAkB,UAAlB,EAA8BC,iBAAEC,KAAF,CAAQC,iBAAOC,QAAP,IAAmB,EAA3B,EAA+B;AAC3DC,aAAST,uBADkD;AAE3DU,qBAAiB;AACfC,iBAAW,wBADI;AAEfC,gBAAU,uBAFK;AAGfC,iBAAW,wBAHI;AAIfC,gBAAU,uBAJK;AAKfC,iBAAW,wBALI;AAMfC,gBAAU,uBANK;AAOfC,gBAAU,sBAPK;AAQfC,oBAAc,WARC;AASfC,wBAAkB,eATH;AAUfC,sBAAgB,iBAVD;AAWfC,gBAAU,gBAXK;AAYfC,mBAAa,cAZE;AAafC,qBAAe,gBAbA;AAcfC,qBAAe,sBAdA;AAefC,uBAAiB,wBAfF;AAgBfC,mBAAa,oBAhBE;AAiBfC,uBAAiB,wBAjBF;AAkBfC,0BAAoB,2BAlBL;AAmBfC,oBAAc,qBAnBC;AAoBfC,wBAAkB;AApBH;AAF0C,GAA/B,CAA9B,EAf8B,CAuC1B;AACL","file":"index.js","sourcesContent":["import _ from 'lodash'\r\nimport LocalSettingsService from './local-settings.service'\r\nimport config from 'config'\r\n\r\nexport { LocalSettingsService }\r\n\r\nexport default function init () {\r\n const api = this\r\n\r\n // Declare the built-in services, others are optional\r\n api.declareService('users')\r\n api.declareService('authorisations')\r\n api.declareService('tags', { context: true })\r\n api.declareService('organisations')\r\n api.declareService('members', { context: true })\r\n api.declareService('groups', { context: true })\r\n api.declareService('storage', { context: true })\r\n api.declareService('account')\r\n api.declareService('devices')\r\n\r\n // Setup service for settings edition\r\n api.createService('settings', _.merge(config.settings || {}, {\r\n service: LocalSettingsService,\r\n propertyMapping: {\r\n shortTime: 'time.format.time.short',\r\n longTime: 'time.format.time.long',\r\n shortDate: 'time.format.date.short',\r\n longDate: 'time.format.date.long',\r\n shortYear: 'time.format.year.short',\r\n longYear: 'time.format.year.long',\r\n timezone: 'time.format.timezone',\r\n timelineStep: 'time.step',\r\n timelineInterval: 'time.interval',\r\n timeseriesSpan: 'timeseries.span',\r\n location: 'locationFormat',\r\n restoreView: 'restore.view',\r\n restoreLayers: 'restore.layers',\r\n defaultLength: 'units.default.length',\r\n defaultAltitude: 'units.default.altitude',\r\n defaultArea: 'units.default.area',\r\n defaultVelocity: 'units.default.velocity',\r\n defaultTemperature: 'units.default.temperature',\r\n defaultAngle: 'units.default.angle',\r\n defaultPrecision: 'units.default.precision'\r\n }\r\n })) // Default options can be overriden from app config\r\n}\r\n"]}
@@ -16,7 +16,9 @@ exports.default = function (name, api, options) {
16
16
  return _asyncToGenerator(function* () {
17
17
  const data = {};
18
18
  _lodash2.default.forOwn(mapping, function (value, key) {
19
- _lodash2.default.set(data, key, _store.Store.get(value));
19
+ if (value) {
20
+ _lodash2.default.set(data, key, _store.Store.get(value));
21
+ }
20
22
  });
21
23
  return data;
22
24
  })();
@@ -30,7 +32,7 @@ exports.default = function (name, api, options) {
30
32
  return _store.Store.get(rootPath);
31
33
  });
32
34
  _lodash2.default.forOwn(data, function (value, key) {
33
- if (_lodash2.default.has(mapping, key)) {
35
+ if (_lodash2.default.get(mapping, key)) {
34
36
  _store.Store.set(mapping[key], value);
35
37
  }
36
38
  });
@@ -45,7 +47,7 @@ exports.default = function (name, api, options) {
45
47
  saveSettings() {
46
48
  const data = {};
47
49
  _lodash2.default.forOwn(mapping, (value, key) => {
48
- if (_store.Store.has(value)) {
50
+ if (value && _store.Store.has(value)) {
49
51
  _lodash2.default.set(data, key, _store.Store.get(value));
50
52
  }
51
53
  });
@@ -56,8 +58,12 @@ exports.default = function (name, api, options) {
56
58
  let settings = window.localStorage.getItem(settingsKey);
57
59
  if (!settings) return;
58
60
  settings = JSON.parse(settings);
61
+ // Backward compatibility when changed utc mode to timezone setting
62
+ if (_lodash2.default.get(settings, 'utc') && _lodash2.default.has(mapping, 'timezone') && !_lodash2.default.get(settings, 'timezone')) {
63
+ _lodash2.default.set(settings, 'timezone', 'UTC');
64
+ }
59
65
  _lodash2.default.forOwn(mapping, (value, key) => {
60
- if (_lodash2.default.has(settings, key)) {
66
+ if (value && _lodash2.default.has(settings, key)) {
61
67
  _store.Store.set(value, _lodash2.default.get(settings, key));
62
68
  }
63
69
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../core/client/services/local-settings.service.js"],"names":["name","api","options","mapping","propertyMapping","rootPaths","_","uniq","values","map","path","split","settingsKey","config","appName","toLowerCase","get","id","data","forOwn","value","key","set","Store","patch","previousRootValues","rootPath","has","forEach","index","eventName","kebabCase","Events","$emit","saveSettings","window","localStorage","setItem","JSON","stringify","restoreSettings","settings","getItem","parse","getSettingsMapping"],"mappings":";;;;;;kBAKe,UAAUA,IAAV,EAAgBC,GAAhB,EAAqBC,OAArB,EAA8B;AAC3C,QAAMC,UAAUD,QAAQE,eAAxB;AACA;AACA;AACA,QAAMC,YAAYC,iBAAEC,IAAF,CAAOD,iBAAEE,MAAF,CAASL,OAAT,EAAkBM,GAAlB,CAAsBC,QAAQA,KAAKC,KAAL,CAAW,GAAX,EAAgB,CAAhB,CAA9B,CAAP,CAAlB;AACA,QAAMC,cAAcC,iBAAOC,OAAP,CAAeC,WAAf,KAA+B,GAA/B,IAAsCb,QAAQU,WAAR,IAAuB,UAA7D,CAApB;AACA,SAAO;;AAECI,OAAN,CAAWC,EAAX,EAAe;AAAA;AACb,cAAMC,OAAO,EAAb;AACAZ,yBAAEa,MAAF,CAAShB,OAAT,EAAkB,UAACiB,KAAD,EAAQC,GAAR,EAAgB;AAChCf,2BAAEgB,GAAF,CAAMJ,IAAN,EAAYG,GAAZ,EAAiBE,aAAMP,GAAN,CAAUI,KAAV,CAAjB;AACD,SAFD;AAGA,eAAOF,IAAP;AALa;AAMd,KARI;;AAUCM,SAAN,CAAaP,EAAb,EAAiBC,IAAjB,EAAuB;AAAA;;AAAA;AACrB,cAAMO,qBAAqBpB,UAAUI,GAAV,CAAc;AAAA,iBAAYc,aAAMP,GAAN,CAAUU,QAAV,CAAZ;AAAA,SAAd,CAA3B;AACApB,yBAAEa,MAAF,CAASD,IAAT,EAAe,UAACE,KAAD,EAAQC,GAAR,EAAgB;AAC7B,cAAIf,iBAAEqB,GAAF,CAAMxB,OAAN,EAAekB,GAAf,CAAJ,EAAyB;AACvBE,yBAAMD,GAAN,CAAUnB,QAAQkB,GAAR,CAAV,EAAwBD,KAAxB;AACD;AACF,SAJD;AAKAf,kBAAUuB,OAAV,CAAkB,UAACF,QAAD,EAAWG,KAAX,EAAqB;AACrC,gBAAMC,YAAYxB,iBAAEyB,SAAF,CAAa,GAAEL,QAAS,UAAxB,CAAlB;AACAM,yBAAOC,KAAP,CAAaH,SAAb,EAAwBP,aAAMP,GAAN,CAAUU,QAAV,CAAxB,EAA6CD,mBAAmBI,KAAnB,CAA7C;AACD,SAHD;AAIA,cAAKK,YAAL;AAXqB;AAYtB,KAtBI;;AAwBLA,mBAAgB;AACd,YAAMhB,OAAO,EAAb;AACAZ,uBAAEa,MAAF,CAAShB,OAAT,EAAkB,CAACiB,KAAD,EAAQC,GAAR,KAAgB;AAChC,YAAIE,aAAMI,GAAN,CAAUP,KAAV,CAAJ,EAAsB;AACpBd,2BAAEgB,GAAF,CAAMJ,IAAN,EAAYG,GAAZ,EAAiBE,aAAMP,GAAN,CAAUI,KAAV,CAAjB;AACD;AACF,OAJD;AAKAe,aAAOC,YAAP,CAAoBC,OAApB,CAA4BzB,WAA5B,EAAyC0B,KAAKC,SAAL,CAAerB,IAAf,CAAzC;AACD,KAhCI;;AAkCLsB,sBAAmB;AACjB,UAAIC,WAAWN,OAAOC,YAAP,CAAoBM,OAApB,CAA4B9B,WAA5B,CAAf;AACA,UAAI,CAAC6B,QAAL,EAAe;AACfA,iBAAWH,KAAKK,KAAL,CAAWF,QAAX,CAAX;AACAnC,uBAAEa,MAAF,CAAShB,OAAT,EAAkB,CAACiB,KAAD,EAAQC,GAAR,KAAgB;AAChC,YAAIf,iBAAEqB,GAAF,CAAMc,QAAN,EAAgBpB,GAAhB,CAAJ,EAA0B;AACxBE,uBAAMD,GAAN,CAAUF,KAAV,EAAiBd,iBAAEU,GAAF,CAAMyB,QAAN,EAAgBpB,GAAhB,CAAjB;AACD;AACF,OAJD;AAKD,KA3CI;;AA6CLuB,yBAAsB;AACpB,aAAOzC,OAAP;AACD;AA/CI,GAAP;AAiDD,C;;AA5DD;;;;AACA;;;;AACA;;AACA","file":"local-settings.service.js","sourcesContent":["import _ from 'lodash'\r\nimport config from 'config'\r\nimport { Store } from '../store'\r\nimport { Events } from '../events'\r\n\r\nexport default function (name, api, options) {\r\n const mapping = options.propertyMapping\r\n // We will emit also an event for all top level properties in case of nested ones\r\n // This simplifies event management for some listeners instead of listening to all nested properties\r\n const rootPaths = _.uniq(_.values(mapping).map(path => path.split('.')[0]))\r\n const settingsKey = config.appName.toLowerCase() + '-' + (options.settingsKey || 'settings')\r\n return {\r\n\r\n async get (id) {\r\n const data = {}\r\n _.forOwn(mapping, (value, key) => {\r\n _.set(data, key, Store.get(value))\r\n })\r\n return data\r\n },\r\n\r\n async patch (id, data) {\r\n const previousRootValues = rootPaths.map(rootPath => Store.get(rootPath))\r\n _.forOwn(data, (value, key) => {\r\n if (_.has(mapping, key)) {\r\n Store.set(mapping[key], value)\r\n }\r\n })\r\n rootPaths.forEach((rootPath, index) => {\r\n const eventName = _.kebabCase(`${rootPath}-changed`)\r\n Events.$emit(eventName, Store.get(rootPath), previousRootValues[index])\r\n })\r\n this.saveSettings()\r\n },\r\n\r\n saveSettings () {\r\n const data = {}\r\n _.forOwn(mapping, (value, key) => {\r\n if (Store.has(value)) {\r\n _.set(data, key, Store.get(value))\r\n }\r\n })\r\n window.localStorage.setItem(settingsKey, JSON.stringify(data))\r\n },\r\n\r\n restoreSettings () {\r\n let settings = window.localStorage.getItem(settingsKey)\r\n if (!settings) return\r\n settings = JSON.parse(settings)\r\n _.forOwn(mapping, (value, key) => {\r\n if (_.has(settings, key)) {\r\n Store.set(value, _.get(settings, key))\r\n }\r\n })\r\n },\r\n\r\n getSettingsMapping () {\r\n return mapping\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../core/client/services/local-settings.service.js"],"names":["name","api","options","mapping","propertyMapping","rootPaths","_","uniq","values","map","path","split","settingsKey","config","appName","toLowerCase","get","id","data","forOwn","value","key","set","Store","patch","previousRootValues","rootPath","forEach","index","eventName","kebabCase","Events","$emit","saveSettings","has","window","localStorage","setItem","JSON","stringify","restoreSettings","settings","getItem","parse","getSettingsMapping"],"mappings":"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","file":"local-settings.service.js","sourcesContent":["import _ from 'lodash'\r\nimport config from 'config'\r\nimport { Store } from '../store'\r\nimport { Events } from '../events'\r\n\r\nexport default function (name, api, options) {\r\n const mapping = options.propertyMapping\r\n // We will emit also an event for all top level properties in case of nested ones\r\n // This simplifies event management for some listeners instead of listening to all nested properties\r\n const rootPaths = _.uniq(_.values(mapping).map(path => path.split('.')[0]))\r\n const settingsKey = config.appName.toLowerCase() + '-' + (options.settingsKey || 'settings')\r\n return {\r\n\r\n async get (id) {\r\n const data = {}\r\n _.forOwn(mapping, (value, key) => {\r\n if (value) {\r\n _.set(data, key, Store.get(value))\r\n }\r\n })\r\n return data\r\n },\r\n\r\n async patch (id, data) {\r\n const previousRootValues = rootPaths.map(rootPath => Store.get(rootPath))\r\n _.forOwn(data, (value, key) => {\r\n if (_.get(mapping, key)) {\r\n Store.set(mapping[key], value)\r\n }\r\n })\r\n rootPaths.forEach((rootPath, index) => {\r\n const eventName = _.kebabCase(`${rootPath}-changed`)\r\n Events.$emit(eventName, Store.get(rootPath), previousRootValues[index])\r\n })\r\n this.saveSettings()\r\n },\r\n\r\n saveSettings () {\r\n const data = {}\r\n _.forOwn(mapping, (value, key) => {\r\n if (value && Store.has(value)) {\r\n _.set(data, key, Store.get(value))\r\n }\r\n })\r\n window.localStorage.setItem(settingsKey, JSON.stringify(data))\r\n },\r\n\r\n restoreSettings () {\r\n let settings = window.localStorage.getItem(settingsKey)\r\n if (!settings) return\r\n settings = JSON.parse(settings)\r\n // Backward compatibility when changed utc mode to timezone setting\r\n if (_.get(settings, 'utc') && _.has(mapping, 'timezone') && !_.get(settings, 'timezone')) {\r\n _.set(settings, 'timezone', 'UTC')\r\n }\r\n _.forOwn(mapping, (value, key) => {\r\n if (value && _.has(settings, key)) {\r\n Store.set(value, _.get(settings, key))\r\n }\r\n })\r\n },\r\n\r\n getSettingsMapping () {\r\n return mapping\r\n }\r\n }\r\n}\r\n"]}
@@ -9,9 +9,13 @@ var _lodash = require('lodash');
9
9
 
10
10
  var _lodash2 = _interopRequireDefault(_lodash);
11
11
 
12
- var _moment = require('moment');
12
+ var _momentTimezoneWithData10YearRange = require('moment-timezone/builds/moment-timezone-with-data-10-year-range');
13
13
 
14
- var _moment2 = _interopRequireDefault(_moment);
14
+ var _momentTimezoneWithData10YearRange2 = _interopRequireDefault(_momentTimezoneWithData10YearRange);
15
+
16
+ var _config = require('config');
17
+
18
+ var _config2 = _interopRequireDefault(_config);
15
19
 
16
20
  var _events = require('./events');
17
21
 
@@ -25,10 +29,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
25
29
  const Time = exports.Time = {
26
30
  initialize() {
27
31
  // Set locale globally
28
- _moment2.default.locale((0, _utils.getLocale)());
32
+ _momentTimezoneWithData10YearRange2.default.locale((0, _utils.getLocale)());
29
33
  // Set the time object within the store
30
- const now = _moment2.default.utc();
31
- _store.Store.set('time', {
34
+ const now = _momentTimezoneWithData10YearRange2.default.utc();
35
+ // Try to guess user timezone
36
+ const timezone = _momentTimezoneWithData10YearRange2.default.tz.guess() || '';
37
+ _store.Store.set('time', _lodash2.default.merge(_config2.default.time || {}, {
32
38
  range: {
33
39
  start: now.clone().subtract(1, 'months').startOf('day'),
34
40
  end: now.clone().endOf('day'),
@@ -48,22 +54,24 @@ const Time = exports.Time = {
48
54
  short: 'YY',
49
55
  long: 'YYYY'
50
56
  },
51
- utc: false
57
+ timezone
52
58
  },
53
59
  currentTime: now,
54
- step: 60 // 1H
55
- });
60
+ step: 60, // 1H
61
+ interval: 60 // 1m
62
+ }));
56
63
  this.updateTimeRangeQuery();
57
64
  // Make filter react to external changes to update the query
58
65
  _events.Events.$on('time-range-changed', () => this.updateTimeRangeQuery());
59
66
  },
60
67
  convertToMoment(datetime) {
61
- if (_moment2.default.isMoment(datetime)) {
68
+ if (_momentTimezoneWithData10YearRange2.default.isMoment(datetime)) {
62
69
  // Clone to avoid mutating and force UTC mode
63
- return _moment2.default.utc(datetime.valueOf());
70
+ return _momentTimezoneWithData10YearRange2.default.utc(datetime.valueOf());
64
71
  } else {
65
72
  // Convert from Date, string or milliseconds (ie EPOCH)
66
- return _moment2.default.utc(datetime);
73
+ // Check for ambiguous input as ISO 8601 consider it as locale and not UTC
74
+ if (typeof datetime === 'string' && !datetime.endsWith('Z')) return (0, _momentTimezoneWithData10YearRange2.default)(datetime).utc();else return _momentTimezoneWithData10YearRange2.default.utc(datetime);
67
75
  }
68
76
  },
69
77
  get() {
@@ -88,15 +96,18 @@ const Time = exports.Time = {
88
96
  getFormat() {
89
97
  return this.get().format;
90
98
  },
91
- format(datetime, format) {
92
- let currentTime = this.convertToMoment(datetime);
93
- if (!this.getFormat().utc) {
94
- // Convert to local time
95
- currentTime = (0, _moment2.default)(currentTime.valueOf());
99
+ getFormatTimezone() {
100
+ return this.getFormat().timezone;
101
+ },
102
+ format(datetime, format, options = { year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit' }) {
103
+ const currentTime = this.convertToMoment(datetime);
104
+ // Convert to local time
105
+ if (this.getFormatTimezone()) {
106
+ currentTime.tz(this.getFormatTimezone());
96
107
  }
97
- if (format === 'iso') return currentTime.format();
108
+ if (format === 'iso') return currentTime.format();else if (format === 'locale') return currentTime.toDate().toLocaleString((0, _utils.getLocale)(), options);
98
109
  // Defaults to long mode if not given
99
- else return currentTime.format(_lodash2.default.get(this.getFormat(), format, _lodash2.default.get(this.getFormat(), format + '.long')));
110
+ else return currentTime.format(_lodash2.default.get(this.getFormat(), format));
100
111
  },
101
112
  getCurrentTime() {
102
113
  return this.get().currentTime;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../core/client/time.js"],"names":["Time","initialize","moment","locale","now","utc","Store","set","range","start","clone","subtract","startOf","end","endOf","field","query","format","time","short","long","date","year","currentTime","step","updateTimeRangeQuery","Events","$on","convertToMoment","datetime","isMoment","valueOf","get","getRange","patchRange","patch","getRangeQuery","$gte","$lte","_","isEqual","getFormat","getCurrentTime","setCurrentTime","isSame","getCurrentFormattedTime","iso","getStep"],"mappings":"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","file":"time.js","sourcesContent":["import _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { Events } from './events'\r\nimport { Store } from './store'\r\nimport { getLocale } from './utils'\r\n\r\n// Export singleton\r\nexport const Time = {\r\n initialize () {\r\n // Set locale globally\r\n moment.locale(getLocale())\r\n // Set the time object within the store\r\n const now = moment.utc()\r\n Store.set('time', {\r\n range: {\r\n start: now.clone().subtract(1, 'months').startOf('day'),\r\n end: now.clone().endOf('day'),\r\n field: 'createdAt',\r\n query: {}\r\n },\r\n format: {\r\n time: {\r\n short: 'H[h]',\r\n long: 'HH:mm'\r\n },\r\n date: {\r\n short: 'DD/MM',\r\n long: 'dddd D'\r\n },\r\n year: {\r\n short: 'YY',\r\n long: 'YYYY'\r\n },\r\n utc: false\r\n },\r\n currentTime: now,\r\n step: 60 // 1H\r\n })\r\n this.updateTimeRangeQuery()\r\n // Make filter react to external changes to update the query\r\n Events.$on('time-range-changed', () => this.updateTimeRangeQuery())\r\n },\r\n convertToMoment (datetime) {\r\n if (moment.isMoment(datetime)) {\r\n // Clone to avoid mutating and force UTC mode\r\n return moment.utc(datetime.valueOf())\r\n } else { // Convert from Date, string or milliseconds (ie EPOCH)\r\n return moment.utc(datetime)\r\n }\r\n },\r\n get () {\r\n return Store.get('time')\r\n },\r\n getRange () {\r\n return this.get().range\r\n },\r\n patchRange (range) {\r\n Store.patch('time.range', range)\r\n },\r\n getRangeQuery () {\r\n return Store.get('time.range.query')\r\n },\r\n // Build sort query\r\n updateTimeRangeQuery () {\r\n const query = {}\r\n query[this.getRange().field] = { $gte: this.getRange().start.format(), $lte: this.getRange().end.format() }\r\n // Avoid reentrance as we listen to other filter property changes\r\n if (!_.isEqual(query, this.getRangeQuery())) Store.patch('time.range', { query })\r\n },\r\n getFormat () {\r\n return this.get().format\r\n },\r\n format (datetime, format) {\r\n let currentTime = this.convertToMoment(datetime)\r\n if (!this.getFormat().utc) {\r\n // Convert to local time\r\n currentTime = moment(currentTime.valueOf())\r\n }\r\n if (format === 'iso') return currentTime.format()\r\n // Defaults to long mode if not given\r\n else return currentTime.format(_.get(this.getFormat(), format, _.get(this.getFormat(), format + '.long')))\r\n },\r\n getCurrentTime () {\r\n return this.get().currentTime\r\n },\r\n setCurrentTime (datetime) {\r\n const now = this.convertToMoment(datetime)\r\n if (this.getCurrentTime().isSame(now)) return\r\n Store.patch('time.currentTime', now)\r\n },\r\n getCurrentFormattedTime () {\r\n const currentTime = this.getCurrentTime()\r\n return {\r\n time: {\r\n short: this.format(currentTime, 'time.short'),\r\n long: this.format(currentTime, 'time.long')\r\n },\r\n date: {\r\n short: this.format(currentTime, 'date.short'),\r\n long: this.format(currentTime, 'date.long')\r\n },\r\n year: {\r\n short: this.format(currentTime, 'year.short'),\r\n long: this.format(currentTime, 'year.long')\r\n },\r\n iso: this.format(currentTime, 'iso')\r\n }\r\n },\r\n getStep () {\r\n return this.get().step\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../core/client/time.js"],"names":["Time","initialize","moment","locale","now","utc","timezone","tz","guess","Store","set","_","merge","config","time","range","start","clone","subtract","startOf","end","endOf","field","query","format","short","long","date","year","currentTime","step","interval","updateTimeRangeQuery","Events","$on","convertToMoment","datetime","isMoment","valueOf","endsWith","get","getRange","patchRange","patch","getRangeQuery","$gte","$lte","isEqual","getFormat","getFormatTimezone","options","month","day","hour","minute","toDate","toLocaleString","getCurrentTime","setCurrentTime","isSame","getCurrentFormattedTime","iso","getStep"],"mappings":"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","file":"time.js","sourcesContent":["import _ from 'lodash'\r\nimport moment from 'moment-timezone/builds/moment-timezone-with-data-10-year-range'\r\nimport config from 'config'\r\nimport { Events } from './events'\r\nimport { Store } from './store'\r\nimport { getLocale } from './utils'\r\n\r\n// Export singleton\r\nexport const Time = {\r\n initialize () {\r\n // Set locale globally\r\n moment.locale(getLocale())\r\n // Set the time object within the store\r\n const now = moment.utc()\r\n // Try to guess user timezone\r\n const timezone = moment.tz.guess() || ''\r\n Store.set('time', _.merge(config.time || {}, {\r\n range: {\r\n start: now.clone().subtract(1, 'months').startOf('day'),\r\n end: now.clone().endOf('day'),\r\n field: 'createdAt',\r\n query: {}\r\n },\r\n format: {\r\n time: {\r\n short: 'H[h]',\r\n long: 'HH:mm'\r\n },\r\n date: {\r\n short: 'DD/MM',\r\n long: 'dddd D'\r\n },\r\n year: {\r\n short: 'YY',\r\n long: 'YYYY'\r\n },\r\n timezone\r\n },\r\n currentTime: now,\r\n step: 60, // 1H\r\n interval: 60 // 1m\r\n }))\r\n this.updateTimeRangeQuery()\r\n // Make filter react to external changes to update the query\r\n Events.$on('time-range-changed', () => this.updateTimeRangeQuery())\r\n },\r\n convertToMoment (datetime) {\r\n if (moment.isMoment(datetime)) {\r\n // Clone to avoid mutating and force UTC mode\r\n return moment.utc(datetime.valueOf())\r\n } else { // Convert from Date, string or milliseconds (ie EPOCH)\r\n // Check for ambiguous input as ISO 8601 consider it as locale and not UTC\r\n if ((typeof datetime === 'string') && !datetime.endsWith('Z')) return moment(datetime).utc()\r\n else return moment.utc(datetime)\r\n }\r\n },\r\n get () {\r\n return Store.get('time')\r\n },\r\n getRange () {\r\n return this.get().range\r\n },\r\n patchRange (range) {\r\n Store.patch('time.range', range)\r\n },\r\n getRangeQuery () {\r\n return Store.get('time.range.query')\r\n },\r\n // Build sort query\r\n updateTimeRangeQuery () {\r\n const query = {}\r\n query[this.getRange().field] = { $gte: this.getRange().start.format(), $lte: this.getRange().end.format() }\r\n // Avoid reentrance as we listen to other filter property changes\r\n if (!_.isEqual(query, this.getRangeQuery())) Store.patch('time.range', { query })\r\n },\r\n getFormat () {\r\n return this.get().format\r\n },\r\n getFormatTimezone () {\r\n return this.getFormat().timezone\r\n },\r\n format (datetime, format, options = { year: 'numeric', month: 'numeric', day: 'numeric', hour: '2-digit', minute: '2-digit' }) {\r\n const currentTime = this.convertToMoment(datetime)\r\n // Convert to local time\r\n if (this.getFormatTimezone()) {\r\n currentTime.tz(this.getFormatTimezone())\r\n }\r\n if (format === 'iso') return currentTime.format()\r\n else if (format === 'locale') return currentTime.toDate().toLocaleString(getLocale(), options)\r\n // Defaults to long mode if not given\r\n else return currentTime.format(_.get(this.getFormat(), format))\r\n },\r\n getCurrentTime () {\r\n return this.get().currentTime\r\n },\r\n setCurrentTime (datetime) {\r\n const now = this.convertToMoment(datetime)\r\n if (this.getCurrentTime().isSame(now)) return\r\n Store.patch('time.currentTime', now)\r\n },\r\n getCurrentFormattedTime () {\r\n const currentTime = this.getCurrentTime()\r\n return {\r\n time: {\r\n short: this.format(currentTime, 'time.short'),\r\n long: this.format(currentTime, 'time.long')\r\n },\r\n date: {\r\n short: this.format(currentTime, 'date.short'),\r\n long: this.format(currentTime, 'date.long')\r\n },\r\n year: {\r\n short: this.format(currentTime, 'year.short'),\r\n long: this.format(currentTime, 'year.long')\r\n },\r\n iso: this.format(currentTime, 'iso')\r\n }\r\n },\r\n getStep () {\r\n return this.get().step\r\n }\r\n}\r\n"]}