@kalisio/kdk 1.3.6 → 1.5.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 (577) hide show
  1. package/.nyc_output/{0d403586-0c7c-4336-94d1-a49e9f02a905.json → 058fc679-d60a-4501-ac04-71171e5200b8.json} +0 -0
  2. package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
  3. package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
  4. package/.nyc_output/{21dd57bd-48c5-41c8-8800-252db32a9366.json → 8b1830fa-932e-4a61-9837-4a5b18f83ea9.json} +0 -0
  5. package/.nyc_output/{3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json → afd2d144-3570-4858-b94a-b523dbd023dd.json} +0 -0
  6. package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +1 -0
  7. package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
  8. package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
  9. package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +1 -0
  10. package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +1 -0
  11. package/.nyc_output/processinfo/index.json +1 -1
  12. package/CHANGELOG.md +167 -79
  13. package/README.md +1 -1
  14. package/coverage/core/api/application.js.html +436 -436
  15. package/coverage/core/api/authentication.js.html +119 -119
  16. package/coverage/core/api/db.js.html +201 -201
  17. package/coverage/core/api/hooks/hooks.account.js.html +48 -48
  18. package/coverage/core/api/hooks/hooks.authentication.js.html +64 -64
  19. package/coverage/core/api/hooks/hooks.authorisations.js.html +369 -378
  20. package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
  21. package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
  22. package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
  23. package/coverage/core/api/hooks/hooks.model.js.html +269 -269
  24. package/coverage/core/api/hooks/hooks.organisations.js.html +183 -231
  25. package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
  26. package/coverage/core/api/hooks/hooks.query.js.html +234 -198
  27. package/coverage/core/api/hooks/hooks.service.js.html +82 -82
  28. package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
  29. package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
  30. package/coverage/core/api/hooks/hooks.users.js.html +304 -256
  31. package/coverage/core/api/hooks/index.html +172 -172
  32. package/coverage/core/api/hooks/index.js.html +24 -24
  33. package/coverage/core/api/index.html +75 -75
  34. package/coverage/core/api/index.js.html +26 -26
  35. package/coverage/core/api/marshall.js.html +57 -57
  36. package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
  37. package/coverage/core/api/models/index.html +50 -50
  38. package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
  39. package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
  40. package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
  41. package/coverage/core/api/oauth2-handler.js.html +18 -18
  42. package/coverage/core/api/oauth2-verifier.js.html +38 -38
  43. package/coverage/core/api/services/account/account.hooks.js.html +16 -16
  44. package/coverage/core/api/services/account/account.service.js.html +108 -108
  45. package/coverage/core/api/services/account/index.html +32 -32
  46. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  47. package/coverage/core/api/services/authorisations/authorisations.service.js.html +132 -129
  48. package/coverage/core/api/services/authorisations/index.html +28 -28
  49. package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
  50. package/coverage/core/api/services/databases/databases.service.js.html +12 -12
  51. package/coverage/core/api/services/databases/index.html +24 -24
  52. package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
  53. package/coverage/core/api/services/devices/devices.service.js.html +121 -121
  54. package/coverage/core/api/services/devices/index.html +28 -28
  55. package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
  56. package/coverage/core/api/services/groups/index.html +13 -13
  57. package/coverage/core/api/services/index.html +21 -21
  58. package/coverage/core/api/services/index.js.html +137 -137
  59. package/coverage/core/api/services/mailer/index.html +24 -24
  60. package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
  61. package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
  62. package/coverage/core/api/services/organisations/index.html +24 -24
  63. package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
  64. package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
  65. package/coverage/core/api/services/pusher/index.html +34 -34
  66. package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
  67. package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
  68. package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
  69. package/coverage/core/api/services/storage/index.html +21 -21
  70. package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
  71. package/coverage/core/api/services/tags/index.html +21 -21
  72. package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
  73. package/coverage/core/api/services/users/index.html +21 -21
  74. package/coverage/core/api/services/users/users.hooks.js.html +33 -33
  75. package/coverage/core/common/errors.js.html +1 -1
  76. package/coverage/core/common/index.html +42 -27
  77. package/coverage/core/common/index.js.html +16 -16
  78. package/coverage/core/common/permissions.js.html +325 -265
  79. package/coverage/index.html +182 -182
  80. package/coverage/lcov-report/core/api/application.js.html +436 -436
  81. package/coverage/lcov-report/core/api/authentication.js.html +119 -119
  82. package/coverage/lcov-report/core/api/db.js.html +201 -201
  83. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +48 -48
  84. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +64 -64
  85. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +369 -378
  86. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
  87. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
  88. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
  89. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
  90. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +183 -231
  91. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
  92. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +234 -198
  93. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
  94. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
  95. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
  96. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +304 -256
  97. package/coverage/lcov-report/core/api/hooks/index.html +172 -172
  98. package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
  99. package/coverage/lcov-report/core/api/index.html +75 -75
  100. package/coverage/lcov-report/core/api/index.js.html +26 -26
  101. package/coverage/lcov-report/core/api/marshall.js.html +57 -57
  102. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
  103. package/coverage/lcov-report/core/api/models/index.html +50 -50
  104. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
  105. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
  106. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
  107. package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
  108. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
  109. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
  110. package/coverage/lcov-report/core/api/services/account/account.service.js.html +108 -108
  111. package/coverage/lcov-report/core/api/services/account/index.html +32 -32
  112. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  113. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +132 -129
  114. package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
  115. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
  116. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
  117. package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
  118. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
  119. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
  120. package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
  121. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
  122. package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
  123. package/coverage/lcov-report/core/api/services/index.html +21 -21
  124. package/coverage/lcov-report/core/api/services/index.js.html +137 -137
  125. package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
  126. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
  127. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
  128. package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
  129. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
  130. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
  131. package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
  132. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
  133. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
  134. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
  135. package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
  136. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
  137. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  138. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
  139. package/coverage/lcov-report/core/api/services/users/index.html +21 -21
  140. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
  141. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  142. package/coverage/lcov-report/core/common/index.html +42 -27
  143. package/coverage/lcov-report/core/common/index.js.html +16 -16
  144. package/coverage/lcov-report/core/common/permissions.js.html +325 -265
  145. package/coverage/lcov-report/index.html +182 -182
  146. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  147. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +118 -37
  148. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  149. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  150. package/coverage/lcov-report/map/api/index.html +1 -1
  151. package/coverage/lcov-report/map/api/index.js.html +1 -1
  152. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  153. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  154. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  155. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  156. package/coverage/lcov-report/map/api/models/index.html +1 -1
  157. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  158. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  159. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  160. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  161. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  162. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  163. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  164. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +2 -2
  165. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  167. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  168. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  169. package/coverage/lcov-report/map/api/services/index.html +1 -1
  170. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  171. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  172. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  173. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  174. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  175. package/coverage/lcov-report/map/common/index.html +12 -12
  176. package/coverage/lcov-report/map/common/index.js.html +1 -1
  177. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  178. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  179. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  180. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  181. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  182. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  183. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  184. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  185. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  186. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  187. package/coverage/lcov-report/map/common/wfs-utils.js.html +8 -5
  188. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  189. package/coverage/lcov-report/map/common/wmts-utils.js.html +71 -11
  190. package/coverage/lcov.info +3742 -3949
  191. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  192. package/coverage/map/api/hooks/hooks.query.js.html +118 -37
  193. package/coverage/map/api/hooks/index.html +7 -7
  194. package/coverage/map/api/hooks/index.js.html +1 -1
  195. package/coverage/map/api/index.html +1 -1
  196. package/coverage/map/api/index.js.html +1 -1
  197. package/coverage/map/api/marshall.js.html +1 -1
  198. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  199. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  200. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  201. package/coverage/map/api/models/index.html +1 -1
  202. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  203. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  204. package/coverage/map/api/services/alerts/index.html +1 -1
  205. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  206. package/coverage/map/api/services/catalog/index.html +1 -1
  207. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  208. package/coverage/map/api/services/daptiles/index.html +1 -1
  209. package/coverage/map/api/services/features/features.hooks.js.html +2 -2
  210. package/coverage/map/api/services/features/index.html +1 -1
  211. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  212. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  213. package/coverage/map/api/services/geocoder/index.html +1 -1
  214. package/coverage/map/api/services/index.html +1 -1
  215. package/coverage/map/api/services/index.js.html +1 -1
  216. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  217. package/coverage/map/common/errors.js.html +1 -1
  218. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  219. package/coverage/map/common/grid.js.html +1 -1
  220. package/coverage/map/common/index.html +12 -12
  221. package/coverage/map/common/index.js.html +1 -1
  222. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  223. package/coverage/map/common/moment-utils.js.html +1 -1
  224. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  225. package/coverage/map/common/opendap-utils.js.html +1 -1
  226. package/coverage/map/common/permissions.js.html +1 -1
  227. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  228. package/coverage/map/common/tms-utils.js.html +1 -1
  229. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  230. package/coverage/map/common/wcs-utils.js.html +1 -1
  231. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  232. package/coverage/map/common/wfs-utils.js.html +8 -5
  233. package/coverage/map/common/wms-utils.js.html +1 -1
  234. package/coverage/map/common/wmts-utils.js.html +71 -11
  235. package/extras/icons/kanban.png +0 -0
  236. package/extras/tours/core/add-member.js +10 -1
  237. package/extras/tours/core/{tag-member.js → edit-member-tags.js} +4 -3
  238. package/extras/tours/core/groups.js +8 -2
  239. package/extras/tours/core/members.js +11 -21
  240. package/extras/tours/core/tags.js +7 -1
  241. package/extras/tours/map/catalog-categories.js +4 -4
  242. package/extras/tours/map/catalog-panel.js +16 -16
  243. package/extras/tours/map/favorite-views.js +3 -3
  244. package/lib/core/api/hooks/hooks.authorisations.js +149 -140
  245. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  246. package/lib/core/api/hooks/hooks.organisations.js +1 -23
  247. package/lib/core/api/hooks/hooks.organisations.js.map +1 -1
  248. package/lib/core/api/hooks/hooks.query.js +22 -0
  249. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  250. package/lib/core/api/hooks/hooks.users.js +34 -18
  251. package/lib/core/api/hooks/hooks.users.js.map +1 -1
  252. package/lib/core/api/services/authorisations/authorisations.service.js +34 -25
  253. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  254. package/lib/core/client/api.js +1 -0
  255. package/lib/core/client/api.js.map +1 -1
  256. package/lib/core/client/components/account/KAccountDZ.vue +3 -4
  257. package/lib/core/client/components/account/KAccountDevices.vue +5 -6
  258. package/lib/core/client/components/account/KDeviceCard.vue +2 -1
  259. package/lib/core/client/components/account/KIdentityPanel.vue +1 -7
  260. package/lib/core/client/components/collection/KBoard.vue +26 -155
  261. package/lib/core/client/components/collection/KCard.vue +144 -42
  262. package/lib/core/client/components/collection/KCardSection.vue +52 -0
  263. package/lib/core/client/components/collection/KColumn.vue +181 -0
  264. package/lib/core/client/components/collection/KGrid.vue +13 -18
  265. package/lib/core/client/components/collection/KHistory.vue +61 -89
  266. package/lib/core/client/components/collection/KHistoryEntry.vue +90 -66
  267. package/lib/core/client/components/collection/KItem.vue +21 -2
  268. package/lib/core/client/components/collection/KList.vue +9 -12
  269. package/lib/core/client/components/collection/KTable.vue +33 -39
  270. package/lib/core/client/components/collection/index.js +6 -1
  271. package/lib/core/client/components/collection/index.js.map +1 -1
  272. package/lib/core/client/components/editor/KEditor.vue +0 -6
  273. package/lib/core/client/components/editor/KModalEditor.vue +4 -4
  274. package/lib/core/client/components/editor/KSettingsEditor.vue +49 -0
  275. package/lib/core/client/components/form/KAttachmentField.vue +10 -10
  276. package/lib/core/client/components/form/KChipsField.vue +28 -23
  277. package/lib/core/client/components/form/KColorField.vue +30 -25
  278. package/lib/core/client/components/form/KFileField.vue +11 -40
  279. package/lib/core/client/components/form/KForm.vue +0 -12
  280. package/lib/core/client/components/form/KIconField.vue +1 -0
  281. package/lib/core/client/components/form/KItemField.vue +6 -2
  282. package/lib/core/client/components/form/KRoleField.vue +56 -0
  283. package/lib/core/client/components/form/KSelectField.vue +16 -1
  284. package/lib/core/client/components/form/KView.vue +5 -14
  285. package/lib/core/client/components/frame/KAction.vue +18 -12
  286. package/lib/core/client/components/frame/KAvatar.vue +3 -3
  287. package/lib/core/client/components/frame/KChart.vue +60 -0
  288. package/lib/core/client/components/frame/KChipsPane.vue +80 -0
  289. package/lib/core/client/components/frame/KContent.vue +1 -1
  290. package/lib/core/client/components/frame/KModal.vue +30 -44
  291. package/lib/core/client/components/frame/KPanel.vue +1 -1
  292. package/lib/core/client/components/frame/{KMenu.vue → KPopupAction.vue} +6 -7
  293. package/lib/core/client/components/frame/KSpot.vue +31 -0
  294. package/lib/core/client/components/frame/KStamp.vue +62 -0
  295. package/lib/core/client/components/frame/index.js +56 -1
  296. package/lib/core/client/components/frame/index.js.map +1 -1
  297. package/lib/core/client/components/input/KColorChooser.vue +16 -8
  298. package/lib/core/client/components/input/KIconChooser.vue +2 -1
  299. package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
  300. package/lib/core/client/components/input/KUploader.vue +14 -5
  301. package/lib/core/client/components/layout/KAbout.vue +9 -3
  302. package/lib/core/client/components/layout/KFab.vue +1 -1
  303. package/lib/core/client/components/layout/KPage.vue +44 -19
  304. package/lib/core/client/components/layout/KTour.vue +2 -2
  305. package/lib/core/client/components/layout/KWelcome.vue +13 -12
  306. package/lib/core/client/components/layout/KWindow.vue +1 -1
  307. package/lib/core/client/components/media/KImageViewer.vue +9 -7
  308. package/lib/core/client/components/media/KMediaBrowser.vue +12 -8
  309. package/lib/core/client/components/menu/KMenu.vue +103 -0
  310. package/lib/core/client/components/team/KAddMember.vue +17 -9
  311. package/lib/core/client/components/team/KChangeRole.vue +5 -7
  312. package/lib/core/client/components/team/KGroupCard.vue +34 -51
  313. package/lib/core/client/components/team/KGroupsActivity.vue +9 -2
  314. package/lib/core/client/components/team/KJoinGroup.vue +5 -7
  315. package/lib/core/client/components/team/KMemberCard.vue +104 -63
  316. package/lib/core/client/components/team/KMembersActivity.vue +9 -2
  317. package/lib/core/client/components/team/KOrganisationsActivity.vue +8 -1
  318. package/lib/core/client/components/team/KTagCard.vue +26 -26
  319. package/lib/core/client/components/team/KTagsActivity.vue +9 -2
  320. package/lib/core/client/components/time/KTimeRange.vue +144 -0
  321. package/lib/core/client/components/viewer/KModalViewer.vue +6 -0
  322. package/lib/core/client/components/viewer/KViewer.vue +0 -6
  323. package/lib/core/client/i18n/core_en.json +138 -94
  324. package/lib/core/client/i18n/core_fr.json +61 -17
  325. package/lib/core/client/index.js +46 -14
  326. package/lib/core/client/index.js.map +1 -1
  327. package/lib/core/client/layout.js +8 -1
  328. package/lib/core/client/layout.js.map +1 -1
  329. package/lib/core/client/mixins/mixin.authorisation.js +28 -18
  330. package/lib/core/client/mixins/mixin.authorisation.js.map +1 -1
  331. package/lib/core/client/mixins/mixin.base-collection.js +57 -9
  332. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  333. package/lib/core/client/mixins/mixin.base-context.js +1 -1
  334. package/lib/core/client/mixins/mixin.base-context.js.map +1 -1
  335. package/lib/core/client/mixins/mixin.base-editor.js +26 -16
  336. package/lib/core/client/mixins/mixin.base-editor.js.map +1 -1
  337. package/lib/core/client/mixins/mixin.base-field.js +0 -4
  338. package/lib/core/client/mixins/mixin.base-field.js.map +1 -1
  339. package/lib/core/client/mixins/mixin.base-item.js +29 -14
  340. package/lib/core/client/mixins/mixin.base-item.js.map +1 -1
  341. package/lib/core/client/mixins/mixin.base-viewer.js +0 -2
  342. package/lib/core/client/mixins/mixin.base-viewer.js.map +1 -1
  343. package/lib/core/client/mixins/mixin.object-proxy.js +17 -3
  344. package/lib/core/client/mixins/mixin.object-proxy.js.map +1 -1
  345. package/lib/core/client/mixins/mixin.schema-proxy.js +31 -0
  346. package/lib/core/client/mixins/mixin.schema-proxy.js.map +1 -1
  347. package/lib/core/client/mixins/mixin.service.js +5 -33
  348. package/lib/core/client/mixins/mixin.service.js.map +1 -1
  349. package/lib/core/client/reader.js +54 -0
  350. package/lib/core/client/reader.js.map +1 -0
  351. package/lib/core/client/readers/index.js +30 -0
  352. package/lib/core/client/readers/index.js.map +1 -0
  353. package/lib/core/client/readers/reader.csv.js +43 -0
  354. package/lib/core/client/readers/reader.csv.js.map +1 -0
  355. package/lib/core/client/readers/reader.json.js +38 -0
  356. package/lib/core/client/readers/reader.json.js.map +1 -0
  357. package/lib/core/client/services/index.js +23 -0
  358. package/lib/core/client/services/index.js.map +1 -1
  359. package/lib/core/client/services/local-settings.service.js +4 -0
  360. package/lib/core/client/services/local-settings.service.js.map +1 -1
  361. package/lib/core/client/time.js +131 -0
  362. package/lib/core/client/time.js.map +1 -0
  363. package/lib/core/common/permissions.js +65 -23
  364. package/lib/core/common/permissions.js.map +1 -1
  365. package/lib/core/common/schemas/groups.create.json +1 -1
  366. package/lib/core/common/schemas/groups.update.json +1 -1
  367. package/lib/core/common/schemas/organisations.create.json +1 -1
  368. package/lib/core/common/schemas/organisations.update.json +2 -2
  369. package/lib/core/common/schemas/settings.update.json +139 -0
  370. package/lib/core/common/schemas/tags.update.json +9 -1
  371. package/lib/map/api/hooks/hooks.query.js +55 -29
  372. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  373. package/lib/map/api/services/features/features.hooks.js +1 -1
  374. package/lib/map/api/services/features/features.hooks.js.map +1 -1
  375. package/lib/map/client/components/KCaptureToolbar.vue +156 -0
  376. package/lib/map/client/components/KColorLegend.vue +25 -23
  377. package/lib/map/client/components/KFavoriteViews.vue +71 -35
  378. package/lib/map/client/components/KFeaturesChart.vue +11 -9
  379. package/lib/map/client/components/KFeaturesFilter.vue +18 -8
  380. package/lib/map/client/components/KFeaturesTable.vue +27 -2
  381. package/lib/map/client/components/KLayerEditionToolbar.vue +51 -0
  382. package/lib/map/client/components/KLayerStyleEditor.vue +12 -5
  383. package/lib/map/client/components/KLayerStyleForm.vue +44 -33
  384. package/lib/map/client/components/KLocationInput.vue +126 -65
  385. package/lib/map/client/components/KLocationMap.vue +199 -84
  386. package/lib/map/client/components/KMeasureTool.vue +340 -0
  387. package/lib/map/client/components/KPositionIndicator.vue +1 -0
  388. package/lib/map/client/components/KTimeline.vue +41 -37
  389. package/lib/map/client/components/KUrlLegend.vue +21 -19
  390. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +105 -0
  391. package/lib/map/client/components/catalog/KCatalog.vue +14 -2
  392. package/lib/map/client/components/catalog/KConnectLayer.vue +31 -11
  393. package/lib/map/client/components/catalog/KCreateLayer.vue +37 -14
  394. package/lib/map/client/components/catalog/KImportLayer.vue +33 -40
  395. package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
  396. package/lib/map/client/components/catalog/KLayersSelector.vue +44 -42
  397. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  398. package/lib/map/client/components/form/KLocationField.vue +1 -1
  399. package/lib/map/client/components/form/KOwsLayerField.vue +7 -0
  400. package/lib/map/client/components/form/KOwsServiceField.vue +1 -0
  401. package/lib/map/client/components/widget/KInformationBox.vue +10 -16
  402. package/lib/map/client/components/widget/KMapillaryViewer.vue +59 -49
  403. package/lib/map/client/components/widget/KTimeSeries.vue +119 -31
  404. package/lib/map/client/i18n/map_en.json +105 -20
  405. package/lib/map/client/i18n/map_fr.json +107 -23
  406. package/lib/map/client/init.js +24 -7
  407. package/lib/map/client/init.js.map +1 -1
  408. package/lib/map/client/leaflet/GSMaPLayer.js +4 -9
  409. package/lib/map/client/leaflet/GSMaPLayer.js.map +1 -1
  410. package/lib/map/client/leaflet/MaskLayer.js +73 -0
  411. package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
  412. package/lib/map/client/mixins/globe/mixin.base-globe.js +7 -6
  413. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  414. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +7 -9
  415. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  416. package/lib/map/client/mixins/globe/mixin.popup.js +4 -0
  417. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  418. package/lib/map/client/mixins/globe/mixin.tooltip.js +4 -0
  419. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  420. package/lib/map/client/mixins/index.js +8 -13
  421. package/lib/map/client/mixins/index.js.map +1 -1
  422. package/lib/map/client/mixins/map/mixin.base-map.js +71 -8
  423. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  424. package/lib/map/client/mixins/map/mixin.canvas-layers.js +276 -51
  425. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  426. package/lib/map/client/mixins/map/mixin.edit-layers.js +218 -121
  427. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  428. package/lib/map/client/mixins/map/mixin.file-layers.js +46 -93
  429. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  430. package/lib/map/client/mixins/map/mixin.geojson-layers.js +22 -11
  431. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  432. package/lib/map/client/mixins/map/mixin.georaster-layers.js +7 -4
  433. package/lib/map/client/mixins/map/mixin.georaster-layers.js.map +1 -1
  434. package/lib/map/client/mixins/map/mixin.gsmap-layers.js +3 -3
  435. package/lib/map/client/mixins/map/mixin.gsmap-layers.js.map +1 -1
  436. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +8 -10
  437. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  438. package/lib/map/client/mixins/map/mixin.mapillary-layers.js +25 -40
  439. package/lib/map/client/mixins/map/mixin.mapillary-layers.js.map +1 -1
  440. package/lib/map/client/mixins/map/mixin.popup.js +4 -0
  441. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  442. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +5 -3
  443. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  444. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +5 -3
  445. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  446. package/lib/map/client/mixins/map/mixin.tooltip.js +4 -0
  447. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  448. package/lib/map/client/mixins/mixin.activity.js +62 -68
  449. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  450. package/lib/map/client/mixins/mixin.context.js +26 -3
  451. package/lib/map/client/mixins/mixin.context.js.map +1 -1
  452. package/lib/map/client/mixins/mixin.feature-selection.js +8 -10
  453. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  454. package/lib/map/client/mixins/mixin.feature-service.js +9 -7
  455. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  456. package/lib/map/client/mixins/mixin.infobox.js +4 -0
  457. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  458. package/lib/map/client/mixins/mixin.weacast.js +6 -4
  459. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  460. package/lib/map/client/pixi-utils.js +9 -0
  461. package/lib/map/client/pixi-utils.js.map +1 -1
  462. package/lib/map/client/readers/index.js +42 -0
  463. package/lib/map/client/readers/index.js.map +1 -0
  464. package/lib/map/client/readers/reader.geojson.js +59 -0
  465. package/lib/map/client/readers/reader.geojson.js.map +1 -0
  466. package/lib/map/client/readers/reader.gpx.js +41 -0
  467. package/lib/map/client/readers/reader.gpx.js.map +1 -0
  468. package/lib/map/client/readers/reader.kml.js +41 -0
  469. package/lib/map/client/readers/reader.kml.js.map +1 -0
  470. package/lib/map/client/utils.js +52 -1
  471. package/lib/map/client/utils.js.map +1 -1
  472. package/lib/map/common/wfs-utils.js +1 -1
  473. package/lib/map/common/wfs-utils.js.map +1 -1
  474. package/lib/map/common/wmts-utils.js +31 -7
  475. package/lib/map/common/wmts-utils.js.map +1 -1
  476. package/lib/test/client/core/account.js +100 -0
  477. package/lib/test/client/core/account.js.map +1 -0
  478. package/lib/test/client/core/api.js +400 -0
  479. package/lib/test/client/core/api.js.map +1 -0
  480. package/lib/test/client/core/collection.js +109 -0
  481. package/lib/test/client/core/collection.js.map +1 -0
  482. package/lib/test/client/core/index.js +90 -0
  483. package/lib/test/client/core/index.js.map +1 -0
  484. package/lib/test/client/core/layout.js +221 -0
  485. package/lib/test/client/core/layout.js.map +1 -0
  486. package/lib/test/client/core/runner.js +203 -0
  487. package/lib/test/client/core/runner.js.map +1 -0
  488. package/lib/test/client/core/screens.js +68 -0
  489. package/lib/test/client/core/screens.js.map +1 -0
  490. package/lib/test/client/core/utils.js +304 -0
  491. package/lib/test/client/core/utils.js.map +1 -0
  492. package/lib/test/client/index.js +20 -0
  493. package/lib/test/client/index.js.map +1 -0
  494. package/lib/test/client/map/catalog.js +192 -0
  495. package/lib/test/client/map/catalog.js.map +1 -0
  496. package/lib/test/client/map/controls.js +54 -0
  497. package/lib/test/client/map/controls.js.map +1 -0
  498. package/lib/test/client/map/index.js +30 -0
  499. package/lib/test/client/map/index.js.map +1 -0
  500. package/package.json +18 -9
  501. package/test.client.js +1 -0
  502. package/tests/core/test-log-2021-09-02.log +47 -0
  503. package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
  504. package/tests/map/test-log-2021-09-02.log +3 -0
  505. package/.nyc_output/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
  506. package/.nyc_output/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
  507. package/.nyc_output/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
  508. package/.nyc_output/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
  509. package/.nyc_output/processinfo/0d403586-0c7c-4336-94d1-a49e9f02a905.json +0 -1
  510. package/.nyc_output/processinfo/21dd57bd-48c5-41c8-8800-252db32a9366.json +0 -1
  511. package/.nyc_output/processinfo/3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json +0 -1
  512. package/.nyc_output/processinfo/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
  513. package/.nyc_output/processinfo/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
  514. package/.nyc_output/processinfo/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
  515. package/.nyc_output/processinfo/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
  516. package/extras/testcafe/Dockerfile +0 -48
  517. package/extras/testcafe/docker-entrypoint.sh +0 -27
  518. package/extras/testcafe/page-models/core/account.js +0 -75
  519. package/extras/testcafe/page-models/core/base-collection.js +0 -41
  520. package/extras/testcafe/page-models/core/base-page.js +0 -25
  521. package/extras/testcafe/page-models/core/groups.js +0 -36
  522. package/extras/testcafe/page-models/core/index.js +0 -140
  523. package/extras/testcafe/page-models/core/layout.js +0 -145
  524. package/extras/testcafe/page-models/core/members.js +0 -98
  525. package/extras/testcafe/page-models/core/organisations.js +0 -76
  526. package/extras/testcafe/page-models/core/screens.js +0 -99
  527. package/extras/testcafe/page-models/core/tags.js +0 -21
  528. package/extras/testcafe/page-models/map/add-layer.js +0 -51
  529. package/extras/testcafe/page-models/map/catalog.js +0 -132
  530. package/extras/testcafe/page-models/map/index.js +0 -36
  531. package/extras/testcafe/page-models/map/map-activity.js +0 -42
  532. package/extras/testcafe/page-models/map/timeline.js +0 -67
  533. package/lib/core/client/components/frame/KLabel.vue +0 -56
  534. package/lib/core/client/components/team/KTagsPane.vue +0 -35
  535. package/lib/map/client/leaflet/TiledMapillaryLayer.js +0 -137
  536. package/lib/map/client/leaflet/TiledMapillaryLayer.js.map +0 -1
  537. package/lib/map/client/mixins/mixin.time.js +0 -73
  538. package/lib/map/client/mixins/mixin.time.js.map +0 -1
  539. package/tests/core/account.test.js +0 -423
  540. package/tests/core/client.test.js.skip +0 -37
  541. package/tests/core/config/default.js +0 -96
  542. package/tests/core/config/email-templates/confirmInvitation/html.ejs +0 -18
  543. package/tests/core/config/email-templates/identityChange/html.ejs +0 -12
  544. package/tests/core/config/email-templates/newDevice/html.ejs +0 -7
  545. package/tests/core/config/email-templates/passwordChange/html.ejs +0 -5
  546. package/tests/core/config/email-templates/resendVerifySignup/html.ejs +0 -10
  547. package/tests/core/config/email-templates/resetPwd/html.ejs +0 -5
  548. package/tests/core/config/email-templates/sendResetPwd/html.ejs +0 -8
  549. package/tests/core/config/email-templates/verifySignup/html.ejs +0 -3
  550. package/tests/core/data/10k_most_common_passwords.txt +0 -10000
  551. package/tests/core/data/logo.png +0 -0
  552. package/tests/core/hooks.test.js +0 -175
  553. package/tests/core/index.test.js +0 -432
  554. package/tests/core/notifications.test.js +0 -465
  555. package/tests/core/storage.test.js +0 -134
  556. package/tests/core/team.test.js +0 -610
  557. package/tests/core/utils.js +0 -62
  558. package/tests/map/alerts.test.js +0 -554
  559. package/tests/map/config/default.js +0 -112
  560. package/tests/map/config/layers.json +0 -37
  561. package/tests/map/daptiles.test.js +0 -41
  562. package/tests/map/data/DescribeCoverage.xml +0 -55
  563. package/tests/map/data/GetCoverage.tif +0 -0
  564. package/tests/map/data/adsb.observations.json +0 -132
  565. package/tests/map/data/dataset.grb.das +0 -55
  566. package/tests/map/data/dataset.grb.dds +0 -17
  567. package/tests/map/data/dataset.grb.dods +0 -0
  568. package/tests/map/data/lat_lon_bounds.grb.dods +0 -0
  569. package/tests/map/data/subdataset.grb.dods +0 -0
  570. package/tests/map/data/vigicrues.observations.json +0 -47042
  571. package/tests/map/data/vigicrues.stations.json +0 -15422
  572. package/tests/map/data/zones.json +0 -1228
  573. package/tests/map/forecast-data/gfs-world/u-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
  574. package/tests/map/forecast-data/gfs-world/v-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
  575. package/tests/map/grid-sources.test.js +0 -304
  576. package/tests/map/hooks.test.js +0 -96
  577. package/tests/map/index.test.js +0 -333
@@ -4,121 +4,74 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
 
7
- var _lodash = require('lodash');
8
-
9
- var _lodash2 = _interopRequireDefault(_lodash);
10
-
11
- var _leaflet = require('leaflet');
12
-
13
- var _leaflet2 = _interopRequireDefault(_leaflet);
14
-
15
7
  var _path = require('path');
16
8
 
17
9
  var _path2 = _interopRequireDefault(_path);
18
10
 
19
- var _loglevel = require('loglevel');
20
-
21
- var _loglevel2 = _interopRequireDefault(_loglevel);
22
-
23
- var _togeojson = require('togeojson');
24
-
25
- var _togeojson2 = _interopRequireDefault(_togeojson);
26
-
27
- var _leafletFilelayer = require('leaflet-filelayer');
28
-
29
- var _leafletFilelayer2 = _interopRequireDefault(_leafletFilelayer);
30
-
31
- var _quasar = require('quasar');
32
-
33
- var _utils = require('../../utils');
11
+ var _client = require('../../../../core/client');
34
12
 
35
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
36
14
 
37
15
  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"); }); }; }
38
16
 
39
- (0, _leafletFilelayer2.default)(null, _leaflet2.default, _togeojson2.default);
40
-
41
17
  exports.default = {
18
+ methods: {
19
+ importFiles(files) {
20
+ var _this = this;
21
+
22
+ return _asyncToGenerator(function* () {
23
+ for (let i = 0; i < files.length; ++i) {
24
+ const file = files.item(i);
25
+ try {
26
+ const content = yield _client.Reader.read(file);
27
+ const name = _path2.default.basename(file.name, _path2.default.extname(file.name));
28
+ yield _this.addGeoJsonLayer({ name, description: file.name }, content);
29
+ } catch (error) {
30
+ // nothing to do
31
+ }
32
+ }
33
+ })();
34
+ }
35
+ },
42
36
  mounted() {
43
- var _this = this;
37
+ var _this2 = this;
44
38
 
45
39
  this.$on('map-ready', () => {
46
- this.loader = _leaflet2.default.FileLayer.fileLoader(this.map, Object.assign({
47
- // Allows you to use a customized version of L.geoJson.
48
- // For example if you are using the Proj4Leaflet leaflet plugin,
49
- // you can pass L.Proj.geoJson and load the files into the
50
- // L.Proj.GeoJson instead of the L.geoJson.
51
- layer: _leaflet2.default.geoJson,
52
- // See http://leafletjs.com/reference.html#geojson-options
53
- layerOptions: this.getGeoJsonOptions(),
54
- // Add to map after loading
55
- addToMap: false,
56
- // File size limit in kb
57
- fileSizeLimit: 1024 * 1024,
58
- // Restrict accepted file formats (default: .geojson, .kml, and .gpx)
59
- formats: ['.geojson', '.json', '.kml', '.gpx']
60
- }, this.activityOptions.engine.fileLayers));
61
- // Required to support drag'n'drop because we do not use the built-in control
40
+ // Create a dummy dropFileInput element to enable puppeteer
41
+ const container = document.getElementById('q-app');
42
+ const dropFileInput = document.createElement('input');
43
+ dropFileInput.setAttribute('id', 'dropFileInput');
44
+ dropFileInput.type = 'file';
45
+ dropFileInput.style.display = 'none';
46
+ dropFileInput.addEventListener('change', (() => {
47
+ var _ref = _asyncToGenerator(function* (event) {
48
+ yield _this2.importFiles(event.target.files);
49
+ });
50
+
51
+ return function (_x) {
52
+ return _ref.apply(this, arguments);
53
+ };
54
+ })());
55
+ container.appendChild(dropFileInput);
56
+ // Setup drag & drop
62
57
  this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false);
63
58
  this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false);
64
59
  this.map._container.addEventListener('dragover', event => {
65
60
  event.stopPropagation();
66
61
  event.preventDefault();
67
62
  }, false);
68
- this.map._container.addEventListener('drop', event => {
69
- event.stopPropagation();
70
- event.preventDefault();
71
-
72
- this.loader.loadMultiple(event.dataTransfer.files);
73
- this.map.scrollWheelZoom.enable();
74
- }, false);
75
-
76
- this.loader.on('data:loaded', (() => {
77
- var _ref = _asyncToGenerator(function* (event) {
78
- const name = event.filename ? _path2.default.basename(event.filename, _path2.default.extname(event.filename)) : _this.$t('mixins.fileLayers.IMPORTED_DATA_NAME');
79
- const engine = {
80
- type: 'geoJson',
81
- isVisible: true,
82
- realtime: true
83
- };
84
- const layer = {
85
- name,
86
- type: 'OverlayLayer',
87
- icon: 'insert_drive_file',
88
- scope: 'user',
89
- featureId: '_id',
90
- leaflet: engine,
91
- // Avoid sharing reference to the same object although options are similar
92
- // otherwise updating one will automatically update the other one
93
- cesium: Object.assign({}, engine)
94
- };
95
- const geoJson = event.layer.toGeoJSON();
96
- // Generate schema for properties
97
- const schema = (0, _utils.generatePropertiesSchema)(geoJson, name);
98
- _lodash2.default.set(layer, 'schema', { name, content: schema });
99
- // Generate temporary IDs for features
100
- const features = geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson];
101
- features.forEach(function (feature) {
102
- feature._id = (0, _quasar.uid)().toString();
103
- });
104
- // Create an empty layer used as a container
105
- yield _this.addLayer(layer);
106
- // Set data
107
- yield _this.updateLayer(name, geoJson);
108
- // Zoom to it
109
- _this.zoomToLayer(name);
63
+ this.map._container.addEventListener('drop', (() => {
64
+ var _ref2 = _asyncToGenerator(function* (event) {
65
+ event.stopPropagation();
66
+ event.preventDefault();
67
+ yield _this2.importFiles(event.dataTransfer.files);
68
+ _this2.map.scrollWheelZoom.enable();
110
69
  });
111
70
 
112
- return function (_x) {
113
- return _ref.apply(this, arguments);
71
+ return function (_x2) {
72
+ return _ref2.apply(this, arguments);
114
73
  };
115
- })());
116
- this.loader.on('data:error', event => {
117
- _loglevel2.default.error(event.error);
118
- this.$events.$emit('error', {
119
- message: this.$t('errors.FILE_IMPORT_ERROR')
120
- });
121
- });
74
+ })(), false);
122
75
  });
123
76
  }
124
77
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.file-layers.js"],"names":["L","togeojson","mounted","$on","loader","FileLayer","fileLoader","map","Object","assign","layer","geoJson","layerOptions","getGeoJsonOptions","addToMap","fileSizeLimit","formats","activityOptions","engine","fileLayers","_container","addEventListener","scrollWheelZoom","disable","enable","event","stopPropagation","preventDefault","loadMultiple","dataTransfer","files","on","name","filename","path","basename","extname","$t","type","isVisible","realtime","icon","scope","featureId","leaflet","cesium","toGeoJSON","schema","_","set","content","features","forEach","feature","_id","toString","addLayer","updateLayer","zoomToLayer","logger","error","$events","$emit","message"],"mappings":"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","file":"mixin.file-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport path from 'path'\r\nimport logger from 'loglevel'\r\nimport togeojson from 'togeojson'\r\nimport fileLayer from 'leaflet-filelayer'\r\nimport { uid } from 'quasar'\r\nimport { generatePropertiesSchema } from '../../utils'\r\n\r\nfileLayer(null, L, togeojson)\r\n\r\nexport default {\r\n mounted () {\r\n this.$on('map-ready', () => {\r\n this.loader = L.FileLayer.fileLoader(this.map, Object.assign({\r\n // Allows you to use a customized version of L.geoJson.\r\n // For example if you are using the Proj4Leaflet leaflet plugin,\r\n // you can pass L.Proj.geoJson and load the files into the\r\n // L.Proj.GeoJson instead of the L.geoJson.\r\n layer: L.geoJson,\r\n // See http://leafletjs.com/reference.html#geojson-options\r\n layerOptions: this.getGeoJsonOptions(),\r\n // Add to map after loading\r\n addToMap: false,\r\n // File size limit in kb\r\n fileSizeLimit: 1024 * 1024,\r\n // Restrict accepted file formats (default: .geojson, .kml, and .gpx)\r\n formats: [\r\n '.geojson',\r\n '.json',\r\n '.kml',\r\n '.gpx'\r\n ]\r\n }, this.activityOptions.engine.fileLayers))\r\n // Required to support drag'n'drop because we do not use the built-in control\r\n this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false)\r\n this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false)\r\n this.map._container.addEventListener('dragover', (event) => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n }, false)\r\n this.map._container.addEventListener('drop', (event) => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n\r\n this.loader.loadMultiple(event.dataTransfer.files)\r\n this.map.scrollWheelZoom.enable()\r\n }, false)\r\n\r\n this.loader.on('data:loaded', async event => {\r\n const name = (event.filename\r\n ? path.basename(event.filename, path.extname(event.filename))\r\n : this.$t('mixins.fileLayers.IMPORTED_DATA_NAME'))\r\n const engine = {\r\n type: 'geoJson',\r\n isVisible: true,\r\n realtime: true\r\n }\r\n const layer = {\r\n name,\r\n type: 'OverlayLayer',\r\n icon: 'insert_drive_file',\r\n scope: 'user',\r\n featureId: '_id',\r\n leaflet: engine,\r\n // Avoid sharing reference to the same object although options are similar\r\n // otherwise updating one will automatically update the other one\r\n cesium: Object.assign({}, engine)\r\n }\r\n const geoJson = event.layer.toGeoJSON()\r\n // Generate schema for properties\r\n const schema = generatePropertiesSchema(geoJson, name)\r\n _.set(layer, 'schema', { name, content: schema })\r\n // Generate temporary IDs for features\r\n const features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n features.forEach(feature => { feature._id = uid().toString() })\r\n // Create an empty layer used as a container\r\n await this.addLayer(layer)\r\n // Set data\r\n await this.updateLayer(name, geoJson)\r\n // Zoom to it\r\n this.zoomToLayer(name)\r\n })\r\n this.loader.on('data:error', event => {\r\n logger.error(event.error)\r\n this.$events.$emit('error', {\r\n message: this.$t('errors.FILE_IMPORT_ERROR')\r\n })\r\n })\r\n })\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.file-layers.js"],"names":["methods","importFiles","files","i","length","file","item","content","Reader","read","name","path","basename","extname","addGeoJsonLayer","description","error","mounted","$on","container","document","getElementById","dropFileInput","createElement","setAttribute","type","style","display","addEventListener","event","target","appendChild","map","_container","scrollWheelZoom","disable","enable","stopPropagation","preventDefault","dataTransfer"],"mappings":";;;;;;AAAA;;;;AACA;;;;;;kBAEe;AACbA,WAAS;AACDC,eAAN,CAAmBC,KAAnB,EAA0B;AAAA;;AAAA;AACxB,aAAK,IAAIC,IAAI,CAAb,EAAgBA,IAAID,MAAME,MAA1B,EAAkC,EAAED,CAApC,EAAuC;AACrC,gBAAME,OAAOH,MAAMI,IAAN,CAAWH,CAAX,CAAb;AACA,cAAI;AACF,kBAAMI,UAAU,MAAMC,eAAOC,IAAP,CAAYJ,IAAZ,CAAtB;AACA,kBAAMK,OAAOC,eAAKC,QAAL,CAAcP,KAAKK,IAAnB,EAAyBC,eAAKE,OAAL,CAAaR,KAAKK,IAAlB,CAAzB,CAAb;AACA,kBAAM,MAAKI,eAAL,CAAqB,EAAEJ,IAAF,EAAQK,aAAaV,KAAKK,IAA1B,EAArB,EAAuDH,OAAvD,CAAN;AACD,WAJD,CAIE,OAAOS,KAAP,EAAc;AACd;AACD;AACF;AAVuB;AAWzB;AAZM,GADI;AAebC,YAAW;AAAA;;AACT,SAAKC,GAAL,CAAS,WAAT,EAAsB,MAAM;AAC1B;AACA,YAAMC,YAAYC,SAASC,cAAT,CAAwB,OAAxB,CAAlB;AACA,YAAMC,gBAAgBF,SAASG,aAAT,CAAuB,OAAvB,CAAtB;AACAD,oBAAcE,YAAd,CAA2B,IAA3B,EAAiC,eAAjC;AACAF,oBAAcG,IAAd,GAAqB,MAArB;AACAH,oBAAcI,KAAd,CAAoBC,OAApB,GAA8B,MAA9B;AACAL,oBAAcM,gBAAd,CAA+B,QAA/B;AAAA,qCAAyC,WAAOC,KAAP,EAAiB;AACxD,gBAAM,OAAK5B,WAAL,CAAiB4B,MAAMC,MAAN,CAAa5B,KAA9B,CAAN;AACD,SAFD;;AAAA;AAAA;AAAA;AAAA;AAGAiB,gBAAUY,WAAV,CAAsBT,aAAtB;AACA;AACA,WAAKU,GAAL,CAASC,UAAT,CAAoBL,gBAApB,CAAqC,WAArC,EAAkD,MAAM,KAAKI,GAAL,CAASE,eAAT,CAAyBC,OAAzB,EAAxD,EAA4F,KAA5F;AACA,WAAKH,GAAL,CAASC,UAAT,CAAoBL,gBAApB,CAAqC,WAArC,EAAkD,MAAM,KAAKI,GAAL,CAASE,eAAT,CAAyBE,MAAzB,EAAxD,EAA2F,KAA3F;AACA,WAAKJ,GAAL,CAASC,UAAT,CAAoBL,gBAApB,CAAqC,UAArC,EAAiDC,SAAS;AACxDA,cAAMQ,eAAN;AACAR,cAAMS,cAAN;AACD,OAHD,EAGG,KAHH;AAIA,WAAKN,GAAL,CAASC,UAAT,CAAoBL,gBAApB,CAAqC,MAArC;AAAA,sCAA6C,WAAOC,KAAP,EAAiB;AAC5DA,gBAAMQ,eAAN;AACAR,gBAAMS,cAAN;AACA,gBAAM,OAAKrC,WAAL,CAAiB4B,MAAMU,YAAN,CAAmBrC,KAApC,CAAN;AACA,iBAAK8B,GAAL,CAASE,eAAT,CAAyBE,MAAzB;AACD,SALD;;AAAA;AAAA;AAAA;AAAA,YAKG,KALH;AAMD,KAxBD;AAyBD;AAzCY,C","file":"mixin.file-layers.js","sourcesContent":["import path from 'path'\r\nimport { Reader } from '../../../../core/client'\r\n\r\nexport default {\r\n methods: {\r\n async importFiles (files) {\r\n for (let i = 0; i < files.length; ++i) {\r\n const file = files.item(i)\r\n try {\r\n const content = await Reader.read(file)\r\n const name = path.basename(file.name, path.extname(file.name))\r\n await this.addGeoJsonLayer({ name, description: file.name }, content)\r\n } catch (error) {\r\n // nothing to do\r\n }\r\n }\r\n }\r\n },\r\n mounted () {\r\n this.$on('map-ready', () => {\r\n // Create a dummy dropFileInput element to enable puppeteer\r\n const container = document.getElementById('q-app')\r\n const dropFileInput = document.createElement('input')\r\n dropFileInput.setAttribute('id', 'dropFileInput')\r\n dropFileInput.type = 'file'\r\n dropFileInput.style.display = 'none'\r\n dropFileInput.addEventListener('change', async (event) => {\r\n await this.importFiles(event.target.files)\r\n })\r\n container.appendChild(dropFileInput)\r\n // Setup drag & drop\r\n this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false)\r\n this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false)\r\n this.map._container.addEventListener('dragover', event => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n }, false)\r\n this.map._container.addEventListener('drop', async (event) => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n await this.importFiles(event.dataTransfer.files)\r\n this.map.scrollWheelZoom.enable()\r\n }, false)\r\n })\r\n }\r\n}\r\n"]}
@@ -12,10 +12,6 @@ var _lodash = require('lodash');
12
12
 
13
13
  var _lodash2 = _interopRequireDefault(_lodash);
14
14
 
15
- var _moment = require('moment');
16
-
17
- var _moment2 = _interopRequireDefault(_moment);
18
-
19
15
  var _sift = require('sift');
20
16
 
21
17
  var _sift2 = _interopRequireDefault(_sift);
@@ -26,8 +22,12 @@ var _loglevel2 = _interopRequireDefault(_loglevel);
26
22
 
27
23
  require('leaflet-realtime');
28
24
 
25
+ var _time = require('../../../../core/client/time');
26
+
29
27
  var _GradientPath = require('../../leaflet/GradientPath');
30
28
 
29
+ var _MaskLayer = require('../../leaflet/MaskLayer');
30
+
31
31
  var _TiledFeatureLayer = require('../../leaflet/TiledFeatureLayer');
32
32
 
33
33
  var _utils = require('../../utils');
@@ -61,6 +61,11 @@ _leaflet2.default.GeoJSON.geometryToLayer = function (geojson, options) {
61
61
  return new _GradientPath.GradientPath(geojson, options.style(geojson));
62
62
  }
63
63
  }
64
+ if (geometry && properties && properties.mask) {
65
+ if (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon') {
66
+ return new _MaskLayer.MaskLayer(geojson, options.style(geojson));
67
+ }
68
+ }
64
69
  return geometryToLayer(geojson, options);
65
70
  };
66
71
 
@@ -85,7 +90,7 @@ exports.default = {
85
90
  leafletOptions.updateFeature = function (feature, oldLayer) {
86
91
  // A new feature is coming, create it
87
92
  if (!oldLayer) return;
88
- // An existing one is found, simply update styling, etc.
93
+ // An existing one is found, simply update styling, properties, etc.
89
94
  leafletOptions.onEachFeature(feature, oldLayer);
90
95
  if (oldLayer.setStyle) {
91
96
  // Some vector layers can be used for points, eg circleMarker,
@@ -98,6 +103,9 @@ exports.default = {
98
103
  oldLayer.setStyle(leafletOptions.style(feature));
99
104
  }
100
105
  }
106
+ const oldProperties = _lodash2.default.get(oldLayer, 'feature.properties');
107
+ const properties = _lodash2.default.get(feature, 'properties');
108
+ if (oldProperties && properties) Object.assign(properties, oldProperties);
101
109
  if (oldLayer.setIcon) {
102
110
  // FIXME: updating icon in place requires to recreate it anyway, so for now we recreate the whole marker
103
111
  // oldLayer.setIcon(_.get(leafletOptions.pointToLayer(feature, oldLayer.getLatLng()), 'options.icon'))
@@ -106,7 +114,10 @@ exports.default = {
106
114
  // And coordinates if not static
107
115
  const staticGeometry = _lodash2.default.get(leafletOptions, 'staticGeometry', false);
108
116
  if (staticGeometry) return oldLayer;
109
- const type = feature.geometry.type;
117
+ // The feature is changing its geometry type, recreate it
118
+ const oldType = _lodash2.default.get(oldLayer, 'feature.geometry.type');
119
+ const type = _lodash2.default.get(feature, 'geometry.type');
120
+ if (type !== oldType) return;
110
121
  const coordinates = feature.geometry.coordinates;
111
122
  // FIXME: support others geometry types ?
112
123
  switch (type) {
@@ -162,7 +173,7 @@ exports.default = {
162
173
  try {
163
174
  // Update only the first time or when required according to data update interval
164
175
  if (!lastUpdateTime || !_this.shouldSkipFeaturesUpdate(lastUpdateTime, options)) {
165
- lastUpdateTime = _this.currentTime ? _this.currentTime.clone() : _moment2.default.utc();
176
+ lastUpdateTime = _time.Time.getCurrentTime().clone();
166
177
  successCallback((yield _this.getFeatures(options)));
167
178
  }
168
179
  } catch (error) {
@@ -193,7 +204,7 @@ exports.default = {
193
204
  const searchParams = Object.assign({
194
205
  OUTPUTFORMAT: options.wfs.outputFormat, // request as geojson
195
206
  SRSNAME: 'EPSG:4326', // result in 4326
196
- BBOX: `${query.south},${query.west},${query.north},${query.east},EPSG:4326` // request bbox
207
+ BBOX: `${query.south},${query.west},${query.north},${query.east},urn:ogc:def:crs:EPSG::4326` // request bbox
197
208
  }, options.wfs.searchParams);
198
209
  return wfs.GetFeature(options.wfs.url, options.wfs.version, options.wfs.layer, searchParams, { xml2json: false });
199
210
  };
@@ -205,7 +216,7 @@ exports.default = {
205
216
  _lodash2.default.set(leafletOptions, 'source', (() => {
206
217
  var _ref4 = _asyncToGenerator(function* (successCallback, errorCallback) {
207
218
  try {
208
- const sourceToFetch = sourceCompiler({ time: _this.currentTime || _moment2.default.utc() });
219
+ const sourceToFetch = sourceCompiler({ time: _time.Time.getCurrentTime() });
209
220
  if (!lastFetchedSource || lastFetchedSource !== sourceToFetch) {
210
221
  lastFetchedSource = sourceToFetch;
211
222
  successCallback((yield (0, _utils.fetchGeoJson)(sourceToFetch)));
@@ -452,10 +463,10 @@ exports.default = {
452
463
  },
453
464
  created() {
454
465
  this.registerLeafletConstructor(this.createLeafletGeoJsonLayer);
455
- this.$on('current-time-changed', this.onCurrentTimeChangedGeoJsonLayers);
466
+ this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedGeoJsonLayers);
456
467
  },
457
468
  beforeDestroy() {
458
- this.$off('current-time-changed', this.onCurrentTimeChangedHeatmapLayers);
469
+ this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers);
459
470
  }
460
471
  };
461
472
  module.exports = exports['default'];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.geojson-layers.js"],"names":["wfs","geometryToLayer","L","GeoJSON","geojson","options","geometry","properties","geodesic","type","Geodesic","coordsToLatLngs","coordinates","Object","assign","steps","style","layer","fill","createCircle","coordsToLatLng","radius","gradient","GradientPath","methods","processRealtimeGeoJsonLayerOptions","leafletOptions","leaflet","id","_","get","set","feature","container","createLeafletLayer","has","updateFeature","oldLayer","onEachFeature","setStyle","setIcon","staticGeometry","setLatLng","setData","setLatLngs","service","tiled","removeMissing","successCallback","errorCallback","featureSource","baseQuery","getFeatures","merge","probeService","initialized","lastUpdateTime","getProbeFeatures","error","shouldSkipFeaturesUpdate","currentTime","clone","moment","utc","query","searchParams","OUTPUTFORMAT","outputFormat","SRSNAME","BBOX","south","west","north","east","GetFeature","url","version","xml2json","sourceCompiler","template","lastFetchedSource","sourceToFetch","time","processGeoJsonLayerOptions","dataSource","isNil","features","data","processClusterLayerOptions","cluster","createLeafletGeoJsonLayer","activityOptions","engine","realtime","layerStyleTemplate","map","property","compiler","popupTemplate","popup","tooltipTemplate","tooltip","geoJsonOptions","getGeoJsonOptions","keys","forEach","key","layerStyle","convertFromSimpleStyleSpec","tiledLayer","TiledFeatureLayer","setup","on","addTo","removeFrom","$emit","leafletLayer","once","toGeoJSON","values","_features","clearLayers","_onNewData","addLayer","geoJsonLayer","update","timeDimension","source","logger","geojsonOptions","LeafletEvents","Feature","onLeafletFeature","getPopup","unbindPopup","generateStyle","wasOpen","isPopupOpen","bindPopup","Popup","openPopup","getTooltip","unbindTooltip","isTooltipOpen","bindTooltip","Tooltip","openTooltip","pointToLayer","latlng","updateLayer","name","geoJson","remove","getLeafletLayerByName","getLayers","find","_container","filter","getLayer","getFeatureId","toGeoJson","onCurrentTimeChangedGeoJsonLayers","geoJsonlayers","layers","$or","$exists","variables","isVisible","geoJsonlayer","redraw","created","registerLeafletConstructor","$on","beforeDestroy","$off","onCurrentTimeChangedHeatmapLayers"],"mappings":"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","file":"mixin.geojson-layers.js","sourcesContent":["import L from 'leaflet'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport 'leaflet-realtime'\r\nimport { GradientPath } from '../../leaflet/GradientPath'\r\nimport { TiledFeatureLayer } from '../../leaflet/TiledFeatureLayer'\r\nimport { fetchGeoJson, LeafletEvents, bindLeafletEvents, unbindLeafletEvents } from '../../utils'\r\nimport * as wfs from '../../../common/wfs-utils'\r\n\r\n// Override default Leaflet GeoJson utility to manage some specific use cases\r\nconst geometryToLayer = L.GeoJSON.geometryToLayer\r\nL.GeoJSON.geometryToLayer = function (geojson, options) {\r\n const geometry = geojson.geometry\r\n const properties = geojson.properties\r\n if (geometry && properties && properties.geodesic) {\r\n if (geometry.type === 'LineString') {\r\n return new L.Geodesic([L.GeoJSON.coordsToLatLngs(geometry.coordinates, 0)],\r\n Object.assign({ steps: 100 }, options.style(geojson)))\r\n } else if (geometry.type === 'Point') {\r\n const layer = new L.Geodesic([], Object.assign({ fill: true, steps: 360 }, options.style(geojson)))\r\n layer.createCircle(L.GeoJSON.coordsToLatLng(geometry.coordinates), properties.radius)\r\n return layer\r\n }\r\n }\r\n if (geometry && properties && properties.gradient) {\r\n if (geometry.type === 'LineString') {\r\n return new GradientPath(geojson, options.style(geojson))\r\n }\r\n }\r\n return geometryToLayer(geojson, options)\r\n}\r\n\r\nexport default {\r\n methods: {\r\n processRealtimeGeoJsonLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Alter type as required by the plugin\r\n leafletOptions.type = 'realtime'\r\n // We first need to create an underlying container or setup Id function\r\n const id = _.get(options, 'featureId', _.get(leafletOptions, 'id', '_id'))\r\n if (id) _.set(leafletOptions, 'getFeatureId', (feature) => _.get(feature, 'properties.' + id, _.get(feature, id)))\r\n const container = _.get(leafletOptions, 'container')\r\n // If container given and not already instanciated, do it\r\n if (typeof container === 'string') {\r\n leafletOptions.container = this.createLeafletLayer({ type: container })\r\n }\r\n // Custom update function to ensure dynamic styling works as expected\r\n if (!_.has(leafletOptions, 'updateFeature')) {\r\n leafletOptions.updateFeature = function (feature, oldLayer) {\r\n // A new feature is coming, create it\r\n if (!oldLayer) return\r\n // An existing one is found, simply update styling, etc.\r\n leafletOptions.onEachFeature(feature, oldLayer)\r\n if (oldLayer.setStyle) {\r\n // Some vector layers can be used for points, eg circleMarker,\r\n // in this case we use marker styling instead of lines/polygons styling\r\n if (feature.geometry.type === 'Point') {\r\n // FIXME: updating style in place does not seem to work, so for now we recreate the whole marker\r\n // oldLayer.setStyle(leafletOptions.pointToLayer(feature))\r\n return\r\n } else {\r\n oldLayer.setStyle(leafletOptions.style(feature))\r\n }\r\n }\r\n if (oldLayer.setIcon) {\r\n // FIXME: updating icon in place requires to recreate it anyway, so for now we recreate the whole marker\r\n // oldLayer.setIcon(_.get(leafletOptions.pointToLayer(feature, oldLayer.getLatLng()), 'options.icon'))\r\n return\r\n }\r\n // And coordinates if not static\r\n const staticGeometry = _.get(leafletOptions, 'staticGeometry', false)\r\n if (staticGeometry) return oldLayer\r\n const type = feature.geometry.type\r\n const coordinates = feature.geometry.coordinates\r\n // FIXME: support others geometry types ?\r\n switch (type) {\r\n case 'Point':\r\n oldLayer.setLatLng(L.GeoJSON.coordsToLatLngs(coordinates))\r\n break\r\n case 'LineString':\r\n case 'MultiLineString':\r\n // Support Gradient Path\r\n if (typeof oldLayer.setData === 'function') oldLayer.setData(feature)\r\n else oldLayer.setLatLngs(L.GeoJSON.coordsToLatLngs(coordinates, type === 'LineString' ? 0 : 1))\r\n break\r\n case 'Polygon':\r\n case 'MultiPolygon':\r\n oldLayer.setLatLngs(L.GeoJSON.coordsToLatLngs(coordinates, type === 'Polygon' ? 1 : 2))\r\n break\r\n }\r\n return oldLayer\r\n }\r\n }\r\n // Check for feature service layers\r\n if (options.service) {\r\n // We perform manual update\r\n _.set(leafletOptions, 'start', false)\r\n // Tell realtime plugin how to update/load data\r\n if (leafletOptions.tiled) {\r\n leafletOptions.removeMissing = false\r\n // Fetching is managed by tiles but even for manual update leaflet realtime require a src\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n // Generate fetch function for tiled feature layer\r\n leafletOptions.featureSource = (baseQuery) => this.getFeatures(_.merge({ baseQuery }, options))\r\n } else {\r\n leafletOptions.removeMissing = !options.probeService\r\n let initialized = !options.probeService // If no probe reference, nothing to be initialized\r\n let lastUpdateTime\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {\r\n // If the probe location is given by another service use it on initialization\r\n if (!initialized) {\r\n try {\r\n // Use probes as reference\r\n successCallback(await this.getProbeFeatures(options))\r\n initialized = true\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n }\r\n try {\r\n // Update only the first time or when required according to data update interval\r\n if (!lastUpdateTime || !this.shouldSkipFeaturesUpdate(lastUpdateTime, options)) {\r\n lastUpdateTime = (this.currentTime ? this.currentTime.clone() : moment.utc())\r\n successCallback(await this.getFeatures(options))\r\n }\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n })\r\n }\r\n } else if (options.wfs) {\r\n // Features are fetched from a WFS connection\r\n _.set(leafletOptions, 'start', false)\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n\r\n if (leafletOptions.tiled) {\r\n leafletOptions.removeMissing = false\r\n // Generate fetch function for tiled feature layer\r\n leafletOptions.featureSource = (query) => {\r\n const searchParams = Object.assign({\r\n OUTPUTFORMAT: options.wfs.outputFormat, // request as geojson\r\n SRSNAME: 'EPSG:4326', // result in 4326\r\n BBOX: `${query.south},${query.west},${query.north},${query.east},EPSG:4326` // request bbox\r\n }, options.wfs.searchParams)\r\n return wfs.GetFeature(options.wfs.url, options.wfs.version, options.wfs.layer, searchParams, { xml2json: false })\r\n }\r\n } else {\r\n }\r\n } else if (_.has(leafletOptions, 'sourceTemplate')) {\r\n const sourceCompiler = _.template(_.get(leafletOptions, 'sourceTemplate'))\r\n let lastFetchedSource\r\n // Tell realtime plugin how to update/load data\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {\r\n try {\r\n const sourceToFetch = sourceCompiler({ time: this.currentTime || moment.utc() })\r\n if (!lastFetchedSource || (lastFetchedSource !== sourceToFetch)) {\r\n lastFetchedSource = sourceToFetch\r\n successCallback(await fetchGeoJson(sourceToFetch))\r\n }\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n })\r\n // We perform manual update\r\n _.set(leafletOptions, 'start', false)\r\n } else if (!_.has(leafletOptions, 'source')) {\r\n _.set(leafletOptions, 'start', false)\r\n // Even for manual update leaflet realtime require a src\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n }\r\n },\r\n async processGeoJsonLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n const dataSource = _.get(leafletOptions, 'source')\r\n if (_.isNil(dataSource)) {\r\n // Empty valid GeoJson\r\n _.set(leafletOptions, 'source', { type: 'FeatureCollection', features: [] })\r\n } else if (typeof dataSource === 'string') { // URL ? If so load data\r\n let data\r\n // Check for feature service layers\r\n if (options.service) {\r\n data = await this.getFeatures(options)\r\n } else { // Otherwise standard HTTP\r\n data = await fetchGeoJson(dataSource)\r\n }\r\n _.set(leafletOptions, 'source', data)\r\n }\r\n },\r\n processClusterLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n leafletOptions.container = this.createLeafletLayer(Object.assign({ type: 'markerClusterGroup' }, leafletOptions.cluster))\r\n },\r\n async createLeafletGeoJsonLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid type\r\n if (leafletOptions.type !== 'geoJson') return\r\n\r\n try {\r\n // If not explicitely disable use defaults for clustering\r\n if (!_.has(leafletOptions, 'cluster') && this.activityOptions.engine.cluster) {\r\n // Merge existing config or create a new one on layer\r\n if (leafletOptions.cluster) Object.assign(leafletOptions.cluster, this.activityOptions.engine.cluster)\r\n else leafletOptions.cluster = Object.assign({}, this.activityOptions.engine.cluster)\r\n }\r\n // Specific case of clustered layer where we first need to create an underlying group\r\n if (leafletOptions.cluster) {\r\n this.processClusterLayerOptions(options)\r\n }\r\n // Specific case of realtime layer\r\n if (leafletOptions.realtime) {\r\n this.processRealtimeGeoJsonLayerOptions(options)\r\n } else {\r\n await this.processGeoJsonLayerOptions(options)\r\n }\r\n // Optimize templating by creating compilers up-front\r\n const layerStyleTemplate = _.get(leafletOptions, 'template')\r\n if (layerStyleTemplate) {\r\n // We allow to template style properties according to feature, because it can be slow you have to specify a subset of properties\r\n leafletOptions.template = layerStyleTemplate.map(property => ({\r\n property, compiler: _.template(_.get(leafletOptions, property))\r\n }))\r\n }\r\n const popupTemplate = _.get(leafletOptions, 'popup.template')\r\n if (popupTemplate) {\r\n leafletOptions.popup.compiler = _.template(popupTemplate)\r\n }\r\n const tooltipTemplate = _.get(leafletOptions, 'tooltip.template')\r\n if (tooltipTemplate) {\r\n leafletOptions.tooltip.compiler = _.template(tooltipTemplate)\r\n }\r\n // Merge generic GeoJson options and layer options\r\n const geoJsonOptions = this.getGeoJsonOptions(options)\r\n Object.keys(geoJsonOptions).forEach(key => {\r\n // If layer provided do not override\r\n if (!_.has(leafletOptions, key)) _.set(leafletOptions, key, _.get(geoJsonOptions, key))\r\n })\r\n leafletOptions.layerStyle = this.convertFromSimpleStyleSpec(leafletOptions)\r\n let layer = this.createLeafletLayer(options)\r\n\r\n // Specific case of realtime layer where the underlying container also need to be added to map\r\n if (leafletOptions.realtime) {\r\n // Build associated tile layer and bind required events\r\n if (leafletOptions.tiled) {\r\n const tiledLayer = new TiledFeatureLayer(leafletOptions)\r\n tiledLayer.setup(this, options)\r\n layer.tiledLayer = tiledLayer\r\n layer.on('add', () => tiledLayer.addTo(this.map))\r\n layer.on('remove', () => tiledLayer.removeFrom(this.map))\r\n }\r\n // Bind event\r\n layer.on('update', (data) => this.$emit('layer-updated', Object.assign({ layer: options, leafletLayer: layer }, data)))\r\n if (leafletOptions.container) layer.once('add', () => leafletOptions.container.addTo(this.map))\r\n // Add FeatureGroup interface so that layer edition works as well\r\n layer.toGeoJSON = () => ({ type: 'FeatureCollection', features: _.values(layer._features) })\r\n layer.clearLayers = () => layer._onNewData(true, { type: 'FeatureCollection', features: [] })\r\n layer.addLayer = (geoJsonLayer) => layer._onNewData(true, geoJsonLayer.toGeoJSON())\r\n // We launch a first update to initialize data\r\n layer.update()\r\n } else {\r\n // Specific case of clustered layer where the group is added instead of the geojson layer\r\n if (leafletOptions.cluster && leafletOptions.container) {\r\n leafletOptions.container.addLayer(layer)\r\n layer = leafletOptions.container\r\n }\r\n }\r\n // Specific case of time dimension layer where we embed the underlying geojson layer\r\n if (leafletOptions.timeDimension) {\r\n layer = this.createLeafletLayer(Object.assign({ type: 'timeDimension.layer.geoJson', source: layer }, leafletOptions.timeDimension))\r\n }\r\n return layer\r\n } catch (error) {\r\n logger.error(error)\r\n return null\r\n }\r\n },\r\n getGeoJsonOptions (options = {}) {\r\n const geojsonOptions = {\r\n onEachFeature: (feature, layer) => {\r\n // Need to restone event listeners as context has changed\r\n unbindLeafletEvents(layer, LeafletEvents.Feature)\r\n // Check for custom onEachFeature function\r\n if (typeof this.onLeafletFeature === 'function') this.onLeafletFeature(feature, layer, options)\r\n // Then for tooltip/popup\r\n // First remove previous popup if any\r\n if (layer.getPopup()) layer.unbindPopup()\r\n const popup = this.generateStyle('popup', feature, layer, options)\r\n if (popup) {\r\n // Because we build a new popup we need to restore previous state\r\n const wasOpen = (layer.getPopup() && layer.isPopupOpen())\r\n layer.bindPopup(popup)\r\n bindLeafletEvents(layer.getPopup(), LeafletEvents.Popup, this, options)\r\n if (wasOpen) layer.openPopup()\r\n }\r\n // First remove previous tooltip if any\r\n if (layer.getTooltip()) layer.unbindTooltip()\r\n const tooltip = this.generateStyle('tooltip', feature, layer, options)\r\n if (tooltip) {\r\n // Because we build a new tooltip we need to restore previous state\r\n const wasOpen = (layer.getTooltip() && layer.isTooltipOpen())\r\n layer.bindTooltip(tooltip)\r\n bindLeafletEvents(layer.getTooltip(), LeafletEvents.Tooltip, this, options)\r\n if (wasOpen) layer.openTooltip()\r\n }\r\n bindLeafletEvents(layer, LeafletEvents.Feature, this, options)\r\n },\r\n style: (feature) => {\r\n return this.generateStyle('featureStyle', feature, options)\r\n },\r\n pointToLayer: (feature, latlng) => {\r\n return this.generateStyle('markerStyle', feature, latlng, options)\r\n }\r\n }\r\n\r\n return geojsonOptions\r\n },\r\n updateLayer (name, geoJson, remove) {\r\n // Retrieve the layer\r\n let layer = this.getLeafletLayerByName(name)\r\n if (!layer) return // Cannot update invisible layer\r\n // Check if clustering on top of a realtime layer, in this case we have a top-level container\r\n let container\r\n if (typeof layer.getLayers === 'function') {\r\n container = layer\r\n layer = container.getLayers().find(layer => layer._container === container)\r\n }\r\n /* By default leaflet-realtime only performs add with manual update\r\n (see https://github.com/perliedman/leaflet-realtime/issues/136)\r\n but we'd like to perform similarly to automated updates\r\n */\r\n if (remove && (typeof layer.remove === 'function')) {\r\n let features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // Filter features to ensure some have not been already removed\r\n // FIXME: indeed it seems to causes a bug with clustering, see https://github.com/kalisio/kdk/issues/140\r\n features = features.filter(feature => layer.getLayer(layer.options.getFeatureId(feature)))\r\n layer.remove(features)\r\n } else if (typeof layer._onNewData === 'function') {\r\n layer._onNewData(layer.options.removeMissing, geoJson || this.toGeoJson(name))\r\n }\r\n },\r\n onCurrentTimeChangedGeoJsonLayers (time) {\r\n const geoJsonlayers = _.values(this.layers).filter(sift({\r\n 'leaflet.type': 'geoJson',\r\n 'leaflet.realtime': true,\r\n $or: [ // Supported by template URL or time-based features\r\n { 'leaflet.sourceTemplate': { $exists: true } },\r\n { service: { $exists: true }, variables: { $exists: true } }\r\n ],\r\n isVisible: true\r\n }))\r\n geoJsonlayers.forEach(async geoJsonlayer => {\r\n // Retrieve the layer\r\n const layer = this.getLeafletLayerByName(geoJsonlayer.name)\r\n // Then update\r\n if (layer.tiledLayer) layer.tiledLayer.redraw()\r\n else layer.update()\r\n })\r\n }\r\n },\r\n created () {\r\n this.registerLeafletConstructor(this.createLeafletGeoJsonLayer)\r\n this.$on('current-time-changed', this.onCurrentTimeChangedGeoJsonLayers)\r\n },\r\n beforeDestroy () {\r\n this.$off('current-time-changed', this.onCurrentTimeChangedHeatmapLayers)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.geojson-layers.js"],"names":["wfs","geometryToLayer","L","GeoJSON","geojson","options","geometry","properties","geodesic","type","Geodesic","coordsToLatLngs","coordinates","Object","assign","steps","style","layer","fill","createCircle","coordsToLatLng","radius","gradient","GradientPath","mask","MaskLayer","methods","processRealtimeGeoJsonLayerOptions","leafletOptions","leaflet","id","_","get","set","feature","container","createLeafletLayer","has","updateFeature","oldLayer","onEachFeature","setStyle","oldProperties","setIcon","staticGeometry","oldType","setLatLng","setData","setLatLngs","service","tiled","removeMissing","successCallback","errorCallback","featureSource","baseQuery","getFeatures","merge","probeService","initialized","lastUpdateTime","getProbeFeatures","error","shouldSkipFeaturesUpdate","Time","getCurrentTime","clone","query","searchParams","OUTPUTFORMAT","outputFormat","SRSNAME","BBOX","south","west","north","east","GetFeature","url","version","xml2json","sourceCompiler","template","lastFetchedSource","sourceToFetch","time","processGeoJsonLayerOptions","dataSource","isNil","features","data","processClusterLayerOptions","cluster","createLeafletGeoJsonLayer","activityOptions","engine","realtime","layerStyleTemplate","map","property","compiler","popupTemplate","popup","tooltipTemplate","tooltip","geoJsonOptions","getGeoJsonOptions","keys","forEach","key","layerStyle","convertFromSimpleStyleSpec","tiledLayer","TiledFeatureLayer","setup","on","addTo","removeFrom","$emit","leafletLayer","once","toGeoJSON","values","_features","clearLayers","_onNewData","addLayer","geoJsonLayer","update","timeDimension","source","logger","geojsonOptions","LeafletEvents","Feature","onLeafletFeature","getPopup","unbindPopup","generateStyle","wasOpen","isPopupOpen","bindPopup","Popup","openPopup","getTooltip","unbindTooltip","isTooltipOpen","bindTooltip","Tooltip","openTooltip","pointToLayer","latlng","updateLayer","name","geoJson","remove","getLeafletLayerByName","getLayers","find","_container","filter","getLayer","getFeatureId","toGeoJson","onCurrentTimeChangedGeoJsonLayers","geoJsonlayers","layers","$or","$exists","variables","isVisible","geoJsonlayer","redraw","created","registerLeafletConstructor","$events","$on","beforeDestroy","$off","onCurrentTimeChangedHeatmapLayers"],"mappings":"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","file":"mixin.geojson-layers.js","sourcesContent":["import L from 'leaflet'\r\nimport _ from 'lodash'\r\nimport sift from 'sift'\r\nimport logger from 'loglevel'\r\nimport 'leaflet-realtime'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { GradientPath } from '../../leaflet/GradientPath'\r\nimport { MaskLayer } from '../../leaflet/MaskLayer'\r\nimport { TiledFeatureLayer } from '../../leaflet/TiledFeatureLayer'\r\nimport { fetchGeoJson, LeafletEvents, bindLeafletEvents, unbindLeafletEvents } from '../../utils'\r\nimport * as wfs from '../../../common/wfs-utils'\r\n\r\n// Override default Leaflet GeoJson utility to manage some specific use cases\r\nconst geometryToLayer = L.GeoJSON.geometryToLayer\r\nL.GeoJSON.geometryToLayer = function (geojson, options) {\r\n const geometry = geojson.geometry\r\n const properties = geojson.properties\r\n if (geometry && properties && properties.geodesic) {\r\n if (geometry.type === 'LineString') {\r\n return new L.Geodesic([L.GeoJSON.coordsToLatLngs(geometry.coordinates, 0)],\r\n Object.assign({ steps: 100 }, options.style(geojson)))\r\n } else if (geometry.type === 'Point') {\r\n const layer = new L.Geodesic([], Object.assign({ fill: true, steps: 360 }, options.style(geojson)))\r\n layer.createCircle(L.GeoJSON.coordsToLatLng(geometry.coordinates), properties.radius)\r\n return layer\r\n }\r\n }\r\n if (geometry && properties && properties.gradient) {\r\n if (geometry.type === 'LineString') {\r\n return new GradientPath(geojson, options.style(geojson))\r\n }\r\n }\r\n if (geometry && properties && properties.mask) {\r\n if (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon') {\r\n return new MaskLayer(geojson, options.style(geojson))\r\n }\r\n }\r\n return geometryToLayer(geojson, options)\r\n}\r\n\r\nexport default {\r\n methods: {\r\n processRealtimeGeoJsonLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Alter type as required by the plugin\r\n leafletOptions.type = 'realtime'\r\n // We first need to create an underlying container or setup Id function\r\n const id = _.get(options, 'featureId', _.get(leafletOptions, 'id', '_id'))\r\n if (id) _.set(leafletOptions, 'getFeatureId', (feature) => _.get(feature, 'properties.' + id, _.get(feature, id)))\r\n const container = _.get(leafletOptions, 'container')\r\n // If container given and not already instanciated, do it\r\n if (typeof container === 'string') {\r\n leafletOptions.container = this.createLeafletLayer({ type: container })\r\n }\r\n // Custom update function to ensure dynamic styling works as expected\r\n if (!_.has(leafletOptions, 'updateFeature')) {\r\n leafletOptions.updateFeature = function (feature, oldLayer) {\r\n // A new feature is coming, create it\r\n if (!oldLayer) return\r\n // An existing one is found, simply update styling, properties, etc.\r\n leafletOptions.onEachFeature(feature, oldLayer)\r\n if (oldLayer.setStyle) {\r\n // Some vector layers can be used for points, eg circleMarker,\r\n // in this case we use marker styling instead of lines/polygons styling\r\n if (feature.geometry.type === 'Point') {\r\n // FIXME: updating style in place does not seem to work, so for now we recreate the whole marker\r\n // oldLayer.setStyle(leafletOptions.pointToLayer(feature))\r\n return\r\n } else {\r\n oldLayer.setStyle(leafletOptions.style(feature))\r\n }\r\n }\r\n const oldProperties = _.get(oldLayer, 'feature.properties')\r\n const properties = _.get(feature, 'properties')\r\n if (oldProperties && properties) Object.assign(properties, oldProperties)\r\n if (oldLayer.setIcon) {\r\n // FIXME: updating icon in place requires to recreate it anyway, so for now we recreate the whole marker\r\n // oldLayer.setIcon(_.get(leafletOptions.pointToLayer(feature, oldLayer.getLatLng()), 'options.icon'))\r\n return\r\n }\r\n // And coordinates if not static\r\n const staticGeometry = _.get(leafletOptions, 'staticGeometry', false)\r\n if (staticGeometry) return oldLayer\r\n // The feature is changing its geometry type, recreate it\r\n const oldType = _.get(oldLayer, 'feature.geometry.type')\r\n const type = _.get(feature, 'geometry.type')\r\n if (type !== oldType) return\r\n const coordinates = feature.geometry.coordinates\r\n // FIXME: support others geometry types ?\r\n switch (type) {\r\n case 'Point':\r\n oldLayer.setLatLng(L.GeoJSON.coordsToLatLngs(coordinates))\r\n break\r\n case 'LineString':\r\n case 'MultiLineString':\r\n // Support Gradient Path\r\n if (typeof oldLayer.setData === 'function') oldLayer.setData(feature)\r\n else oldLayer.setLatLngs(L.GeoJSON.coordsToLatLngs(coordinates, type === 'LineString' ? 0 : 1))\r\n break\r\n case 'Polygon':\r\n case 'MultiPolygon':\r\n oldLayer.setLatLngs(L.GeoJSON.coordsToLatLngs(coordinates, type === 'Polygon' ? 1 : 2))\r\n break\r\n }\r\n return oldLayer\r\n }\r\n }\r\n // Check for feature service layers\r\n if (options.service) {\r\n // We perform manual update\r\n _.set(leafletOptions, 'start', false)\r\n // Tell realtime plugin how to update/load data\r\n if (leafletOptions.tiled) {\r\n leafletOptions.removeMissing = false\r\n // Fetching is managed by tiles but even for manual update leaflet realtime require a src\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n // Generate fetch function for tiled feature layer\r\n leafletOptions.featureSource = (baseQuery) => this.getFeatures(_.merge({ baseQuery }, options))\r\n } else {\r\n leafletOptions.removeMissing = !options.probeService\r\n let initialized = !options.probeService // If no probe reference, nothing to be initialized\r\n let lastUpdateTime\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {\r\n // If the probe location is given by another service use it on initialization\r\n if (!initialized) {\r\n try {\r\n // Use probes as reference\r\n successCallback(await this.getProbeFeatures(options))\r\n initialized = true\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n }\r\n try {\r\n // Update only the first time or when required according to data update interval\r\n if (!lastUpdateTime || !this.shouldSkipFeaturesUpdate(lastUpdateTime, options)) {\r\n lastUpdateTime = Time.getCurrentTime().clone()\r\n successCallback(await this.getFeatures(options))\r\n }\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n })\r\n }\r\n } else if (options.wfs) {\r\n // Features are fetched from a WFS connection\r\n _.set(leafletOptions, 'start', false)\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n\r\n if (leafletOptions.tiled) {\r\n leafletOptions.removeMissing = false\r\n // Generate fetch function for tiled feature layer\r\n leafletOptions.featureSource = (query) => {\r\n const searchParams = Object.assign({\r\n OUTPUTFORMAT: options.wfs.outputFormat, // request as geojson\r\n SRSNAME: 'EPSG:4326', // result in 4326\r\n BBOX: `${query.south},${query.west},${query.north},${query.east},urn:ogc:def:crs:EPSG::4326` // request bbox\r\n }, options.wfs.searchParams)\r\n return wfs.GetFeature(options.wfs.url, options.wfs.version, options.wfs.layer, searchParams, { xml2json: false })\r\n }\r\n } else {\r\n }\r\n } else if (_.has(leafletOptions, 'sourceTemplate')) {\r\n const sourceCompiler = _.template(_.get(leafletOptions, 'sourceTemplate'))\r\n let lastFetchedSource\r\n // Tell realtime plugin how to update/load data\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {\r\n try {\r\n const sourceToFetch = sourceCompiler({ time: Time.getCurrentTime() })\r\n if (!lastFetchedSource || (lastFetchedSource !== sourceToFetch)) {\r\n lastFetchedSource = sourceToFetch\r\n successCallback(await fetchGeoJson(sourceToFetch))\r\n }\r\n } catch (error) {\r\n errorCallback(error)\r\n }\r\n })\r\n // We perform manual update\r\n _.set(leafletOptions, 'start', false)\r\n } else if (!_.has(leafletOptions, 'source')) {\r\n _.set(leafletOptions, 'start', false)\r\n // Even for manual update leaflet realtime require a src\r\n _.set(leafletOptions, 'source', async (successCallback, errorCallback) => {})\r\n }\r\n },\r\n async processGeoJsonLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n const dataSource = _.get(leafletOptions, 'source')\r\n if (_.isNil(dataSource)) {\r\n // Empty valid GeoJson\r\n _.set(leafletOptions, 'source', { type: 'FeatureCollection', features: [] })\r\n } else if (typeof dataSource === 'string') { // URL ? If so load data\r\n let data\r\n // Check for feature service layers\r\n if (options.service) {\r\n data = await this.getFeatures(options)\r\n } else { // Otherwise standard HTTP\r\n data = await fetchGeoJson(dataSource)\r\n }\r\n _.set(leafletOptions, 'source', data)\r\n }\r\n },\r\n processClusterLayerOptions (options) {\r\n const leafletOptions = options.leaflet || options\r\n leafletOptions.container = this.createLeafletLayer(Object.assign({ type: 'markerClusterGroup' }, leafletOptions.cluster))\r\n },\r\n async createLeafletGeoJsonLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid type\r\n if (leafletOptions.type !== 'geoJson') return\r\n\r\n try {\r\n // If not explicitely disable use defaults for clustering\r\n if (!_.has(leafletOptions, 'cluster') && this.activityOptions.engine.cluster) {\r\n // Merge existing config or create a new one on layer\r\n if (leafletOptions.cluster) Object.assign(leafletOptions.cluster, this.activityOptions.engine.cluster)\r\n else leafletOptions.cluster = Object.assign({}, this.activityOptions.engine.cluster)\r\n }\r\n // Specific case of clustered layer where we first need to create an underlying group\r\n if (leafletOptions.cluster) {\r\n this.processClusterLayerOptions(options)\r\n }\r\n // Specific case of realtime layer\r\n if (leafletOptions.realtime) {\r\n this.processRealtimeGeoJsonLayerOptions(options)\r\n } else {\r\n await this.processGeoJsonLayerOptions(options)\r\n }\r\n // Optimize templating by creating compilers up-front\r\n const layerStyleTemplate = _.get(leafletOptions, 'template')\r\n if (layerStyleTemplate) {\r\n // We allow to template style properties according to feature, because it can be slow you have to specify a subset of properties\r\n leafletOptions.template = layerStyleTemplate.map(property => ({\r\n property, compiler: _.template(_.get(leafletOptions, property))\r\n }))\r\n }\r\n const popupTemplate = _.get(leafletOptions, 'popup.template')\r\n if (popupTemplate) {\r\n leafletOptions.popup.compiler = _.template(popupTemplate)\r\n }\r\n const tooltipTemplate = _.get(leafletOptions, 'tooltip.template')\r\n if (tooltipTemplate) {\r\n leafletOptions.tooltip.compiler = _.template(tooltipTemplate)\r\n }\r\n // Merge generic GeoJson options and layer options\r\n const geoJsonOptions = this.getGeoJsonOptions(options)\r\n Object.keys(geoJsonOptions).forEach(key => {\r\n // If layer provided do not override\r\n if (!_.has(leafletOptions, key)) _.set(leafletOptions, key, _.get(geoJsonOptions, key))\r\n })\r\n leafletOptions.layerStyle = this.convertFromSimpleStyleSpec(leafletOptions)\r\n let layer = this.createLeafletLayer(options)\r\n\r\n // Specific case of realtime layer where the underlying container also need to be added to map\r\n if (leafletOptions.realtime) {\r\n // Build associated tile layer and bind required events\r\n if (leafletOptions.tiled) {\r\n const tiledLayer = new TiledFeatureLayer(leafletOptions)\r\n tiledLayer.setup(this, options)\r\n layer.tiledLayer = tiledLayer\r\n layer.on('add', () => tiledLayer.addTo(this.map))\r\n layer.on('remove', () => tiledLayer.removeFrom(this.map))\r\n }\r\n // Bind event\r\n layer.on('update', (data) => this.$emit('layer-updated', Object.assign({ layer: options, leafletLayer: layer }, data)))\r\n if (leafletOptions.container) layer.once('add', () => leafletOptions.container.addTo(this.map))\r\n // Add FeatureGroup interface so that layer edition works as well\r\n layer.toGeoJSON = () => ({ type: 'FeatureCollection', features: _.values(layer._features) })\r\n layer.clearLayers = () => layer._onNewData(true, { type: 'FeatureCollection', features: [] })\r\n layer.addLayer = (geoJsonLayer) => layer._onNewData(true, geoJsonLayer.toGeoJSON())\r\n // We launch a first update to initialize data\r\n layer.update()\r\n } else {\r\n // Specific case of clustered layer where the group is added instead of the geojson layer\r\n if (leafletOptions.cluster && leafletOptions.container) {\r\n leafletOptions.container.addLayer(layer)\r\n layer = leafletOptions.container\r\n }\r\n }\r\n // Specific case of time dimension layer where we embed the underlying geojson layer\r\n if (leafletOptions.timeDimension) {\r\n layer = this.createLeafletLayer(Object.assign({ type: 'timeDimension.layer.geoJson', source: layer }, leafletOptions.timeDimension))\r\n }\r\n return layer\r\n } catch (error) {\r\n logger.error(error)\r\n return null\r\n }\r\n },\r\n getGeoJsonOptions (options = {}) {\r\n const geojsonOptions = {\r\n onEachFeature: (feature, layer) => {\r\n // Need to restone event listeners as context has changed\r\n unbindLeafletEvents(layer, LeafletEvents.Feature)\r\n // Check for custom onEachFeature function\r\n if (typeof this.onLeafletFeature === 'function') this.onLeafletFeature(feature, layer, options)\r\n // Then for tooltip/popup\r\n // First remove previous popup if any\r\n if (layer.getPopup()) layer.unbindPopup()\r\n const popup = this.generateStyle('popup', feature, layer, options)\r\n if (popup) {\r\n // Because we build a new popup we need to restore previous state\r\n const wasOpen = (layer.getPopup() && layer.isPopupOpen())\r\n layer.bindPopup(popup)\r\n bindLeafletEvents(layer.getPopup(), LeafletEvents.Popup, this, options)\r\n if (wasOpen) layer.openPopup()\r\n }\r\n // First remove previous tooltip if any\r\n if (layer.getTooltip()) layer.unbindTooltip()\r\n const tooltip = this.generateStyle('tooltip', feature, layer, options)\r\n if (tooltip) {\r\n // Because we build a new tooltip we need to restore previous state\r\n const wasOpen = (layer.getTooltip() && layer.isTooltipOpen())\r\n layer.bindTooltip(tooltip)\r\n bindLeafletEvents(layer.getTooltip(), LeafletEvents.Tooltip, this, options)\r\n if (wasOpen) layer.openTooltip()\r\n }\r\n bindLeafletEvents(layer, LeafletEvents.Feature, this, options)\r\n },\r\n style: (feature) => {\r\n return this.generateStyle('featureStyle', feature, options)\r\n },\r\n pointToLayer: (feature, latlng) => {\r\n return this.generateStyle('markerStyle', feature, latlng, options)\r\n }\r\n }\r\n\r\n return geojsonOptions\r\n },\r\n updateLayer (name, geoJson, remove) {\r\n // Retrieve the layer\r\n let layer = this.getLeafletLayerByName(name)\r\n if (!layer) return // Cannot update invisible layer\r\n // Check if clustering on top of a realtime layer, in this case we have a top-level container\r\n let container\r\n if (typeof layer.getLayers === 'function') {\r\n container = layer\r\n layer = container.getLayers().find(layer => layer._container === container)\r\n }\r\n /* By default leaflet-realtime only performs add with manual update\r\n (see https://github.com/perliedman/leaflet-realtime/issues/136)\r\n but we'd like to perform similarly to automated updates\r\n */\r\n if (remove && (typeof layer.remove === 'function')) {\r\n let features = (geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson])\r\n // Filter features to ensure some have not been already removed\r\n // FIXME: indeed it seems to causes a bug with clustering, see https://github.com/kalisio/kdk/issues/140\r\n features = features.filter(feature => layer.getLayer(layer.options.getFeatureId(feature)))\r\n layer.remove(features)\r\n } else if (typeof layer._onNewData === 'function') {\r\n layer._onNewData(layer.options.removeMissing, geoJson || this.toGeoJson(name))\r\n }\r\n },\r\n onCurrentTimeChangedGeoJsonLayers (time) {\r\n const geoJsonlayers = _.values(this.layers).filter(sift({\r\n 'leaflet.type': 'geoJson',\r\n 'leaflet.realtime': true,\r\n $or: [ // Supported by template URL or time-based features\r\n { 'leaflet.sourceTemplate': { $exists: true } },\r\n { service: { $exists: true }, variables: { $exists: true } }\r\n ],\r\n isVisible: true\r\n }))\r\n geoJsonlayers.forEach(async geoJsonlayer => {\r\n // Retrieve the layer\r\n const layer = this.getLeafletLayerByName(geoJsonlayer.name)\r\n // Then update\r\n if (layer.tiledLayer) layer.tiledLayer.redraw()\r\n else layer.update()\r\n })\r\n }\r\n },\r\n created () {\r\n this.registerLeafletConstructor(this.createLeafletGeoJsonLayer)\r\n this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedGeoJsonLayers)\r\n },\r\n beforeDestroy () {\r\n this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers)\r\n }\r\n}\r\n"]}
@@ -16,18 +16,20 @@ var _georaster = require('georaster');
16
16
 
17
17
  var _georaster2 = _interopRequireDefault(_georaster);
18
18
 
19
- var _chromaJs = require('chroma-js');
20
-
21
- var _chromaJs2 = _interopRequireDefault(_chromaJs);
22
-
23
19
  var _moment = require('moment');
24
20
 
25
21
  var _moment2 = _interopRequireDefault(_moment);
26
22
 
23
+ var _chromaJs = require('chroma-js');
24
+
25
+ var _chromaJs2 = _interopRequireDefault(_chromaJs);
26
+
27
27
  var _weacastLeaflet = require('weacast-leaflet');
28
28
 
29
29
  var _client = require('weacast-core/client');
30
30
 
31
+ var _utils = require('../../utils');
32
+
31
33
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
34
 
33
35
  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"); }); }; }
@@ -57,6 +59,7 @@ const GeorasterLayer = _leaflet2.default.Layer.extend({
57
59
  return;
58
60
  }
59
61
  // Setup the colormap
62
+ this.colorMap = (0, _utils.buildColorMap)(this);
60
63
  const scale = this.scale ? this.scale : '';
61
64
  if (this.classes) {
62
65
  this.colorMap = _chromaJs2.default.scale(scale).classes(this.classes);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.georaster-layers.js"],"names":["GeorasterLayer","L","Layer","extend","initialize","options","Object","assign","currentTime","utc","colorMap","gridRenderer","GridRenderer","gridOverlay","mesh","setOptions","onAdd","map","addLayer","onRemove","removeLayer","setRaster","raster","clearRaster","scale","classes","chroma","domain","grid","Grid","bounds","xmin","ymin","xmax","ymax","origin","size","width","height","resolution","pixelWidth","pixelHeight","data","values","band","matrix","setColorMap","setGrid","redraw","fire","loadRaster","url","response","fetch","ok","arrayBuffer","georaster","setCurrentTime","datetime","interval","timelag","timestamp","valueOf","nearestTime","Math","floor","format","methods","createLeafletGeorasterLayer","leafletOptions","leaflet","type","_","get","nodata","georasterLayer","created","registerLeafletConstructor"],"mappings":"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","file":"mixin.georaster-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport parseGeoraster from 'georaster'\r\nimport chroma from 'chroma-js'\r\nimport moment from 'moment'\r\nimport { GridRenderer } from 'weacast-leaflet'\r\nimport { Grid } from 'weacast-core/client'\r\n\r\nconst GeorasterLayer = L.Layer.extend({\r\n\r\n initialize (options) {\r\n Object.assign(this, options)\r\n this.currentTime = moment().utc()\r\n this.colorMap = null\r\n this.gridRenderer = new GridRenderer()\r\n this.gridOverlay = this.gridRenderer.initialize(Object.assign(options, { mesh: true }))\r\n L.setOptions(this, options || {})\r\n },\r\n\r\n onAdd (map) {\r\n map.addLayer(this.gridOverlay)\r\n },\r\n\r\n onRemove (map) {\r\n map.removeLayer(this.gridOverlay)\r\n },\r\n\r\n setRaster (raster) {\r\n if (!raster) {\r\n this.clearRaster()\r\n return\r\n }\r\n // Setup the colormap\r\n const scale = this.scale ? this.scale : ''\r\n if (this.classes) {\r\n this.colorMap = chroma.scale(scale).classes(this.classes)\r\n } else if (this.domain) {\r\n this.colorMap = chroma.scale(scale).domain(this.domain)\r\n }\r\n\r\n // Setup the grid\r\n const grid = new Grid({\r\n bounds: [raster.xmin, raster.ymin, raster.xmax, raster.ymax],\r\n origin: [raster.xmin, raster.ymax],\r\n size: [raster.width, raster.height],\r\n resolution: [raster.pixelWidth, raster.pixelHeight],\r\n data: raster.values[this.band],\r\n matrix: true\r\n })\r\n this.gridRenderer.setColorMap(this.colorMap)\r\n this.gridRenderer.setGrid(grid)\r\n this.gridOverlay.redraw()\r\n this.fire('data', raster)\r\n },\r\n\r\n clearRaster () {\r\n this.gridRenderer.setGrid(null)\r\n this.gridRenderer.setColorMap(null)\r\n this.colorMap = null\r\n },\r\n\r\n async loadRaster (url) {\r\n const response = await fetch(url)\r\n if (response.ok) {\r\n const arrayBuffer = await response.arrayBuffer()\r\n const georaster = await parseGeoraster(arrayBuffer)\r\n // Update the data\r\n this.setRaster(georaster)\r\n } else {\r\n this.clearRaster()\r\n }\r\n },\r\n\r\n async setCurrentTime (datetime) {\r\n if (!this.interval) return\r\n const timelag = this.timelag ? this.timelag : 0\r\n const timestamp = datetime.valueOf()\r\n const nearestTime = moment(Math.floor(timestamp / this.interval) * this.interval + timelag).utc()\r\n if (this.currentTime !== nearestTime) {\r\n // Store the time\r\n this.currentTime = nearestTime\r\n // Compute the url\r\n await this.loadRaster(this.currentTime.format(this.url))\r\n }\r\n }\r\n})\r\n\r\nexport default {\r\n methods: {\r\n async createLeafletGeorasterLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n\r\n // Check for valid type\r\n if (leafletOptions.type !== 'georaster') return\r\n\r\n // Copy options\r\n const colorMap = _.get(options, 'variables[0].chromajs', null)\r\n if (colorMap) Object.assign(leafletOptions, colorMap)\r\n const band = _.get(options, 'variables[0].band', 0)\r\n Object.assign(leafletOptions, { band })\r\n const nodata = _.get(options, 'variables[0].nodata', null)\r\n if (nodata) Object.assign(leafletOptions, { nodata })\r\n\r\n Object.assign(leafletOptions)\r\n this.georasterLayer = new GeorasterLayer(leafletOptions)\r\n return this.georasterLayer\r\n }\r\n },\r\n created () {\r\n this.registerLeafletConstructor(this.createLeafletGeorasterLayer)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.georaster-layers.js"],"names":["GeorasterLayer","L","Layer","extend","initialize","options","Object","assign","currentTime","utc","colorMap","gridRenderer","GridRenderer","gridOverlay","mesh","setOptions","onAdd","map","addLayer","onRemove","removeLayer","setRaster","raster","clearRaster","scale","classes","chroma","domain","grid","Grid","bounds","xmin","ymin","xmax","ymax","origin","size","width","height","resolution","pixelWidth","pixelHeight","data","values","band","matrix","setColorMap","setGrid","redraw","fire","loadRaster","url","response","fetch","ok","arrayBuffer","georaster","setCurrentTime","datetime","interval","timelag","timestamp","valueOf","nearestTime","Math","floor","format","methods","createLeafletGeorasterLayer","leafletOptions","leaflet","type","_","get","nodata","georasterLayer","created","registerLeafletConstructor"],"mappings":"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","file":"mixin.georaster-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport parseGeoraster from 'georaster'\r\nimport moment from 'moment'\r\nimport chroma from 'chroma-js'\r\nimport { GridRenderer } from 'weacast-leaflet'\r\nimport { Grid } from 'weacast-core/client'\r\nimport { buildColorMap } from '../../utils'\r\n\r\nconst GeorasterLayer = L.Layer.extend({\r\n\r\n initialize (options) {\r\n Object.assign(this, options)\r\n this.currentTime = moment().utc()\r\n this.colorMap = null\r\n this.gridRenderer = new GridRenderer()\r\n this.gridOverlay = this.gridRenderer.initialize(Object.assign(options, { mesh: true }))\r\n L.setOptions(this, options || {})\r\n },\r\n\r\n onAdd (map) {\r\n map.addLayer(this.gridOverlay)\r\n },\r\n\r\n onRemove (map) {\r\n map.removeLayer(this.gridOverlay)\r\n },\r\n\r\n setRaster (raster) {\r\n if (!raster) {\r\n this.clearRaster()\r\n return\r\n }\r\n // Setup the colormap\r\n this.colorMap = buildColorMap(this)\r\n const scale = this.scale ? this.scale : ''\r\n if (this.classes) {\r\n this.colorMap = chroma.scale(scale).classes(this.classes)\r\n } else if (this.domain) {\r\n this.colorMap = chroma.scale(scale).domain(this.domain)\r\n }\r\n\r\n // Setup the grid\r\n const grid = new Grid({\r\n bounds: [raster.xmin, raster.ymin, raster.xmax, raster.ymax],\r\n origin: [raster.xmin, raster.ymax],\r\n size: [raster.width, raster.height],\r\n resolution: [raster.pixelWidth, raster.pixelHeight],\r\n data: raster.values[this.band],\r\n matrix: true\r\n })\r\n this.gridRenderer.setColorMap(this.colorMap)\r\n this.gridRenderer.setGrid(grid)\r\n this.gridOverlay.redraw()\r\n this.fire('data', raster)\r\n },\r\n\r\n clearRaster () {\r\n this.gridRenderer.setGrid(null)\r\n this.gridRenderer.setColorMap(null)\r\n this.colorMap = null\r\n },\r\n\r\n async loadRaster (url) {\r\n const response = await fetch(url)\r\n if (response.ok) {\r\n const arrayBuffer = await response.arrayBuffer()\r\n const georaster = await parseGeoraster(arrayBuffer)\r\n // Update the data\r\n this.setRaster(georaster)\r\n } else {\r\n this.clearRaster()\r\n }\r\n },\r\n\r\n async setCurrentTime (datetime) {\r\n if (!this.interval) return\r\n const timelag = this.timelag ? this.timelag : 0\r\n const timestamp = datetime.valueOf()\r\n const nearestTime = moment(Math.floor(timestamp / this.interval) * this.interval + timelag).utc()\r\n if (this.currentTime !== nearestTime) {\r\n // Store the time\r\n this.currentTime = nearestTime\r\n // Compute the url\r\n await this.loadRaster(this.currentTime.format(this.url))\r\n }\r\n }\r\n})\r\n\r\nexport default {\r\n methods: {\r\n async createLeafletGeorasterLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n\r\n // Check for valid type\r\n if (leafletOptions.type !== 'georaster') return\r\n\r\n // Copy options\r\n const colorMap = _.get(options, 'variables[0].chromajs', null)\r\n if (colorMap) Object.assign(leafletOptions, colorMap)\r\n const band = _.get(options, 'variables[0].band', 0)\r\n Object.assign(leafletOptions, { band })\r\n const nodata = _.get(options, 'variables[0].nodata', null)\r\n if (nodata) Object.assign(leafletOptions, { nodata })\r\n\r\n Object.assign(leafletOptions)\r\n this.georasterLayer = new GeorasterLayer(leafletOptions)\r\n return this.georasterLayer\r\n }\r\n },\r\n created () {\r\n this.registerLeafletConstructor(this.createLeafletGeorasterLayer)\r\n }\r\n}\r\n"]}
@@ -8,6 +8,8 @@ var _lodash = require('lodash');
8
8
 
9
9
  var _lodash2 = _interopRequireDefault(_lodash);
10
10
 
11
+ var _time = require('../../../../core/client/time');
12
+
11
13
  var _GSMaPLayer = require('../../leaflet/GSMaPLayer');
12
14
 
13
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -17,8 +19,6 @@ function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, a
17
19
  exports.default = {
18
20
  methods: {
19
21
  createLeafletGSMaPLayer(options) {
20
- var _this = this;
21
-
22
22
  return _asyncToGenerator(function* () {
23
23
  const leafletOptions = options.leaflet || options;
24
24
  // Check for valid type
@@ -29,7 +29,7 @@ exports.default = {
29
29
  if (colorMap) Object.assign(leafletOptions, { chromajs: colorMap });
30
30
 
31
31
  // Add current time to options
32
- leafletOptions.time = _this.currentTime;
32
+ leafletOptions.time = _time.Time.getCurrentTime();
33
33
 
34
34
  // Then create layer
35
35
  return new _GSMaPLayer.GSMaPLayer(leafletOptions);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.gsmap-layers.js"],"names":["methods","createLeafletGSMaPLayer","options","leafletOptions","leaflet","type","colorMap","_","get","Object","assign","chromajs","time","currentTime","GSMaPLayer","created","registerLeafletConstructor"],"mappings":";;;;;;AAAA;;;;AAEA;;;;;;kBAEe;AACbA,WAAS;AACDC,2BAAN,CAA+BC,OAA/B,EAAwC;AAAA;;AAAA;AACtC,cAAMC,iBAAiBD,QAAQE,OAAR,IAAmBF,OAA1C;AACA;AACA,YAAIC,eAAeE,IAAf,KAAwB,YAA5B,EAA0C;;AAE1C;AACA,cAAMC,WAAWC,iBAAEC,GAAF,CAAMN,OAAN,EAAe,uBAAf,EAAwC,IAAxC,CAAjB;AACA,YAAII,QAAJ,EAAcG,OAAOC,MAAP,CAAcP,cAAd,EAA8B,EAAEQ,UAAUL,QAAZ,EAA9B;;AAEd;AACAH,uBAAeS,IAAf,GAAsB,MAAKC,WAA3B;;AAEA;AACA,eAAO,IAAIC,sBAAJ,CAAeX,cAAf,CAAP;AAbsC;AAcvC;AAfM,GADI;AAkBbY,YAAW;AACT;AACA,SAAKC,0BAAL,CAAgC,KAAKf,uBAArC;AACD;AArBY,C","file":"mixin.gsmap-layers.js","sourcesContent":["import _ from 'lodash'\r\n\r\nimport { GSMaPLayer } from '../../leaflet/GSMaPLayer'\r\n\r\nexport default {\r\n methods: {\r\n async createLeafletGSMaPLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid type\r\n if (leafletOptions.type !== 'gsmapLayer') return\r\n\r\n // Copy options\r\n const colorMap = _.get(options, 'variables[0].chromajs', null)\r\n if (colorMap) Object.assign(leafletOptions, { chromajs: colorMap })\r\n\r\n // Add current time to options\r\n leafletOptions.time = this.currentTime\r\n\r\n // Then create layer\r\n return new GSMaPLayer(leafletOptions)\r\n }\r\n },\r\n created () {\r\n // Register the new layer constructor\r\n this.registerLeafletConstructor(this.createLeafletGSMaPLayer)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.gsmap-layers.js"],"names":["methods","createLeafletGSMaPLayer","options","leafletOptions","leaflet","type","colorMap","_","get","Object","assign","chromajs","time","Time","getCurrentTime","GSMaPLayer","created","registerLeafletConstructor"],"mappings":";;;;;;AAAA;;;;AACA;;AACA;;;;;;kBAEe;AACbA,WAAS;AACDC,2BAAN,CAA+BC,OAA/B,EAAwC;AAAA;AACtC,cAAMC,iBAAiBD,QAAQE,OAAR,IAAmBF,OAA1C;AACA;AACA,YAAIC,eAAeE,IAAf,KAAwB,YAA5B,EAA0C;;AAE1C;AACA,cAAMC,WAAWC,iBAAEC,GAAF,CAAMN,OAAN,EAAe,uBAAf,EAAwC,IAAxC,CAAjB;AACA,YAAII,QAAJ,EAAcG,OAAOC,MAAP,CAAcP,cAAd,EAA8B,EAAEQ,UAAUL,QAAZ,EAA9B;;AAEd;AACAH,uBAAeS,IAAf,GAAsBC,WAAKC,cAAL,EAAtB;;AAEA;AACA,eAAO,IAAIC,sBAAJ,CAAeZ,cAAf,CAAP;AAbsC;AAcvC;AAfM,GADI;AAkBba,YAAW;AACT;AACA,SAAKC,0BAAL,CAAgC,KAAKhB,uBAArC;AACD;AArBY,C","file":"mixin.gsmap-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport { Time } from '../../../../core/client/time'\r\nimport { GSMaPLayer } from '../../leaflet/GSMaPLayer'\r\n\r\nexport default {\r\n methods: {\r\n async createLeafletGSMaPLayer (options) {\r\n const leafletOptions = options.leaflet || options\r\n // Check for valid type\r\n if (leafletOptions.type !== 'gsmapLayer') return\r\n\r\n // Copy options\r\n const colorMap = _.get(options, 'variables[0].chromajs', null)\r\n if (colorMap) Object.assign(leafletOptions, { chromajs: colorMap })\r\n\r\n // Add current time to options\r\n leafletOptions.time = Time.getCurrentTime()\r\n\r\n // Then create layer\r\n return new GSMaPLayer(leafletOptions)\r\n }\r\n },\r\n created () {\r\n // Register the new layer constructor\r\n this.registerLeafletConstructor(this.createLeafletGSMaPLayer)\r\n }\r\n}\r\n"]}