@kalisio/kdk 1.3.5 → 1.4.2

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 (535) hide show
  1. package/.nyc_output/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +1 -0
  2. package/.nyc_output/{0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json → 2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json} +0 -0
  3. package/.nyc_output/{20df4355-911a-4b16-a8ab-d3392e9f0a7f.json → 81d21e46-766a-46bc-b1b7-143ca577347a.json} +0 -0
  4. package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +1 -0
  5. package/.nyc_output/{257af0bb-96c3-465a-b5ef-a1df60078d5f.json → aaf3ebbb-f895-4d7b-9255-bc5dee832570.json} +0 -0
  6. package/.nyc_output/{284aebfa-23fd-425f-9d72-e4b8904dc224.json → dbeb2602-0ac2-4e66-978b-0d29548359ca.json} +0 -0
  7. package/.nyc_output/{5cbee06e-be6e-468a-bd78-4793ee785fe4.json → e47d1e4c-2fff-4dcb-908f-d3081162547c.json} +0 -0
  8. package/.nyc_output/processinfo/{2bece194-92f7-4971-a688-10604044a7fa.json → 2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json} +1 -1
  9. package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +1 -0
  10. package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +1 -0
  11. package/.nyc_output/processinfo/a762cb58-70dc-4d39-ab69-928635affa98.json +1 -0
  12. package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +1 -0
  13. package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +1 -0
  14. package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +1 -0
  15. package/.nyc_output/processinfo/index.json +1 -1
  16. package/CHANGELOG.md +189 -67
  17. package/README.md +1 -1
  18. package/coverage/core/api/application.js.html +145 -145
  19. package/coverage/core/api/authentication.js.html +37 -37
  20. package/coverage/core/api/db.js.html +74 -74
  21. package/coverage/core/api/hooks/hooks.account.js.html +15 -15
  22. package/coverage/core/api/hooks/hooks.authentication.js.html +16 -16
  23. package/coverage/core/api/hooks/hooks.authorisations.js.html +112 -121
  24. package/coverage/core/api/hooks/hooks.devices.js.html +5 -5
  25. package/coverage/core/api/hooks/hooks.groups.js.html +3 -3
  26. package/coverage/core/api/hooks/hooks.logger.js.html +7 -7
  27. package/coverage/core/api/hooks/hooks.model.js.html +149 -149
  28. package/coverage/core/api/hooks/hooks.organisations.js.html +13 -61
  29. package/coverage/core/api/hooks/hooks.pusher.js.html +7 -7
  30. package/coverage/core/api/hooks/hooks.query.js.html +68 -32
  31. package/coverage/core/api/hooks/hooks.service.js.html +15 -15
  32. package/coverage/core/api/hooks/hooks.storage.js.html +5 -5
  33. package/coverage/core/api/hooks/hooks.tags.js.html +7 -7
  34. package/coverage/core/api/hooks/hooks.users.js.html +111 -63
  35. package/coverage/core/api/hooks/index.html +72 -72
  36. package/coverage/core/api/hooks/index.js.html +15 -15
  37. package/coverage/core/api/index.html +35 -35
  38. package/coverage/core/api/index.js.html +13 -13
  39. package/coverage/core/api/marshall.js.html +81 -81
  40. package/coverage/core/api/models/groups.model.mongodb.js.html +1 -1
  41. package/coverage/core/api/models/index.html +1 -1
  42. package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
  43. package/coverage/core/api/models/tags.model.mongodb.js.html +1 -1
  44. package/coverage/core/api/models/users.model.mongodb.js.html +7 -7
  45. package/coverage/core/api/oauth2-handler.js.html +3 -3
  46. package/coverage/core/api/oauth2-verifier.js.html +5 -5
  47. package/coverage/core/api/services/account/account.hooks.js.html +1 -1
  48. package/coverage/core/api/services/account/account.service.js.html +34 -34
  49. package/coverage/core/api/services/account/index.html +17 -17
  50. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +3 -3
  51. package/coverage/core/api/services/authorisations/authorisations.service.js.html +40 -37
  52. package/coverage/core/api/services/authorisations/index.html +17 -17
  53. package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
  54. package/coverage/core/api/services/databases/databases.service.js.html +1 -1
  55. package/coverage/core/api/services/databases/index.html +1 -1
  56. package/coverage/core/api/services/devices/devices.hooks.js.html +1 -1
  57. package/coverage/core/api/services/devices/devices.service.js.html +1 -1
  58. package/coverage/core/api/services/devices/index.html +1 -1
  59. package/coverage/core/api/services/groups/groups.hooks.js.html +1 -1
  60. package/coverage/core/api/services/groups/index.html +1 -1
  61. package/coverage/core/api/services/index.html +5 -5
  62. package/coverage/core/api/services/index.js.html +40 -40
  63. package/coverage/core/api/services/mailer/index.html +1 -1
  64. package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
  65. package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
  66. package/coverage/core/api/services/organisations/index.html +1 -1
  67. package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
  68. package/coverage/core/api/services/organisations/organisations.service.js.html +1 -1
  69. package/coverage/core/api/services/pusher/index.html +1 -1
  70. package/coverage/core/api/services/pusher/pusher.channels.js.html +1 -1
  71. package/coverage/core/api/services/pusher/pusher.hooks.js.html +1 -1
  72. package/coverage/core/api/services/pusher/pusher.service.js.html +1 -1
  73. package/coverage/core/api/services/storage/index.html +1 -1
  74. package/coverage/core/api/services/storage/storage.hooks.js.html +4 -4
  75. package/coverage/core/api/services/tags/index.html +1 -1
  76. package/coverage/core/api/services/tags/tags.hooks.js.html +1 -1
  77. package/coverage/core/api/services/users/index.html +1 -1
  78. package/coverage/core/api/services/users/users.hooks.js.html +12 -12
  79. package/coverage/core/common/index.html +32 -32
  80. package/coverage/core/common/index.js.html +27 -27
  81. package/coverage/core/common/permissions.js.html +135 -75
  82. package/coverage/index.html +157 -157
  83. package/coverage/lcov-report/core/api/application.js.html +145 -145
  84. package/coverage/lcov-report/core/api/authentication.js.html +37 -37
  85. package/coverage/lcov-report/core/api/db.js.html +74 -74
  86. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +15 -15
  87. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +16 -16
  88. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +112 -121
  89. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +5 -5
  90. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +3 -3
  91. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +7 -7
  92. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +149 -149
  93. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +13 -61
  94. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +7 -7
  95. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +68 -32
  96. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +15 -15
  97. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +5 -5
  98. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +7 -7
  99. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +111 -63
  100. package/coverage/lcov-report/core/api/hooks/index.html +72 -72
  101. package/coverage/lcov-report/core/api/hooks/index.js.html +15 -15
  102. package/coverage/lcov-report/core/api/index.html +35 -35
  103. package/coverage/lcov-report/core/api/index.js.html +13 -13
  104. package/coverage/lcov-report/core/api/marshall.js.html +81 -81
  105. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +1 -1
  106. package/coverage/lcov-report/core/api/models/index.html +1 -1
  107. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
  108. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +1 -1
  109. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +7 -7
  110. package/coverage/lcov-report/core/api/oauth2-handler.js.html +3 -3
  111. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +5 -5
  112. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +1 -1
  113. package/coverage/lcov-report/core/api/services/account/account.service.js.html +34 -34
  114. package/coverage/lcov-report/core/api/services/account/index.html +17 -17
  115. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +3 -3
  116. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +40 -37
  117. package/coverage/lcov-report/core/api/services/authorisations/index.html +17 -17
  118. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
  119. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
  120. package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
  121. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +1 -1
  122. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +1 -1
  123. package/coverage/lcov-report/core/api/services/devices/index.html +1 -1
  124. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +1 -1
  125. package/coverage/lcov-report/core/api/services/groups/index.html +1 -1
  126. package/coverage/lcov-report/core/api/services/index.html +5 -5
  127. package/coverage/lcov-report/core/api/services/index.js.html +40 -40
  128. package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
  129. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
  130. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
  131. package/coverage/lcov-report/core/api/services/organisations/index.html +1 -1
  132. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
  133. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +1 -1
  134. package/coverage/lcov-report/core/api/services/pusher/index.html +1 -1
  135. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +1 -1
  136. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +1 -1
  137. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +1 -1
  138. package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
  139. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +4 -4
  140. package/coverage/lcov-report/core/api/services/tags/index.html +1 -1
  141. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +1 -1
  142. package/coverage/lcov-report/core/api/services/users/index.html +1 -1
  143. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +12 -12
  144. package/coverage/lcov-report/core/common/index.html +32 -32
  145. package/coverage/lcov-report/core/common/index.js.html +27 -27
  146. package/coverage/lcov-report/core/common/permissions.js.html +135 -75
  147. package/coverage/lcov-report/index.html +157 -157
  148. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +55 -55
  149. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +337 -274
  150. package/coverage/lcov-report/map/api/hooks/index.html +43 -43
  151. package/coverage/lcov-report/map/api/hooks/index.js.html +12 -12
  152. package/coverage/lcov-report/map/api/index.html +31 -31
  153. package/coverage/lcov-report/map/api/index.js.html +24 -24
  154. package/coverage/lcov-report/map/api/marshall.js.html +39 -39
  155. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +20 -20
  156. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +22 -22
  157. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +24 -24
  158. package/coverage/lcov-report/map/api/models/index.html +43 -43
  159. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +21 -21
  160. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +156 -156
  161. package/coverage/lcov-report/map/api/services/alerts/index.html +30 -30
  162. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +19 -19
  163. package/coverage/lcov-report/map/api/services/catalog/index.html +17 -17
  164. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  165. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +20 -20
  167. package/coverage/lcov-report/map/api/services/features/index.html +21 -21
  168. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +8 -8
  169. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +99 -99
  170. package/coverage/lcov-report/map/api/services/geocoder/index.html +28 -28
  171. package/coverage/lcov-report/map/api/services/index.html +21 -21
  172. package/coverage/lcov-report/map/api/services/index.js.html +71 -71
  173. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
  174. package/coverage/lcov-report/map/common/errors.js.html +9 -9
  175. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +120 -120
  176. package/coverage/lcov-report/map/common/grid.js.html +268 -268
  177. package/coverage/lcov-report/map/common/index.html +149 -149
  178. package/coverage/lcov-report/map/common/index.js.html +31 -31
  179. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +71 -71
  180. package/coverage/lcov-report/map/common/moment-utils.js.html +14 -14
  181. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +280 -280
  182. package/coverage/lcov-report/map/common/opendap-utils.js.html +220 -220
  183. package/coverage/lcov-report/map/common/permissions.js.html +21 -21
  184. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +51 -51
  185. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  186. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +99 -99
  187. package/coverage/lcov-report/map/common/wcs-utils.js.html +66 -66
  188. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +196 -196
  189. package/coverage/lcov-report/map/common/wfs-utils.js.html +8 -5
  190. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  191. package/coverage/lcov-report/map/common/wmts-utils.js.html +71 -11
  192. package/coverage/lcov.info +3588 -3659
  193. package/coverage/map/api/hooks/hooks.catalog.js.html +55 -55
  194. package/coverage/map/api/hooks/hooks.query.js.html +337 -274
  195. package/coverage/map/api/hooks/index.html +43 -43
  196. package/coverage/map/api/hooks/index.js.html +12 -12
  197. package/coverage/map/api/index.html +31 -31
  198. package/coverage/map/api/index.js.html +24 -24
  199. package/coverage/map/api/marshall.js.html +39 -39
  200. package/coverage/map/api/models/alerts.model.mongodb.js.html +20 -20
  201. package/coverage/map/api/models/catalog.model.mongodb.js.html +22 -22
  202. package/coverage/map/api/models/features.model.mongodb.js.html +24 -24
  203. package/coverage/map/api/models/index.html +43 -43
  204. package/coverage/map/api/services/alerts/alerts.hooks.js.html +21 -21
  205. package/coverage/map/api/services/alerts/alerts.service.js.html +156 -156
  206. package/coverage/map/api/services/alerts/index.html +30 -30
  207. package/coverage/map/api/services/catalog/catalog.hooks.js.html +19 -19
  208. package/coverage/map/api/services/catalog/index.html +17 -17
  209. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  210. package/coverage/map/api/services/daptiles/index.html +1 -1
  211. package/coverage/map/api/services/features/features.hooks.js.html +20 -20
  212. package/coverage/map/api/services/features/index.html +21 -21
  213. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +8 -8
  214. package/coverage/map/api/services/geocoder/geocoder.service.js.html +99 -99
  215. package/coverage/map/api/services/geocoder/index.html +28 -28
  216. package/coverage/map/api/services/index.html +21 -21
  217. package/coverage/map/api/services/index.js.html +71 -71
  218. package/coverage/map/common/dynamic-grid-source.js.html +68 -68
  219. package/coverage/map/common/errors.js.html +9 -9
  220. package/coverage/map/common/geotiff-grid-source.js.html +120 -120
  221. package/coverage/map/common/grid.js.html +268 -268
  222. package/coverage/map/common/index.html +149 -149
  223. package/coverage/map/common/index.js.html +31 -31
  224. package/coverage/map/common/meteo-model-grid-source.js.html +71 -71
  225. package/coverage/map/common/moment-utils.js.html +14 -14
  226. package/coverage/map/common/opendap-grid-source.js.html +280 -280
  227. package/coverage/map/common/opendap-utils.js.html +220 -220
  228. package/coverage/map/common/permissions.js.html +21 -21
  229. package/coverage/map/common/time-based-grid-source.js.html +51 -51
  230. package/coverage/map/common/tms-utils.js.html +1 -1
  231. package/coverage/map/common/wcs-grid-source.js.html +99 -99
  232. package/coverage/map/common/wcs-utils.js.html +66 -66
  233. package/coverage/map/common/weacast-grid-source.js.html +196 -196
  234. package/coverage/map/common/wfs-utils.js.html +8 -5
  235. package/coverage/map/common/wms-utils.js.html +1 -1
  236. package/coverage/map/common/wmts-utils.js.html +71 -11
  237. package/extras/icons/kanban.png +0 -0
  238. package/extras/testcafe/page-models/map/catalog.js +2 -2
  239. package/extras/tours/core/add-member.js +10 -1
  240. package/extras/tours/core/{tag-member.js → edit-member-tags.js} +4 -3
  241. package/extras/tours/core/groups.js +8 -2
  242. package/extras/tours/core/members.js +11 -21
  243. package/extras/tours/core/tags.js +7 -1
  244. package/extras/tours/map/catalog-categories.js +4 -4
  245. package/extras/tours/map/catalog-panel.js +16 -16
  246. package/extras/tours/map/favorite-views.js +3 -3
  247. package/lib/core/api/hooks/hooks.authorisations.js +149 -140
  248. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  249. package/lib/core/api/hooks/hooks.organisations.js +1 -23
  250. package/lib/core/api/hooks/hooks.organisations.js.map +1 -1
  251. package/lib/core/api/hooks/hooks.query.js +22 -0
  252. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  253. package/lib/core/api/hooks/hooks.users.js +34 -18
  254. package/lib/core/api/hooks/hooks.users.js.map +1 -1
  255. package/lib/core/api/services/authorisations/authorisations.service.js +34 -25
  256. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  257. package/lib/core/client/api.js +1 -0
  258. package/lib/core/client/api.js.map +1 -1
  259. package/lib/core/client/components/account/KAccountDZ.vue +3 -4
  260. package/lib/core/client/components/account/KAccountDevices.vue +5 -6
  261. package/lib/core/client/components/account/KDeviceCard.vue +2 -1
  262. package/lib/core/client/components/account/KIdentityPanel.vue +1 -7
  263. package/lib/core/client/components/collection/KBoard.vue +26 -155
  264. package/lib/core/client/components/collection/KCard.vue +144 -42
  265. package/lib/core/client/components/collection/KCardSection.vue +52 -0
  266. package/lib/core/client/components/collection/KColumn.vue +181 -0
  267. package/lib/core/client/components/collection/KGrid.vue +13 -18
  268. package/lib/core/client/components/collection/KHistory.vue +61 -89
  269. package/lib/core/client/components/collection/KHistoryEntry.vue +90 -66
  270. package/lib/core/client/components/collection/KItem.vue +21 -2
  271. package/lib/core/client/components/collection/KList.vue +9 -12
  272. package/lib/core/client/components/collection/KTable.vue +33 -39
  273. package/lib/core/client/components/collection/index.js +6 -1
  274. package/lib/core/client/components/collection/index.js.map +1 -1
  275. package/lib/core/client/components/editor/KEditor.vue +0 -6
  276. package/lib/core/client/components/editor/KModalEditor.vue +4 -4
  277. package/lib/core/client/components/editor/KSettingsEditor.vue +49 -0
  278. package/lib/core/client/components/form/KAttachmentField.vue +10 -10
  279. package/lib/core/client/components/form/KChipsField.vue +28 -23
  280. package/lib/core/client/components/form/KColorField.vue +30 -25
  281. package/lib/core/client/components/form/KForm.vue +0 -12
  282. package/lib/core/client/components/form/KIconField.vue +1 -0
  283. package/lib/core/client/components/form/KItemField.vue +8 -4
  284. package/lib/core/client/components/form/KRoleField.vue +56 -0
  285. package/lib/core/client/components/form/KSelectField.vue +16 -1
  286. package/lib/core/client/components/form/KView.vue +5 -14
  287. package/lib/core/client/components/frame/KAction.vue +18 -12
  288. package/lib/core/client/components/frame/KAvatar.vue +3 -3
  289. package/lib/core/client/components/frame/KChart.vue +60 -0
  290. package/lib/core/client/components/frame/KChipsPane.vue +80 -0
  291. package/lib/core/client/components/frame/KContent.vue +1 -1
  292. package/lib/core/client/components/frame/KModal.vue +30 -44
  293. package/lib/core/client/components/frame/KPanel.vue +1 -1
  294. package/lib/core/client/components/frame/{KMenu.vue → KPopupAction.vue} +6 -7
  295. package/lib/core/client/components/frame/KSpot.vue +31 -0
  296. package/lib/core/client/components/frame/KStamp.vue +62 -0
  297. package/lib/core/client/components/frame/index.js +56 -1
  298. package/lib/core/client/components/frame/index.js.map +1 -1
  299. package/lib/core/client/components/input/KColorChooser.vue +16 -8
  300. package/lib/core/client/components/input/KIconChooser.vue +2 -1
  301. package/lib/core/client/components/input/KUploader.vue +14 -5
  302. package/lib/core/client/components/layout/KAbout.vue +9 -3
  303. package/lib/core/client/components/layout/KFab.vue +1 -1
  304. package/lib/core/client/components/layout/KPage.vue +44 -19
  305. package/lib/core/client/components/layout/KTour.vue +2 -2
  306. package/lib/core/client/components/layout/KWelcome.vue +13 -12
  307. package/lib/core/client/components/layout/KWindow.vue +1 -1
  308. package/lib/core/client/components/media/KImageViewer.vue +9 -7
  309. package/lib/core/client/components/media/KMediaBrowser.vue +12 -8
  310. package/lib/core/client/components/menu/KMenu.vue +103 -0
  311. package/lib/core/client/components/team/KAddMember.vue +17 -9
  312. package/lib/core/client/components/team/KChangeRole.vue +5 -7
  313. package/lib/core/client/components/team/KGroupCard.vue +34 -51
  314. package/lib/core/client/components/team/KGroupsActivity.vue +9 -2
  315. package/lib/core/client/components/team/KJoinGroup.vue +5 -7
  316. package/lib/core/client/components/team/KMemberCard.vue +104 -63
  317. package/lib/core/client/components/team/KMembersActivity.vue +9 -2
  318. package/lib/core/client/components/team/KOrganisationsActivity.vue +8 -1
  319. package/lib/core/client/components/team/KTagCard.vue +26 -26
  320. package/lib/core/client/components/team/KTagsActivity.vue +9 -2
  321. package/lib/core/client/components/time/KTimeRange.vue +144 -0
  322. package/lib/core/client/components/viewer/KModalViewer.vue +6 -0
  323. package/lib/core/client/components/viewer/KViewer.vue +0 -6
  324. package/lib/core/client/i18n/core_en.json +133 -93
  325. package/lib/core/client/i18n/core_fr.json +56 -16
  326. package/lib/core/client/index.js +28 -14
  327. package/lib/core/client/index.js.map +1 -1
  328. package/lib/core/client/mixins/mixin.authorisation.js +28 -18
  329. package/lib/core/client/mixins/mixin.authorisation.js.map +1 -1
  330. package/lib/core/client/mixins/mixin.base-collection.js +57 -9
  331. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  332. package/lib/core/client/mixins/mixin.base-context.js +1 -1
  333. package/lib/core/client/mixins/mixin.base-context.js.map +1 -1
  334. package/lib/core/client/mixins/mixin.base-editor.js +26 -16
  335. package/lib/core/client/mixins/mixin.base-editor.js.map +1 -1
  336. package/lib/core/client/mixins/mixin.base-field.js +0 -4
  337. package/lib/core/client/mixins/mixin.base-field.js.map +1 -1
  338. package/lib/core/client/mixins/mixin.base-item.js +29 -14
  339. package/lib/core/client/mixins/mixin.base-item.js.map +1 -1
  340. package/lib/core/client/mixins/mixin.base-viewer.js +0 -2
  341. package/lib/core/client/mixins/mixin.base-viewer.js.map +1 -1
  342. package/lib/core/client/mixins/mixin.object-proxy.js +17 -3
  343. package/lib/core/client/mixins/mixin.object-proxy.js.map +1 -1
  344. package/lib/core/client/mixins/mixin.schema-proxy.js +31 -0
  345. package/lib/core/client/mixins/mixin.schema-proxy.js.map +1 -1
  346. package/lib/core/client/mixins/mixin.service.js +5 -33
  347. package/lib/core/client/mixins/mixin.service.js.map +1 -1
  348. package/lib/core/client/services/index.js +23 -0
  349. package/lib/core/client/services/index.js.map +1 -1
  350. package/lib/core/client/services/local-settings.service.js +4 -0
  351. package/lib/core/client/services/local-settings.service.js.map +1 -1
  352. package/lib/core/client/time.js +131 -0
  353. package/lib/core/client/time.js.map +1 -0
  354. package/lib/core/common/permissions.js +65 -23
  355. package/lib/core/common/permissions.js.map +1 -1
  356. package/lib/core/common/schemas/groups.create.json +1 -1
  357. package/lib/core/common/schemas/groups.update.json +1 -1
  358. package/lib/core/common/schemas/organisations.create.json +1 -1
  359. package/lib/core/common/schemas/organisations.update.json +2 -2
  360. package/lib/core/common/schemas/settings.update.json +139 -0
  361. package/lib/core/common/schemas/tags.update.json +9 -1
  362. package/lib/map/api/hooks/hooks.query.js +48 -27
  363. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  364. package/lib/map/api/services/features/features.hooks.js +1 -1
  365. package/lib/map/api/services/features/features.hooks.js.map +1 -1
  366. package/lib/map/client/components/KColorLegend.vue +25 -23
  367. package/lib/map/client/components/KFavoriteViews.vue +71 -35
  368. package/lib/map/client/components/KFeaturesChart.vue +11 -9
  369. package/lib/map/client/components/KFeaturesFilter.vue +15 -7
  370. package/lib/map/client/components/KFeaturesTable.vue +27 -2
  371. package/lib/map/client/components/KLayerEditionToolbar.vue +43 -0
  372. package/lib/map/client/components/KLayerStyleEditor.vue +10 -4
  373. package/lib/map/client/components/KLayerStyleForm.vue +14 -11
  374. package/lib/map/client/components/KLocationInput.vue +126 -65
  375. package/lib/map/client/components/KLocationMap.vue +199 -84
  376. package/lib/map/client/components/KPositionIndicator.vue +1 -0
  377. package/lib/map/client/components/KTimeline.vue +41 -36
  378. package/lib/map/client/components/KUrlLegend.vue +21 -19
  379. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +105 -0
  380. package/lib/map/client/components/catalog/KCatalog.vue +14 -2
  381. package/lib/map/client/components/catalog/KConnectLayer.vue +31 -11
  382. package/lib/map/client/components/catalog/KCreateLayer.vue +37 -14
  383. package/lib/map/client/components/catalog/KImportLayer.vue +28 -8
  384. package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
  385. package/lib/map/client/components/catalog/KLayersSelector.vue +42 -42
  386. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  387. package/lib/map/client/components/form/KLocationField.vue +1 -1
  388. package/lib/map/client/components/form/KOwsLayerField.vue +21 -2
  389. package/lib/map/client/components/form/KOwsServiceField.vue +1 -0
  390. package/lib/map/client/components/widget/KInformationBox.vue +10 -16
  391. package/lib/map/client/components/widget/KMapillaryViewer.vue +59 -49
  392. package/lib/map/client/components/widget/KTimeSeries.vue +39 -29
  393. package/lib/map/client/i18n/map_en.json +65 -17
  394. package/lib/map/client/i18n/map_fr.json +67 -20
  395. package/lib/map/client/init.js +18 -6
  396. package/lib/map/client/init.js.map +1 -1
  397. package/lib/map/client/leaflet/GSMaPLayer.js +4 -9
  398. package/lib/map/client/leaflet/GSMaPLayer.js.map +1 -1
  399. package/lib/map/client/leaflet/GradientPath.js.map +1 -1
  400. package/lib/map/client/leaflet/MaskLayer.js +64 -0
  401. package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
  402. package/lib/map/client/mixins/globe/mixin.base-globe.js +4 -1
  403. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  404. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +7 -9
  405. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  406. package/lib/map/client/mixins/index.js +8 -13
  407. package/lib/map/client/mixins/index.js.map +1 -1
  408. package/lib/map/client/mixins/map/mixin.base-map.js +30 -6
  409. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  410. package/lib/map/client/mixins/map/mixin.canvas-layers.js +274 -51
  411. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  412. package/lib/map/client/mixins/map/mixin.edit-layers.js +218 -121
  413. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  414. package/lib/map/client/mixins/map/mixin.file-layers.js +25 -18
  415. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  416. package/lib/map/client/mixins/map/mixin.geojson-layers.js +18 -10
  417. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  418. package/lib/map/client/mixins/map/mixin.georaster-layers.js +7 -4
  419. package/lib/map/client/mixins/map/mixin.georaster-layers.js.map +1 -1
  420. package/lib/map/client/mixins/map/mixin.gsmap-layers.js +3 -3
  421. package/lib/map/client/mixins/map/mixin.gsmap-layers.js.map +1 -1
  422. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +8 -10
  423. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  424. package/lib/map/client/mixins/map/mixin.mapillary-layers.js +25 -40
  425. package/lib/map/client/mixins/map/mixin.mapillary-layers.js.map +1 -1
  426. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +5 -3
  427. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  428. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +5 -3
  429. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  430. package/lib/map/client/mixins/mixin.activity.js +60 -68
  431. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  432. package/lib/map/client/mixins/mixin.feature-selection.js +8 -10
  433. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  434. package/lib/map/client/mixins/mixin.feature-service.js +7 -5
  435. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  436. package/lib/map/client/mixins/mixin.weacast.js +6 -4
  437. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  438. package/lib/map/client/pixi-utils.js +9 -0
  439. package/lib/map/client/pixi-utils.js.map +1 -1
  440. package/lib/map/client/utils.js +50 -0
  441. package/lib/map/client/utils.js.map +1 -1
  442. package/lib/map/common/wfs-utils.js +1 -1
  443. package/lib/map/common/wfs-utils.js.map +1 -1
  444. package/lib/map/common/wmts-utils.js +31 -7
  445. package/lib/map/common/wmts-utils.js.map +1 -1
  446. package/lib/test/client/core/account.js +100 -0
  447. package/lib/test/client/core/account.js.map +1 -0
  448. package/lib/test/client/core/api.js +400 -0
  449. package/lib/test/client/core/api.js.map +1 -0
  450. package/lib/test/client/core/collection.js +109 -0
  451. package/lib/test/client/core/collection.js.map +1 -0
  452. package/lib/test/client/core/index.js +90 -0
  453. package/lib/test/client/core/index.js.map +1 -0
  454. package/lib/test/client/core/layout.js +221 -0
  455. package/lib/test/client/core/layout.js.map +1 -0
  456. package/lib/test/client/core/runner.js +204 -0
  457. package/lib/test/client/core/runner.js.map +1 -0
  458. package/lib/test/client/core/screens.js +68 -0
  459. package/lib/test/client/core/screens.js.map +1 -0
  460. package/lib/test/client/core/utils.js +304 -0
  461. package/lib/test/client/core/utils.js.map +1 -0
  462. package/lib/test/client/index.js +20 -0
  463. package/lib/test/client/index.js.map +1 -0
  464. package/lib/test/client/map/catalog.js +191 -0
  465. package/lib/test/client/map/catalog.js.map +1 -0
  466. package/lib/test/client/map/controls.js +54 -0
  467. package/lib/test/client/map/controls.js.map +1 -0
  468. package/lib/test/client/map/index.js +30 -0
  469. package/lib/test/client/map/index.js.map +1 -0
  470. package/package.json +17 -9
  471. package/test.client.js +1 -0
  472. package/tests/core/test-log-2021-07-15.log +71 -0
  473. package/tests/core/test-log-2021-09-02.log +47 -0
  474. package/tests/map/test-log-%DATE%.logYYYY-07-DD +12 -0
  475. package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
  476. package/tests/map/test-log-2021-07-12.log +12 -0
  477. package/tests/map/test-log-2021-07-15.log +5 -0
  478. package/tests/map/test-log-2021-09-02.log +3 -0
  479. package/.nyc_output/11cd93d8-69cb-405c-98a3-d249ea35b6da.json +0 -1
  480. package/.nyc_output/2bece194-92f7-4971-a688-10604044a7fa.json +0 -1
  481. package/.nyc_output/5ddee33e-b658-4c8e-a247-54f575ac67e8.json +0 -1
  482. package/.nyc_output/78760ae4-555f-4d9c-a6a1-acf5e2f0fe45.json +0 -1
  483. package/.nyc_output/d0bb2559-084e-4c92-b9e6-29a9abd41f7c.json +0 -1
  484. package/.nyc_output/processinfo/0b8aa700-8daa-49ce-85e7-a8f8965d55f0.json +0 -1
  485. package/.nyc_output/processinfo/11cd93d8-69cb-405c-98a3-d249ea35b6da.json +0 -1
  486. package/.nyc_output/processinfo/20df4355-911a-4b16-a8ab-d3392e9f0a7f.json +0 -1
  487. package/.nyc_output/processinfo/257af0bb-96c3-465a-b5ef-a1df60078d5f.json +0 -1
  488. package/.nyc_output/processinfo/284aebfa-23fd-425f-9d72-e4b8904dc224.json +0 -1
  489. package/.nyc_output/processinfo/5cbee06e-be6e-468a-bd78-4793ee785fe4.json +0 -1
  490. package/.nyc_output/processinfo/5ddee33e-b658-4c8e-a247-54f575ac67e8.json +0 -1
  491. package/.nyc_output/processinfo/78760ae4-555f-4d9c-a6a1-acf5e2f0fe45.json +0 -1
  492. package/.nyc_output/processinfo/d0bb2559-084e-4c92-b9e6-29a9abd41f7c.json +0 -1
  493. package/lib/core/client/components/frame/KLabel.vue +0 -56
  494. package/lib/core/client/components/team/KTagsPane.vue +0 -35
  495. package/lib/map/client/leaflet/TiledMapillaryLayer.js +0 -137
  496. package/lib/map/client/leaflet/TiledMapillaryLayer.js.map +0 -1
  497. package/lib/map/client/mixins/mixin.time.js +0 -73
  498. package/lib/map/client/mixins/mixin.time.js.map +0 -1
  499. package/tests/core/account.test.js +0 -415
  500. package/tests/core/client.test.js.skip +0 -37
  501. package/tests/core/config/default.js +0 -97
  502. package/tests/core/config/email-templates/confirmInvitation/html.ejs +0 -18
  503. package/tests/core/config/email-templates/identityChange/html.ejs +0 -12
  504. package/tests/core/config/email-templates/newDevice/html.ejs +0 -7
  505. package/tests/core/config/email-templates/passwordChange/html.ejs +0 -5
  506. package/tests/core/config/email-templates/resendVerifySignup/html.ejs +0 -10
  507. package/tests/core/config/email-templates/resetPwd/html.ejs +0 -5
  508. package/tests/core/config/email-templates/sendResetPwd/html.ejs +0 -8
  509. package/tests/core/config/email-templates/verifySignup/html.ejs +0 -3
  510. package/tests/core/data/10k_most_common_passwords.txt +0 -10000
  511. package/tests/core/data/logo.png +0 -0
  512. package/tests/core/hooks.test.js +0 -175
  513. package/tests/core/index.test.js +0 -418
  514. package/tests/core/notifications.test.js +0 -465
  515. package/tests/core/storage.test.js +0 -134
  516. package/tests/core/team.test.js +0 -610
  517. package/tests/core/utils.js +0 -59
  518. package/tests/map/alerts.test.js +0 -554
  519. package/tests/map/config/default.js +0 -112
  520. package/tests/map/config/layers.json +0 -37
  521. package/tests/map/daptiles.test.js +0 -41
  522. package/tests/map/data/DescribeCoverage.xml +0 -55
  523. package/tests/map/data/GetCoverage.tif +0 -0
  524. package/tests/map/data/adsb.observations.json +0 -132
  525. package/tests/map/data/dataset.grb.das +0 -55
  526. package/tests/map/data/dataset.grb.dds +0 -17
  527. package/tests/map/data/dataset.grb.dods +0 -0
  528. package/tests/map/data/lat_lon_bounds.grb.dods +0 -0
  529. package/tests/map/data/subdataset.grb.dods +0 -0
  530. package/tests/map/data/vigicrues.observations.json +0 -47042
  531. package/tests/map/data/vigicrues.stations.json +0 -15422
  532. package/tests/map/data/zones.json +0 -1228
  533. package/tests/map/grid-sources.test.js +0 -304
  534. package/tests/map/hooks.test.js +0 -96
  535. package/tests/map/index.test.js +0 -333
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.edit-layers.js"],"names":["originalOnTouch","L","Draw","Polyline","prototype","_onTouch","e","originalEvent","pointerType","call","methods","isLayerEdited","layer","editedLayer","name","getGeoJsonEditOptions","options","onEachFeature","getGeoJsonOptions","style","feature","Object","assign","activityOptions","engine","editFeatureStyle","featureStyle","pointToLayer","latlng","createMarkerFromStyle","editPointStyle","pointStyle","editLayer","leafletLayer","getLeafletLayerByName","editControl","map","removeControl","removeLayer","editableLayer","addLayer","editedLayerSchema","deleteInProgress","geoJson","toGeoJSON","clearLayers","Control","position","draw","editOptions","edit","featureGroup","remove","addControl","createdFeatures","editedFeatures","deletedFeatures","JSON","stringify","_","get","updateFeatureProperties","popup","getPopup","unbindPopup","editFeatureModal","$createComponent","propsData","service","contextId","objectId","_id","schemaJson","perspective","$mount","openModal","$on","updatedFeature","bindPopup","editFeaturesProperties","pick","addData","closeModal","onEditFeatureProperties","event","target","onFeatureCreated","id","set","toString","createFeatures","onFeaturesEdited","editFeaturesGeometry","layers","onFeaturesDeleted","removeFeatures","onStartDeleteFeatures","onStopDeleteFeatures","onRemoveFeature","Dialog","create","title","$t","message","html","ok","label","flat","cancel","onOk","parentLeafletLayer","beforeCreate","polyline","polygon","allowIntersection","circle","rectangle","marker","circlemarker","created","convertFromSimpleStyleSpec","mounted","drawLocal","returnObjects","values","Event","beforeDestroy","$off"],"mappings":"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","file":"mixin.edit-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport 'leaflet-draw/dist/leaflet.draw-src.js'\r\nimport 'leaflet-draw/dist/leaflet.draw-src.css'\r\nimport { Dialog, uid } from 'quasar'\r\nimport { bindLeafletEvents } from '../../utils'\r\n\r\n// Please refer to https://github.com/Leaflet/Leaflet.draw/issues/695\r\nconst originalOnTouch = L.Draw.Polyline.prototype._onTouch\r\nL.Draw.Polyline.prototype._onTouch = function (e) {\r\n if (e.originalEvent.pointerType !== 'mouse') {\r\n return originalOnTouch.call(this, e)\r\n }\r\n}\r\n\r\nexport default {\r\n methods: {\r\n isLayerEdited (layer) {\r\n return this.editedLayer && (this.editedLayer.name === layer.name)\r\n },\r\n getGeoJsonEditOptions (options) {\r\n // Retrieve base options first\r\n const { onEachFeature } = this.getGeoJsonOptions(options)\r\n return {\r\n onEachFeature,\r\n // Use default styling when editing as dynamic styling can conflict\r\n style: (feature) => {\r\n return Object.assign({}, this.activityOptions.engine.editFeatureStyle || this.activityOptions.engine.featureStyle)\r\n },\r\n pointToLayer: (feature, latlng) => {\r\n return this.createMarkerFromStyle(latlng, Object.assign({}, this.activityOptions.engine.editPointStyle || this.activityOptions.engine.pointStyle))\r\n }\r\n }\r\n },\r\n async editLayer (layer) {\r\n const leafletLayer = this.getLeafletLayerByName(layer.name)\r\n if (!leafletLayer) return\r\n\r\n if (this.editControl) { // Stop edition\r\n // Remove UI\r\n this.map.removeControl(this.editControl)\r\n this.editControl = null\r\n // Set back edited layers to source layer\r\n this.map.removeLayer(this.editableLayer)\r\n leafletLayer.addLayer(this.editableLayer)\r\n this.editedLayer = null\r\n this.editedLayerSchema = null\r\n this.deleteInProgress = false\r\n } else { // Start edition\r\n this.editedLayer = layer\r\n // Move source layers to edition layers, required as eg clusters are not supported\r\n const geoJson = leafletLayer.toGeoJSON()\r\n leafletLayer.clearLayers()\r\n this.editableLayer = L.geoJson(geoJson, this.getGeoJsonEditOptions(layer))\r\n this.map.addLayer(this.editableLayer)\r\n // Add UI\r\n this.editControl = new L.Control.Draw({\r\n position: 'bottomleft',\r\n draw: this.editOptions,\r\n edit: {\r\n featureGroup: this.editableLayer,\r\n remove: true\r\n }\r\n })\r\n this.map.addControl(this.editControl)\r\n this.createdFeatures = []\r\n this.editedFeatures = []\r\n this.deletedFeatures = []\r\n this.editedLayerSchema = JSON.stringify(_.get(this.editedLayer, 'schema.content'))\r\n }\r\n },\r\n async updateFeatureProperties (feature, layer, leafletLayer) {\r\n // Avoid default popup\r\n const popup = leafletLayer.getPopup()\r\n if (popup) leafletLayer.unbindPopup(popup)\r\n\r\n this.editFeatureModal = await this.$createComponent('editor/KModalEditor', {\r\n propsData: {\r\n service: 'features',\r\n contextId: this.contextId,\r\n objectId: feature._id,\r\n schemaJson: this.editedLayerSchema,\r\n perspective: 'properties'\r\n }\r\n })\r\n this.editFeatureModal.$mount()\r\n this.editFeatureModal.openModal()\r\n this.editFeatureModal.$on('applied', async updatedFeature => {\r\n // Restore popup\r\n if (popup) leafletLayer.bindPopup(popup)\r\n // Save in DB and in memory\r\n await this.editFeaturesProperties(updatedFeature)\r\n const geoJson = leafletLayer.toGeoJSON()\r\n Object.assign(geoJson, _.pick(updatedFeature, ['properties']))\r\n this.editableLayer.removeLayer(leafletLayer)\r\n this.editableLayer.addData(geoJson)\r\n this.editFeatureModal.closeModal()\r\n this.editFeatureModal = null\r\n })\r\n this.editFeatureModal.$on('closed', () => {\r\n // Restore popup\r\n if (popup) leafletLayer.bindPopup(popup)\r\n this.editFeatureModal = null\r\n })\r\n },\r\n async onEditFeatureProperties (layer, event) {\r\n const leafletLayer = event && event.target\r\n if (!leafletLayer) return\r\n const feature = _.get(leafletLayer, 'feature')\r\n if (!feature || !this.isLayerEdited(layer)) return\r\n if (!this.editedLayerSchema) return // No edition schema\r\n if (!this.editedLayer._id) return // Impossible to edit in-memory layer as it requires a service now\r\n // Check if not currently in the edition workspace for removal\r\n if (this.deleteInProgress) return\r\n await this.updateFeatureProperties(feature, layer, leafletLayer)\r\n },\r\n async onFeatureCreated (event) {\r\n let geoJson = event.layer.toGeoJSON()\r\n // Generate temporary ID for feature\r\n const id = _.get(this.editedLayer, 'featureId')\r\n if (id && (id !== '_id')) _.set(geoJson, 'properties.' + id, uid().toString())\r\n else geoJson._id = uid().toString()\r\n // Save changes to DB, we use the layer DB ID as layer ID on features\r\n if (this.editedLayer._id) {\r\n geoJson = await this.createFeatures(geoJson, this.editedLayer._id)\r\n }\r\n this.editableLayer.addData(geoJson)\r\n },\r\n async onFeaturesEdited (event) {\r\n // Save changes to DB\r\n if (this.editedLayer._id) {\r\n await this.editFeaturesGeometry(event.layers.toGeoJSON())\r\n }\r\n },\r\n async onFeaturesDeleted (event) {\r\n // Save changes to DB\r\n if (this.editedLayer._id) {\r\n await this.removeFeatures(event.layers.toGeoJSON())\r\n }\r\n },\r\n onStartDeleteFeatures () {\r\n this.deleteInProgress = true\r\n },\r\n onStopDeleteFeatures () {\r\n this.deleteInProgress = false\r\n },\r\n async onRemoveFeature (feature, layer, leafletLayer) {\r\n Dialog.create({\r\n title: this.$t('mixins.editLayers.REMOVE_FEATURE_DIALOG_TITLE'),\r\n message: this.$t('mixins.editLayers.REMOVE_FEATURE_DIALOG_MESSAGE'),\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n }).onOk(async () => {\r\n const parentLeafletLayer = this.getLeafletLayerByName(layer.name)\r\n if (!parentLeafletLayer) return\r\n await this.removeFeatures(feature)\r\n parentLeafletLayer.removeLayer(leafletLayer)\r\n })\r\n }\r\n },\r\n beforeCreate () {\r\n this.editOptions = {\r\n polyline: {},\r\n polygon: {\r\n allowIntersection: false // Restricts shapes to simple polygons\r\n },\r\n circle: {},\r\n rectangle: {},\r\n marker: {},\r\n circlemarker: false\r\n }\r\n },\r\n created () {\r\n // Perform required conversion for default feature styling\r\n if (this.activityOptions.engine.editFeatureStyle) this.convertFromSimpleStyleSpec(this.activityOptions.engine.editFeatureStyle, 'update-in-place')\r\n if (this.activityOptions.engine.editPointStyle) this.convertFromSimpleStyleSpec(this.activityOptions.engine.editPointStyle, 'update-in-place')\r\n },\r\n mounted () {\r\n // Initialize i18n\r\n L.drawLocal = this.$t('mixins.editLayers', { returnObjects: true })\r\n this.$on('map-ready', () => {\r\n // Setup event binding\r\n bindLeafletEvents(this.map, _.values(L.Draw.Event), this)\r\n })\r\n this.$on('click', this.onEditFeatureProperties)\r\n this.$on('draw:deletestart', this.onStartDeleteFeatures)\r\n this.$on('draw:deletestop', this.onStopDeleteFeatures)\r\n this.$on('draw:created', this.onFeatureCreated)\r\n this.$on('draw:edited', this.onFeaturesEdited)\r\n this.$on('draw:deleted', this.onFeaturesDeleted)\r\n },\r\n beforeDestroy () {\r\n this.$off('click', this.onEditFeatureProperties)\r\n this.$off('draw:deletestart', this.onStartDeleteFeatures)\r\n this.$off('draw:deletestop', this.onStopDeleteFeatures)\r\n this.$off('draw:created', this.onFeatureCreated)\r\n this.$off('draw:edited', this.onFeaturesEdited)\r\n this.$off('draw:deleted', this.onFeaturesDeleted)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../../map/client/mixins/map/mixin.edit-layers.js"],"names":["mapEditEvents","layerEditEvents","data","editingLayer","allowedLayerEditModes","layerEditMode","methods","isLayerEdited","layer","editedLayer","name","getGeoJsonEditOptions","options","filteredOptions","_","has","Object","assign","leaflet","tooltip","popup","onEachFeature","getGeoJsonOptions","pmIgnore","style","feature","activityOptions","engine","editFeatureStyle","featureStyle","pointToLayer","latlng","createMarkerFromStyle","editPointStyle","pointStyle","setEditMode","mode","editableLayer","map","pm","globalDrawModeEnabled","disableDraw","globalEditModeEnabled","disableGlobalEditMode","globalDragModeEnabled","disableGlobalDragMode","globalRemovalModeEnabled","disableGlobalRemovalMode","globalRotateModeEnabled","disableGlobalRotateMode","setGlobalOptions","layerGroup","indexOf","enableGlobalEditMode","enableGlobalDragMode","enableGlobalRotateMode","enableGlobalRemovalMode","enableDraw","continueDrawing","startEditLayer","allowedEditModes","editMode","leafletLayer","getLeafletLayerByName","$emit","geoJson","toGeoJSON","clearLayers","_id","undefined","features","type","toString","$api","getService","create","L","addLayer","schema","get","editedLayerSchema","JSON","stringify","$on","onEditFeatureProperties","onMapZoomWhileEditing","onFeatureCreated","onFeaturesEdited","onFeaturesDeleted","stopEditLayer","status","remove","removeLayer","$off","event","target","getPopup","unbindPopup","service","editFeatureModal","$createComponent","propsData","contextId","objectId","schemaJson","perspective","$mount","openModal","updatedFeature","bindPopup","editFeaturesProperties","patch","pick","addData","closeModal","idValue","idProp","set","createFeatures","editFeaturesGeometry","removeFeatures","bringToFront","onRemoveFeature","Dialog","title","$t","message","html","ok","label","flat","cancel","onOk","parentLeafletLayer","created","convertFromSimpleStyleSpec"],"mappings":"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","file":"mixin.edit-layers.js","sourcesContent":["import _ from 'lodash'\r\nimport L from 'leaflet'\r\nimport { Dialog, uid } from 'quasar'\r\nimport { updatePropertiesSchema, bindLeafletEvents, unbindLeafletEvents } from '../../utils'\r\n\r\n// Events we listen while layer is in edition mode\r\nconst mapEditEvents = ['pm:create']\r\nconst layerEditEvents = ['layerremove', 'pm:update', 'pm:dragend', 'pm:rotateend']\r\n\r\nexport default {\r\n data () {\r\n return {\r\n editingLayer: false,\r\n allowedLayerEditModes: [],\r\n layerEditMode: ''\r\n }\r\n },\r\n methods: {\r\n isLayerEdited (layer) {\r\n return this.editedLayer && (this.editedLayer.name === layer.name)\r\n },\r\n getGeoJsonEditOptions (options) {\r\n let filteredOptions = options\r\n if (_.has(filteredOptions, 'leaflet.tooltip') || _.has(filteredOptions, 'leaflet.popup')) {\r\n // Disable tooltip & popup features on edited layer\r\n filteredOptions = Object.assign({}, options)\r\n if (filteredOptions.leaflet.tooltip) delete filteredOptions.leaflet.tooltip\r\n if (filteredOptions.leaflet.popup) delete filteredOptions.leaflet.popup\r\n }\r\n // Retrieve base options first\r\n const { onEachFeature } = this.getGeoJsonOptions(filteredOptions)\r\n return {\r\n // Allow geoman edition\r\n pmIgnore: false,\r\n onEachFeature,\r\n // Use default styling when editing as dynamic styling can conflict\r\n style: (feature) => {\r\n return Object.assign({}, this.activityOptions.engine.editFeatureStyle || this.activityOptions.engine.featureStyle)\r\n },\r\n pointToLayer: (feature, latlng) => {\r\n return this.createMarkerFromStyle(latlng, Object.assign({ pmIgnore: false }, // Allow geoman edition\r\n this.activityOptions.engine.editPointStyle || this.activityOptions.engine.pointStyle))\r\n }\r\n }\r\n },\r\n setEditMode (mode) {\r\n if (!this.editableLayer) return\r\n\r\n // disable all modes\r\n if (this.map.pm.globalDrawModeEnabled()) this.map.pm.disableDraw()\r\n if (this.map.pm.globalEditModeEnabled()) this.map.pm.disableGlobalEditMode()\r\n if (this.map.pm.globalDragModeEnabled()) this.map.pm.disableGlobalDragMode()\r\n if (this.map.pm.globalRemovalModeEnabled()) this.map.pm.disableGlobalRemovalMode()\r\n if (this.map.pm.globalRotateModeEnabled()) this.map.pm.disableGlobalRotateMode()\r\n this.map.pm.setGlobalOptions({ layerGroup: this.map })\r\n\r\n if (this.allowedLayerEditModes.indexOf(mode) === -1) return\r\n\r\n if (mode === 'edit-properties') {\r\n } else if (mode === 'edit-geometry') {\r\n this.map.pm.enableGlobalEditMode()\r\n } else if (mode === 'drag') {\r\n this.map.pm.enableGlobalDragMode()\r\n } else if (mode === 'rotate') {\r\n this.map.pm.enableGlobalRotateMode()\r\n } else if (mode === 'remove') {\r\n this.map.pm.setGlobalOptions({ layerGroup: this.editableLayer })\r\n this.map.pm.enableGlobalRemovalMode()\r\n } else if (mode === 'add-polygons') {\r\n this.map.pm.setGlobalOptions({ layerGroup: this.editableLayer })\r\n this.map.pm.enableDraw('Polygon', { continueDrawing: true })\r\n } else if (mode === 'add-rectangles') {\r\n this.map.pm.setGlobalOptions({ layerGroup: this.editableLayer })\r\n this.map.pm.enableDraw('Rectangle', { continueDrawing: true })\r\n } else if (mode === 'add-lines') {\r\n this.map.pm.setGlobalOptions({ layerGroup: this.editableLayer })\r\n this.map.pm.enableDraw('Line', { continueDrawing: true })\r\n } else if (mode === 'add-points') {\r\n this.map.pm.setGlobalOptions({ layerGroup: this.editableLayer })\r\n this.map.pm.enableDraw('Marker', { continueDrawing: true })\r\n }\r\n\r\n this.layerEditMode = mode\r\n },\r\n async startEditLayer (layer, { allowedEditModes = null, editMode = null } = {}) {\r\n if (this.editedLayer) return\r\n\r\n const leafletLayer = this.getLeafletLayerByName(layer.name)\r\n if (!leafletLayer) return\r\n\r\n this.allowedLayerEditModes = allowedEditModes || [\r\n 'edit-properties',\r\n 'edit-geometry',\r\n 'drag',\r\n 'rotate',\r\n 'remove',\r\n 'add-polygons',\r\n 'add-rectangles',\r\n 'add-lines',\r\n 'add-points'\r\n ]\r\n\r\n this.editedLayer = layer\r\n this.editingLayer = true\r\n this.$emit('edit-start', { layer: this.editedLayer })\r\n\r\n // Move source layers to edition layers, required as eg clusters are not supported\r\n const geoJson = leafletLayer.toGeoJSON()\r\n leafletLayer.clearLayers()\r\n\r\n // in-memory edition ?\r\n if (this.editedLayer._id === undefined) {\r\n // In this case we have to push features to in memory service\r\n const features = geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson]\r\n for (const feature of features) {\r\n // Generate in memory service _id as string to match what's done with mongo\r\n feature._id = uid().toString()\r\n // Service will use the provided _id as object key\r\n await this.$api.getService('features-edition').create(feature)\r\n }\r\n }\r\n\r\n this.editableLayer = L.geoJson(geoJson, this.getGeoJsonEditOptions(layer))\r\n this.map.addLayer(this.editableLayer)\r\n bindLeafletEvents(this.map, mapEditEvents, this)\r\n bindLeafletEvents(this.editableLayer, layerEditEvents, this)\r\n const schema = _.get(this.editedLayer, 'schema.content')\r\n if (schema) {\r\n // fill in the blanks\r\n this.editedLayerSchema = JSON.stringify(updatePropertiesSchema(schema))\r\n }\r\n\r\n this.$on('click', this.onEditFeatureProperties)\r\n this.$on('zoomend', this.onMapZoomWhileEditing)\r\n this.$on('pm:create', this.onFeatureCreated)\r\n this.$on('pm:update', this.onFeaturesEdited)\r\n this.$on('pm:dragend', this.onFeaturesEdited)\r\n this.$on('pm:rotateend', this.onFeaturesEdited)\r\n this.$on('layerremove', this.onFeaturesDeleted)\r\n\r\n if (editMode) this.setEditMode(editMode)\r\n },\r\n async stopEditLayer (status = 'accept') {\r\n if (!this.editedLayer) return\r\n\r\n const leafletLayer = this.getLeafletLayerByName(this.editedLayer.name)\r\n if (!leafletLayer) return\r\n\r\n // Make sure we end geoman\r\n if (this.map.pm.globalDrawModeEnabled()) this.map.pm.disableDraw()\r\n if (this.map.pm.globalEditModeEnabled()) this.map.pm.disableGlobalEditMode()\r\n if (this.map.pm.globalDragModeEnabled()) this.map.pm.disableGlobalDragMode()\r\n if (this.map.pm.globalRemovalModeEnabled()) this.map.pm.disableGlobalRemovalMode()\r\n if (this.map.pm.globalRotateModeEnabled()) this.map.pm.disableGlobalRotateMode()\r\n this.map.pm.setGlobalOptions({ layerGroup: this.map })\r\n\r\n unbindLeafletEvents(this.map, mapEditEvents)\r\n unbindLeafletEvents(this.editableLayer, layerEditEvents)\r\n\r\n // for in memory edition, clear service\r\n if (this.editedLayer._id === undefined) {\r\n const geoJson = this.editableLayer.toGeoJSON()\r\n const features = geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson]\r\n for (const feature of features) {\r\n await this.$api.getService('features-edition').remove(feature._id)\r\n }\r\n }\r\n\r\n // Set back edited layers to source layer\r\n this.map.removeLayer(this.editableLayer)\r\n leafletLayer.addLayer(this.editableLayer)\r\n this.$emit('edit-stop', { status, layer: this.editedLayer })\r\n this.editedLayer = null\r\n this.editingLayer = false\r\n this.editedLayerSchema = null\r\n\r\n this.$off('click', this.onEditFeatureProperties)\r\n this.$off('zoomend', this.onMapZoomWhileEditing)\r\n this.$off('pm:create', this.onFeatureCreated)\r\n this.$off('pm:update', this.onFeaturesEdited)\r\n this.$off('pm:dragend', this.onFeaturesEdited)\r\n this.$off('pm:rotateend', this.onFeaturesEdited)\r\n this.$off('layerremove', this.onFeaturesDeleted)\r\n },\r\n async onEditFeatureProperties (layer, event) {\r\n const leafletLayer = event && event.target\r\n const feature = _.get(leafletLayer, 'feature')\r\n\r\n if (this.layerEditMode !== 'edit-properties' ||\r\n !this.isLayerEdited(layer) ||\r\n !this.editedLayerSchema ||\r\n !leafletLayer ||\r\n !feature) return\r\n\r\n // Avoid default popup\r\n const popup = leafletLayer.getPopup()\r\n if (popup) leafletLayer.unbindPopup(popup)\r\n\r\n const service = this.editedLayer._id ? 'features' : 'features-edition'\r\n\r\n this.editFeatureModal = await this.$createComponent('editor/KModalEditor', {\r\n propsData: {\r\n service,\r\n contextId: this.contextId,\r\n objectId: feature._id,\r\n schemaJson: this.editedLayerSchema,\r\n perspective: 'properties'\r\n }\r\n })\r\n this.editFeatureModal.$mount()\r\n this.editFeatureModal.openModal()\r\n this.editFeatureModal.$on('applied', async updatedFeature => {\r\n // Restore popup\r\n if (popup) leafletLayer.bindPopup(popup)\r\n // Save in DB and in memory\r\n if (this.editedLayer._id) {\r\n await this.editFeaturesProperties(updatedFeature)\r\n } else {\r\n await this.$api.getService('features-edition').patch(updatedFeature._id, _.pick(updatedFeature, ['properties']))\r\n }\r\n const geoJson = leafletLayer.toGeoJSON()\r\n Object.assign(geoJson, _.pick(updatedFeature, ['properties']))\r\n this.editableLayer.removeLayer(leafletLayer)\r\n this.editableLayer.addData(geoJson)\r\n this.editFeatureModal.closeModal()\r\n this.editFeatureModal = null\r\n })\r\n this.editFeatureModal.$on('closed', () => {\r\n // Restore popup\r\n if (popup) leafletLayer.bindPopup(popup)\r\n this.editFeatureModal = null\r\n })\r\n },\r\n async onFeatureCreated (event) {\r\n const leafletLayer = event && event.layer\r\n if ((this.layerEditMode !== 'add-polygons' &&\r\n this.layerEditMode !== 'add-rectangles' &&\r\n this.layerEditMode !== 'add-lines' &&\r\n this.layerEditMode !== 'add-points') ||\r\n !leafletLayer) return\r\n\r\n let geoJson = leafletLayer.toGeoJSON()\r\n // Generate temporary ID for feature\r\n const idValue = uid().toString()\r\n let idProp = _.get(this.editedLayer, 'featureId')\r\n idProp = (idProp && (idProp !== '_id')) ? 'properties.' + idProp : '_id'\r\n _.set(geoJson, idProp, idValue)\r\n // Save changes to DB, we use the layer DB ID as layer ID on features\r\n if (this.editedLayer._id) {\r\n geoJson = await this.createFeatures(geoJson, this.editedLayer._id)\r\n } else {\r\n // Generate in memory service _id as string to match what's done with mongo\r\n geoJson._id = idValue\r\n // Service will use the provided _id as object key\r\n await this.$api.getService('features-edition').create(geoJson)\r\n }\r\n this.editableLayer.removeLayer(leafletLayer)\r\n this.editableLayer.addData(geoJson)\r\n },\r\n async onFeaturesEdited (event) {\r\n const leafletLayer = event && event.layer\r\n if ((this.layerEditMode !== 'edit-geometry' &&\r\n this.layerEditMode !== 'drag' &&\r\n this.layerEditMode !== 'rotate') ||\r\n !leafletLayer) return\r\n\r\n // Save changes to DB\r\n const geoJson = leafletLayer.toGeoJSON()\r\n if (this.editedLayer._id) {\r\n await this.editFeaturesGeometry(geoJson)\r\n } else {\r\n const features = geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson]\r\n for (const feature of features) {\r\n await this.$api.getService('features-edition').patch(feature._id, _.pick(feature, ['geometry']))\r\n }\r\n }\r\n },\r\n async onFeaturesDeleted (event) {\r\n const leafletLayer = event && event.layer\r\n if (this.layerEditMode !== 'remove' ||\r\n !leafletLayer) return\r\n\r\n // This is connected to the 'layerremove' event of the editable layer\r\n // but we may also receive 'layerremove' event from the map\r\n if (!event.target || event.target !== this.editableLayer) return\r\n\r\n // Save changes to DB\r\n const geoJson = leafletLayer.toGeoJSON()\r\n if (this.editedLayer._id) {\r\n await this.removeFeatures(geoJson)\r\n } else {\r\n const features = geoJson.type === 'FeatureCollection' ? geoJson.features : [geoJson]\r\n for (const feature of features) {\r\n await this.$api.getService('features-edition').remove(feature._id)\r\n }\r\n }\r\n },\r\n onMapZoomWhileEditing (event) {\r\n // Make sure we keep our edition layer on top\r\n if (this.editableLayer) {\r\n this.editableLayer.bringToFront()\r\n }\r\n },\r\n async onRemoveFeature (feature, layer, leafletLayer) {\r\n Dialog.create({\r\n title: this.$t('mixins.editLayers.REMOVE_FEATURE_DIALOG_TITLE'),\r\n message: this.$t('mixins.editLayers.REMOVE_FEATURE_DIALOG_MESSAGE'),\r\n html: true,\r\n ok: {\r\n label: this.$t('OK'),\r\n flat: true\r\n },\r\n cancel: {\r\n label: this.$t('CANCEL'),\r\n flat: true\r\n }\r\n }).onOk(async () => {\r\n const parentLeafletLayer = this.getLeafletLayerByName(layer.name)\r\n if (!parentLeafletLayer) return\r\n await this.removeFeatures(feature)\r\n parentLeafletLayer.removeLayer(leafletLayer)\r\n })\r\n }\r\n },\r\n created () {\r\n // Perform required conversion for default feature styling\r\n if (this.activityOptions.engine.editFeatureStyle) this.convertFromSimpleStyleSpec(this.activityOptions.engine.editFeatureStyle, 'update-in-place')\r\n if (this.activityOptions.engine.editPointStyle) this.convertFromSimpleStyleSpec(this.activityOptions.engine.editPointStyle, 'update-in-place')\r\n }\r\n}\r\n"]}
@@ -43,7 +43,10 @@ exports.default = {
43
43
  var _this = this;
44
44
 
45
45
  this.$on('map-ready', () => {
46
- this.loader = _leaflet2.default.FileLayer.fileLoader(this.map, Object.assign({
46
+ // Instanciate the control to enable the access to the input element.
47
+ // This is required to let Puppeteer upload a file
48
+ // See https://github.com/kalisio/kdk/issues/472
49
+ this.loaderControl = _leaflet2.default.Control.fileLayerLoad(Object.assign({
47
50
  // Allows you to use a customized version of L.geoJson.
48
51
  // For example if you are using the Proj4Leaflet leaflet plugin,
49
52
  // you can pass L.Proj.geoJson and load the files into the
@@ -58,22 +61,26 @@ exports.default = {
58
61
  // Restrict accepted file formats (default: .geojson, .kml, and .gpx)
59
62
  formats: ['.geojson', '.json', '.kml', '.gpx']
60
63
  }, this.activityOptions.engine.fileLayers));
61
- // Required to support drag'n'drop because we do not use the built-in control
62
- this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false);
63
- this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false);
64
- this.map._container.addEventListener('dragover', event => {
65
- event.stopPropagation();
66
- event.preventDefault();
67
- }, 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', (() => {
64
+ this.loaderControl.addTo(this.map);
65
+ // Hide the contoler
66
+ const loaderControlElements = document.getElementsByClassName('leaflet-control-filelayer');
67
+ if (loaderControlElements.length > 0) loaderControlElements[0].style.visibility = 'hidden';
68
+ /*
69
+ // Required to support drag'n'drop when not using built-in control
70
+ this.map._container.addEventListener('dragenter', () => this.map.scrollWheelZoom.disable(), false)
71
+ this.map._container.addEventListener('dragleave', () => this.map.scrollWheelZoom.enable(), false)
72
+ this.map._container.addEventListener('dragover', (event) => {
73
+ event.stopPropagation()
74
+ event.preventDefault()
75
+ }, false)
76
+ this.map._container.addEventListener('drop', (event) => {
77
+ event.stopPropagation()
78
+ event.preventDefault()
79
+ this.loaderControl.loader.loadMultiple(event.dataTransfer.files)
80
+ this.map.scrollWheelZoom.enable()
81
+ }, false)
82
+ */
83
+ this.loaderControl.loader.on('data:loaded', (() => {
77
84
  var _ref = _asyncToGenerator(function* (event) {
78
85
  const name = event.filename ? _path2.default.basename(event.filename, _path2.default.extname(event.filename)) : _this.$t('mixins.fileLayers.IMPORTED_DATA_NAME');
79
86
  const engine = {
@@ -113,7 +120,7 @@ exports.default = {
113
120
  return _ref.apply(this, arguments);
114
121
  };
115
122
  })());
116
- this.loader.on('data:error', event => {
123
+ this.loaderControl.loader.on('data:error', event => {
117
124
  _loglevel2.default.error(event.error);
118
125
  this.$events.$emit('error', {
119
126
  message: this.$t('errors.FILE_IMPORT_ERROR')
@@ -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":["L","togeojson","mounted","$on","loaderControl","Control","fileLayerLoad","Object","assign","layer","geoJson","layerOptions","getGeoJsonOptions","addToMap","fileSizeLimit","formats","activityOptions","engine","fileLayers","addTo","map","loaderControlElements","document","getElementsByClassName","length","style","visibility","loader","on","event","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 // Instanciate the control to enable the access to the input element.\r\n // This is required to let Puppeteer upload a file\r\n // See https://github.com/kalisio/kdk/issues/472\r\n this.loaderControl = L.Control.fileLayerLoad(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 this.loaderControl.addTo(this.map)\r\n // Hide the contoler\r\n const loaderControlElements = document.getElementsByClassName('leaflet-control-filelayer')\r\n if (loaderControlElements.length > 0) loaderControlElements[0].style.visibility = 'hidden'\r\n /*\r\n // Required to support drag'n'drop when not using 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 this.loaderControl.loader.loadMultiple(event.dataTransfer.files)\r\n this.map.scrollWheelZoom.enable()\r\n }, false)\r\n */\r\n this.loaderControl.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.loaderControl.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"]}
@@ -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
 
@@ -106,7 +111,10 @@ exports.default = {
106
111
  // And coordinates if not static
107
112
  const staticGeometry = _lodash2.default.get(leafletOptions, 'staticGeometry', false);
108
113
  if (staticGeometry) return oldLayer;
109
- const type = feature.geometry.type;
114
+ // The feature is changing its geometry type, recreate it
115
+ const oldType = _lodash2.default.get(oldLayer, 'feature.geometry.type');
116
+ const type = _lodash2.default.get(feature, 'geometry.type');
117
+ if (type !== oldType) return;
110
118
  const coordinates = feature.geometry.coordinates;
111
119
  // FIXME: support others geometry types ?
112
120
  switch (type) {
@@ -162,7 +170,7 @@ exports.default = {
162
170
  try {
163
171
  // Update only the first time or when required according to data update interval
164
172
  if (!lastUpdateTime || !_this.shouldSkipFeaturesUpdate(lastUpdateTime, options)) {
165
- lastUpdateTime = _this.currentTime ? _this.currentTime.clone() : _moment2.default.utc();
173
+ lastUpdateTime = _time.Time.getCurrentTime().clone();
166
174
  successCallback((yield _this.getFeatures(options)));
167
175
  }
168
176
  } catch (error) {
@@ -193,7 +201,7 @@ exports.default = {
193
201
  const searchParams = Object.assign({
194
202
  OUTPUTFORMAT: options.wfs.outputFormat, // request as geojson
195
203
  SRSNAME: 'EPSG:4326', // result in 4326
196
- BBOX: `${query.south},${query.west},${query.north},${query.east},EPSG:4326` // request bbox
204
+ BBOX: `${query.south},${query.west},${query.north},${query.east},urn:ogc:def:crs:EPSG::4326` // request bbox
197
205
  }, options.wfs.searchParams);
198
206
  return wfs.GetFeature(options.wfs.url, options.wfs.version, options.wfs.layer, searchParams, { xml2json: false });
199
207
  };
@@ -205,7 +213,7 @@ exports.default = {
205
213
  _lodash2.default.set(leafletOptions, 'source', (() => {
206
214
  var _ref4 = _asyncToGenerator(function* (successCallback, errorCallback) {
207
215
  try {
208
- const sourceToFetch = sourceCompiler({ time: _this.currentTime || _moment2.default.utc() });
216
+ const sourceToFetch = sourceCompiler({ time: _time.Time.getCurrentTime() });
209
217
  if (!lastFetchedSource || lastFetchedSource !== sourceToFetch) {
210
218
  lastFetchedSource = sourceToFetch;
211
219
  successCallback((yield (0, _utils.fetchGeoJson)(sourceToFetch)));
@@ -452,10 +460,10 @@ exports.default = {
452
460
  },
453
461
  created() {
454
462
  this.registerLeafletConstructor(this.createLeafletGeoJsonLayer);
455
- this.$on('current-time-changed', this.onCurrentTimeChangedGeoJsonLayers);
463
+ this.$events.$on('time-current-time-changed', this.onCurrentTimeChangedGeoJsonLayers);
456
464
  },
457
465
  beforeDestroy() {
458
- this.$off('current-time-changed', this.onCurrentTimeChangedHeatmapLayers);
466
+ this.$events.$off('time-current-time-changed', this.onCurrentTimeChangedHeatmapLayers);
459
467
  }
460
468
  };
461
469
  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","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, 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 // 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);